2017-01-01 38 views
7

我正在开发Firebase Android应用程序,后面的Udacity教程。SetProviders方法被标记为不推荐

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

你能分享错误日志吗? –

+1

您正在查找的文档位于以下位置:https://github.com/firebase/FirebaseUI-Android/blob/master/auth/README.md#sign-in-examples – now

回答

10

UPDATE:您现在可以使用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

比下面KS @Alexey

该解决方案将工作,但已被弃用:

我也遵循相同的教程,并在这里结束了寻找解决方案。我试图找到一个解决方案,并找到它。有两种重载方法可用于setProviders()setProviders(String ... providers)已被弃用。我用setProviders(列表< 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); 
      } 
     } 
    }; 

大功告成! 祝您有美好的一天:)

+0

AuthUI.IdpConfig.Builder()已弃用现在也是。应使用setAvailableProviders()方法,并在其中包含适当的构建器,如[https://github.com/firebase/FirebaseUI-Android/tree/master/auth#adding-providers] –

0

检查您的模拟器和构建API级别是否相同,而不是在更高的API级别进行模拟。谷歌播放服务错误来自我的这一点。

在build.gradle文件中检查这个;下面

例子是API等级24

android { 
compileSdkVersion 24 
buildToolsVersion "24.0.1" 
...} 
4

只需更换 “setProvider” 与 “setAvailableProviders”,它会工作。

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()