2017-01-02 92 views
2

我有一個Android應用程序,其中包含一些活動和長時間運行的服務。該服務具有一些模型類,POJO存儲在Firebase數據庫中。Firebase身份驗證:使用FirebaseUI登錄後獲取AuthCredential

首次運行時,應用程序確定用戶尚未登錄,並使用FirebaseUI-Android爲其提供Google和Facebook帳戶選擇器活動。這是很常見的:

Intent signInIntent = AuthUI.getInstance().createSignInIntentBuilder() 
      .setProviders(Arrays.asList(
        new AuthUI.IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER).build(), 
        new AuthUI.IdpConfig.Builder(AuthUI.FACEBOOK_PROVIDER).build())) 
      .setTheme(R.style.AppThemeFirebaseAuth) 
      .setLogo(R.drawable.logo) 
      .setIsSmartLockEnabled(!BuildConfig.DEBUG) 
      .build(); 

    activity.startActivityForResult(signInIntent, Request.FIREBASE_AUTH); 

然後我就可以得到一個FirebaseUser,並開始做的東西與數據庫。

FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser(); 

DatabaseReference firebaseUserRef = FirebaseDatabase.getInstance().getReference("users").child(firebaseUser.getUid()); 

問題出現在服務的下一次運行中,這可能是當沒有任何活動時。我想再次做一些數據庫操作,但沒有任何用戶交互。看起來我需要撥打FirebaseAuth.signInWithCredential(),但我在哪裏可以獲得AuthCredential參考? AuthCredential不會傳遞迴開始登錄的活動。

我可以在FirebaseUI-Android中使用智能鎖定功能來幫助您嗎?

+0

無法訪問FirebaseAuth.getInstance()。getCurrentUser();從你的服務?由於它是一種靜態方法,因此您應該能夠從任何地方訪問它。 –

+0

當然。返回null。 – Eliot

+0

@SaurabhPadwekar我很快就會說話,對不起!看起來這比第一次擔心的時候要少得多。我會在接下來的幾周內做一些測試,並用我的發現進行更新,但我可能不必堅持AuthCredential。 – Eliot

回答

0

你不能。 從這個線程https://github.com/firebase/FirebaseUI-Android/issues/123

啊,我們有一些同事討論此之後在這裏有一個小問題。故意無法從現有用戶取回AuthCredential,以避免可能泄漏的憑據。因此,如果您正在使用該庫,則必須在Firebase UI中將身份驗證方法鏈接到匿名帳戶。我會在下週看一看,以便儘快解除阻止