2

ここに長いバージョンがあります:あなたのAndroidアプリケーションでfirebase-uiを使用しているときに、ユーザーが既にアカウントを作成しているかどうかを確認するにはどうすればよいですか?

私はFirebaseとAndroid Studioにはまったく新しく、私のアプリではGoogleとFBでサインインするような部分を書きました。私はthis tutorialに続いた。

すべてはうまく動作しますが、私が今やりたいことは、ユーザーからいくつかの情報を収集し、Firebaseデータベースに格納することです(これは私が基本的なアイデアだと思います)。しかし、問題は、アカウントごとにこれらの詳細を尋ねたいので、ユーザーが最初にアカウントを作成しているかどうかをどのように知ることができないか分かりません。だから私はAuthから 'User UID'を使うつもりだと思った。しかし、私が遭遇した問題は、上記のチュートリアルを使用しているときにユーザーが既に存在するかどうかをチェックするためのコードを、どのように書くべきかということでした。私はデータベースのルールのセクションやコード自体でそれをやろうとしていますか?

チュートリアルで作成したコードを投稿します。申し訳ありませんが、これはノブの質問ですが、私が知っている開発者の中にはFirebase UIの経験がありません。だから私は本当に彼のことについて誰にも質問するつもりはない。どんな助けもありがとうございます。

MainActivity.java 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import com.firebase.ui.auth.AuthUI; 
import com.google.firebase.auth.FirebaseAuth; 

public class MainActivity extends AppCompatActivity { 

private static final int RC_SIGN_IN=0; 
private FirebaseAuth auth; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    auth = FirebaseAuth.getInstance(); 
    if(auth.getCurrentUser() != null) { 
     //user already signed in 

     Log.d("AUTH", auth.getCurrentUser().getEmail()); 
     Intent intent = new Intent(this, com.jacob.appdevitae.HomeActivity.class); 
     startActivity(intent); 
     finish(); 
    } 
    else { 
     startActivityForResult(AuthUI.getInstance() 
       .createSignInIntentBuilder() 
       .setProviders(
         AuthUI.FACEBOOK_PROVIDER, 
         AuthUI.GOOGLE_PROVIDER) 
       .build(),RC_SIGN_IN); 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(requestCode == RC_SIGN_IN) { 
     if(resultCode == RESULT_OK) { 
      //User logged in 
      Log.d("AUTH", auth.getCurrentUser().getEmail()); 
      Intent intent = new Intent(this, com.jacob.appdevitae.HomeActivity.class); 
      startActivity(intent); 
      finish(); 
     } 
     else { 
      //User not authenticated 
      Log.d("AUTH", "NOT AUTHENTICATED"); 
     } 
    } 
}} 

答えて

1

まずGradleの
com.google.firebaseのアプリレベルでdependencieを追加:あなたは、ユーザーかどうかを確認するために持っていけないので、一度だけ、国連に署名9.6.1

ユーザー:firebaseデータベースサインアップした後に情報を追加するだけです。例えば

:私は「アカウント作成」部分を行うコードのどの部分を識別するために、出力の異なる組み合わせを試し

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
super.onActivityResult(requestCode, resultCode, data); 
if(requestCode == RC_SIGN_IN) { 
    if(resultCode == RESULT_OK) { 
     //User logged in 
     Log.d("AUTH", auth.getCurrentUser().getEmail()); 
//create the database 
     DatabaseReference mdatabase=FirebaseDatabase.getInstance.getReference.child("User-Information"); 

     //set the information, you can put how much as you want 
     mdatabase.child("user-information1").setValue("User-information1"); 
     mdatabase.child("user-information2").setValue("User-information2") 
      .addOnCompleteListener(new OnCompleteListener<AuthResult>() { 
       @Override 
       public void onComplete(@NonNull Task<AuthResult> task) { 
        Log.d(LOG_TAG, "signIn:onComplete:" + task.isSuccessful()); 

        if (task.isSuccessful()) { 
         //success 
        } else { 
         //Error 

        } 
       } 
      });; 

     Intent intent = new Intent(this, com.jacob.appdevitae.HomeActivity.class); 
     startActivity(intent); 
     finish(); 
    } 
    else { 
     //User not authenticated 
     Log.d("AUTH", "NOT AUTHENTICATED"); 
    } 
} 
+0

。しかし、私はそれを理解できませんでした。私はこれを試してみましょう。ありがとうございました。 –

+0

なぜcom.google.firebase:firebase-database:9.6.1の代わりにcom.google.firebase:firebase-database:9.8.0?私の他のすべての依存関係は9.8.0です。 –

+0

私はドキュメント上のその1つを見つけました。9.8.0を使用してください。 –

関連する問題