2017-02-18 87 views
2

我正在開發一個項目,用戶應該可以在沒有任何登錄的情況下使用應用程序。但他們也應該能夠使用他們的Google帳戶登錄,以便將他們的數據與多臺設備同步。用於Firebase實時數據庫/ Firebase身份驗證的Android唯一密鑰

如何獲得「匿名」用戶的唯一標識符?我知道存在一種方法,如.push().getKey()從實時數據庫中獲取uid,但我可以在哪裏將此密鑰存儲在設備上?

我也在使用Firebase身份驗證,因此當人們使用他們的應用程序的Google帳戶時,我可以使用來自Firebase身份驗證的Uid。在Firebase身份驗證中也有一個匿名用戶的選項,但我不想去那,因爲這隻會暫時存儲數據。

+0

「但我可以在設備上存儲此密鑰?」 - Firebase數據庫也提供脫機支持。您可以閱讀更多關於它的信息(https://firebase.google.com/docs/database/android/offline-capabilities) –

回答

1

你混淆了兩兩件事:

  • 火力地堡數據庫有一個名爲push()方法,其產生統計學上保證是唯一的ID。
  • Firebase身份驗證會爲每個註冊用戶生成一個UID,該用戶在所有用戶中都是唯一的。

這兩個值之間沒有任何關係。

如果要標識用戶,請向用戶註冊Firebase身份驗證,並使用用戶的UID標識它們。如果您不希望用戶必須登錄,請使用anonymous authentication。這個簡單:

FirebaseAuth.getInstance().signInAnonymously(); 

然後你通過等待它們被註冊得到他們的UID:

FirebaseAuth.getInstance(). addAuthStateListener(new FirebaseAuth.AuthStateListener() { 
    @Override 
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
     FirebaseUser user = firebaseAuth.getCurrentUser(); 
     if (user != null) { 
      // User is signed in 
      Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid()); 
     } else { 
      // User is signed out 
      Log.d(TAG, "onAuthStateChanged:signed_out"); 
     } 
     // ... 
    } 
});; 

的UID被自動存儲在設備上。因此,當用戶重新啓動應用程序時,也會觸發onAuthStateChanged。如果用戶之前未登錄,請務必只撥打signInAnonymously

+0

用戶應該可以在不註冊的情況下完全使用該應用。如果他們想「備份」或同步他們的數據,他們可以選擇這樣做。對於匿名用戶,如果每次應用程序啓動時都不調用'signInAnonymously()',他們將從Firebase身份驗證中獲得的UID保持不變? –

+0

是的。調用'signInAnonymously()'創建一個在應用程序重新啓動之間持久化的UID。因此,除非您再次調用它,否則用戶將保持相同的UID,並且他們的Firebase身份驗證帳戶甚至可以鏈接到其他提供者(請參閱https://firebase.google.com/docs/auth/android/account-linking)。 –

+0

所以我想在我的數據庫中使用這個匿名UID作爲用戶標識符是安全的?如果我做的一切正確,沒有數據會丟失? –