SetProviders方法已标记为已弃用

时间:2017-01-01 15:11:18

标签: android firebase firebase-authentication

我正在按照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);
            }
        }
    };

}

5 个答案:

答案 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);

来源:Firebase UI for Auth

谢谢@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"
...}