2017-01-01 40 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()