我正在按照Udacity教程开发Firebase android应用程序。
setProviders方法被IDE标记为已弃用,在浏览完文档之后我无法找到解决方案。有没有办法解决问题。 这是代码:
mMessagesDatabaseReference.addChildEventListener(mChildEventListener);
mAuthStateListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null){
Toast.makeText(MainActivity.this,"You are signed in, Welcome", Toast.LENGTH_SHORT).show();
}else{
startActivityForResult(
AuthUI.getInstance()
.createSignInIntentBuilder()
.setIsSmartLockEnabled(false)
.setProviders(
AuthUI.EMAIL_PROVIDER,
AuthUI.GOOGLE_PROVIDER
)
.build(),
RC_SIGN_IN);
}
}
};
}
答案 0 :(得分:19)
更新:您现在可以使用setAvailableProviders()
代替已弃用的setProviders()
用法示例:
startActivityForResult(
AuthUI.getInstance()
.createSignInIntentBuilder()
.setAvailableProviders(Arrays.asList(
new AuthUI.IdpConfig.EmailBuilder().build(),
new AuthUI.IdpConfig.GoogleBuilder().build(),
new AuthUI.IdpConfig.FacebookBuilder().build()))
.build(),
RC_SIGN_IN);
谢谢@Alexey
以下解决方案可以使用,但已被弃用:
我也遵循相同的教程,最终在这里寻找解决方案。我试图找到一个解决方案,并找到了解决方案。 setProviders()有两种重载方法。不推荐使用 setProviders(String ... providers)的那个。我使用了 setProviders(List< IdpConfig> idpConfigs)。以下是代码:
首先创建IdpConfig的List实例,在创建FirebaseDatabase实例的位置执行此操作。换句话说,在所有方法之外和课堂内进行此操作。
List<AuthUI.IdpConfig> providers;
将此内容写入 onCreate():
providers = new ArrayList<>();
然后用以下代码替换你的代码:
mMessagesDatabaseReference.addChildEventListener(mChildEventListener);
mAuthStateListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null){
Toast.makeText(MainActivity.this,"You are signed in, Welcome", Toast.LENGTH_SHORT).show();
}else {
providers.add(new AuthUI.IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build());
providers.add(new AuthUI.IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER).build());
startActivityForResult(
AuthUI.getInstance()
.createSignInIntentBuilder()
.setIsSmartLockEnabled(false)
.setProviders(providers)
.build(),
RC_SIGN_IN);
}
}
};
你完成了! 祝你有个美好的一天:)
答案 1 :(得分:5)
您应该使用while()
代替setAvailableProviders()
,如以下链接中的FirebaseUI示例所示:
https://github.com/firebase/FirebaseUI-Android/blob/master/auth/README.md#sign-in-examples
答案 2 :(得分:4)
只需将“setProvider”替换为“setAvailableProviders”即可。
答案 3 :(得分:1)
而不是这条线:
setProviders(
AuthUI.EMAIL_PROVIDER,
AuthUI.GOOGLE_PROVIDER)
.build()
在新版本的FirebaseAuth 11.4.2中使用setAailableProviders而不是setProviders如下:
setAvailableProviders(
Arrays.asList(new AuthUI.IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build(),
new AuthUI.IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER).build()))
.build()
答案 4 :(得分:0)
检查您的模拟器和构建API级别是否相同,并且不在更高的API级别进行模拟。谷歌播放服务错误来自于我。
在build.gradle文件中检查;
以下示例是API Level 24
android {
compileSdkVersion 24
buildToolsVersion "24.0.1"
...}