0

アプリケーションにログインする各ユーザのすべての詳細(uid、名前など)を持つデータベースエントリを作成して使用する必要があります。AndroidにFirebaseを使用してユーザーデータを保存する方法は?

ユーザプロファイルを使用してユーザプロファイル情報を取得および取得する際に問題があります。 AndroidのFirebase Firebaseの旧バージョンではこれがdocumentationでしたが、これはもう動作しません。

誰かが上記のコードを再現する方法を知っていますので、Firebaseの新しいバージョンで動作しますか?事前に多くの感謝。

編集 - 以下のコード:

final Firebase ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com"); 
ref.authWithPassword("[email protected]", "correcthorsebatterystaple", 
new Firebase.AuthResultHandler() { 
@Override 
public void onAuthenticated(AuthData authData) { 
    // Authentication just completed successfully :) 
    Map<String, String> map = new HashMap<String, String>(); 
    map.put("provider", authData.getProvider()); 
    if(authData.getProviderData().containsKey("displayName")) { 
     map.put("displayName", authData.getProviderData().get("displayName").toString()); 
    } 
    ref.child("users").child(authData.getUid()).setValue(map); 
} 
@Override 
public void onAuthenticationError(FirebaseError error) { 
    // Something went wrong :(
} 
}); 

答えて

1
  • メールアドレスとパスワードでユーザーを認証する(グーグル、フェイスブック)Firebase Realtime Database
  • を使用するよりも、別のデータを格納するFirebaseデータベースを使用するには Firebase Auth
  • を使用
  • バックエンドからの認証ユーザーを管理する場合

ユーザー管理 - ユーザーのフルデータを取得してユーザーのパスワードまたは電子メールアドレスを変更します カスタム認証 - 外部ユーザーシステムとFirebaseを統合できます。 身元確認 - サービスを使用して、自分のサーバー上でこれらのユーザーを識別します。

Firebase AuthにはNODE JS sdkがあります。 からこの機能にアクセスしたい場合は、ウェブサービス(例えば、有効なAPI)を作成し、ネットワーク経由で通信するよりも、Androidを使用する必要があります。

  • あなたはリアルタイムデータベースに登録認証ユーザーにアクセスしたい場合、私はそれらが互いに分離されているので、あなたができると思ういけません。 Realtime Databaseでユーザーを登録することはできますが、Authが簡単な方法でこの機能を提供しているので、なぜそれをやりたいのか分かりません。
  • FirebaseリアルタイムデータベースもAdmin SDK (Java and Node JS)

    を持ってasksing前にマニュアルを確認してください。

+1

おかげで、アプリケーションに認証されたユーザにアクセスするための方法ですが、私はFirebaseダッシュボードの「認証」タブの下にあるユーザのリストを見ることができますが、リアルタイムデータベースを介してアクセスすることはできません。上記の私がリンクしたドキュメントはFirebaseの古いバージョンでこれを達成する方法を示していますが、私はそれを最新のバージョンで動作させることはできません。 –

2

firebaseデータベース(新しい版)でユーザーを作成するために、あなたはfollowningような変更を行う必要があります。..

 private FirebaseAuth mAuth; 
     String mUserEmail = "[email protected]"; 
     String mPassword = "correcthorsebatterystaple" 

     mAuth.createUserWithEmailAndPassword(mUserEmail, mPassword) 
    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
       @Override 
       public void onComplete(@NonNull Task<AuthResult> task) { 

        Log.d(LOG_TAG, getString(R.string.log_message_auth_successful) + " createUserWithEmail:onComplete:" + task.isSuccessful()); 

        // if task is not successful show error 
        if (!task.isSuccessful()) { 

         try { 
          throw task.getException(); 
         } catch (FirebaseAuthUserCollisionException e) { 
          // log error here        

         } catch (FirebaseNetworkException e) { 
          // log error here 
         } catch (Exception e) { 
         // log error here   
         } 

         } else { 

        // successfully user account created 
       // now the AuthStateListener runs the onAuthStateChanged callback 

        } 
       } 

      }); 
     } 

は今のonCreate(で以下のメソッドを追加します)。

final DatabaseReference ref = FirebaseDatabase.getInstance(). 
    getReferenceFromUrl(https://<YOUR-FIREBASE-APP>.firebaseio.com"); 
    mAuth = FirebaseAuth.getInstance(); 
    mAuthListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      FirebaseUser user = firebaseAuth.getCurrentUser(); 

      if (user != null) { 
       // User is signed in 
      Map<String, String> map = new HashMap<String, String>(); 
      map.put("provider", user.getProvider()); 
      if(user.getProviderData().containsKey("displayName")) { 
      map.put("displayName", 
      user.getProviderData().get("displayName").toString()); 
      } 
      ref.child("users").child(user.getUid()).setValue(map); 
      } else { 
       // User is signed out 
       Log.d(LOG_TAG, "onAuthStateChanged:signed_out"); 
      } 
     } 
    }; 

    @Override 
public void onStart() { 
    super.onStart(); 
    mAuth.addAuthStateListener(mAuthListener); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    if (mAuthListener != null) { 
     mAuth.removeAuthStateListener(mAuthListener); 
    } 

} 
+0

電子メールとパスワードを使用してユーザーにサインインする場合は、mAuth.signInWithEmailAndPassword(電子メール、パスワード)メソッドを使用できます。 –

+0

助けがあれば、この回答に同意してください。 –

0

最新のFirebase SDK(firebase.google.com/docs)を使用してください。レガシーSDKを使用すると(今やっているように)、必要以上に時間がかかります。

次のようにユーザー情報を取得することができます:Klevi01は、私は私が必要なもの、すでに認証とリアルタイムデータベース作業の両方を持っている

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
if (user != null) { 
    for (UserInfo profile : user.getProviderData()) { 
     // Id of the provider (ex: google.com) 
     String providerId = profile.getProviderId(); 

     // UID specific to the provider 
     String uid = profile.getUid(); 

     // Name, email address, and profile photo Url 
     String name = profile.getDisplayName(); 
     String email = profile.getEmail(); 
     Uri photoUrl = profile.getPhotoUrl(); 
    }; 
} 
関連する問題