2017-02-18 20 views
2

私はユーザーがログインせずにアプリを使用できるようにするプロジェクトに取り組んでいます。しかし、Googleアカウントでログインして、複数の端末とデータを同期することもできます。firebaseリアルタイムデータベース/ firebase認証用のAndroidユニークキー

「匿名」ユーザーの一意の識別子を取得するにはどうすればよいですか?リアルタイムのデータベースからuidを取得する方法は、.push().getKey()などありますが、どこにこのキーをデバイスに保存できますか?

私もfirebase認証を使用しています。そのため、ユーザーがGoogleアカウントを使用している場合、Firebase認証のUidを使用できます。 firebase認証では匿名ユーザーのためのオプションもありますが、これはデータを一時的に保存するだけなので、これを実行したくありません。

+0

"このキーはどこに格納できますか?" - Firebaseデータベースには、オフラインサポートもあります。詳細はこちら[こちら](https://firebase.google.com/docs/database/android/offline-capabilities) –

答えて

1

あなたは二つのことを混乱している:

  • Firebaseデータベースは、統計的に一意であることが保証されているIDを生成push()と呼ばれる方法があります。
  • Firebase認証は、すべてのユーザ間で一意であることが保証されている登録ユーザごとにUIDを生成しました。

この2つの値は、互いに関係がありません。

ユーザを特定する場合は、ユーザに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

ユーザーは登録なしでアプリを完全に使用できるはずです。彼らはデータを "バックアップ"または同期させたい場合、そうするオプションがあります。匿名ユーザーの場合、アプリケーションが起動するたびに 'signInAnonymous()'を呼び出さないと、firebase認証のUIDは同じままですか? –

+0

はい。 'signInAnonymously()'を呼び出すと、アプリの再起動の間に保持されるUIDが作成されます。だから、あなたが再び呼び出さない限り、ユーザーは同じUIDを保持し、Firebase認証アカウントは他のプロバイダにリンクすることさえできます(https://firebase.google.com/docs/auth/android/account-linkingを参照)。 –

+0

私はこの匿名のUIDを自分のデータベースのユーザーIDとして扱うことは安全だと思いますか?私はすべてのことを正しければ、データを失うことはありませんか? –

関連する問題