AndroidアプリにFirebase認証があります。私の質問は、認証されたユーザー(Firebaseコンソールの[Firebase::Auth
]タブに表示されます)とデータベース(Firebase::Database
タブ)。
データベース内のデータをAuth
にあるUser UID
によってAuth
の関連ユーザーとリンクし、最終的にUID
の関連情報を取得するために特定のDatabase
に関するクエリを送信する必要があります。
それを行う自動/組み込みの何かがありますか、またはユーザーを認証し、Database
に表示されるUID値でIDフィールドを作成するたびにAuth
にユーザーの新しいエントリを作成する必要がありますか?
ser Management docs では、Auth
タブへのユーザーの追加とパスワードのリセットについてのみ説明しています。
認証後、Firebaseによって指定されたUIDで子を作成し、その値をユーザークラスに設定します。
_//get firebase user
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
//get reference
DatabaseReference ref = FirebaseDatabase.getInstance().getReference(USERS_TABLE);
//build child
ref.child(user.getUid()).setValue(user_class);
_
USERS_TABLEはルートの直接の子です。
次に、データを取得する場合は、UIDを使用してユーザーへの参照を取得し、addListenerForSingleValueEvent()
(1回だけ呼び出されます)をリッスンし、リフレクションで結果を反復処理します。
_//get firebase user
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
//get reference
DatabaseReference ref = FirebaseDatabase.getInstance().getReference(USERS_TABLE).child(user.getUid());
//IMPORTANT: .getReference(user.getUid()) will not work although user.getUid() is unique. You need a full path!
//grab info
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final Profile tempProfile = new Profile(); //this is my user_class Class
final Field[] fields = tempProfile.getClass().getDeclaredFields();
for(Field field : fields){
Log.i(TAG, field.getName() + ": " + dataSnapshot.child(field.getName()).getValue());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
_
編集:
または反射なし:
_@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final Profile p = dataSnapshot.getValue(Profile.class);
}
_