私は自分の電話番号をアプリに登録されている場合、既にサインアップし、ユーザーが自分のプロファイルにリダイレクトする場所でアプリを作成していますが、彼は新しいユーザーであるならば、彼はウェルカムページにリダイレクトされます。問題は、私は電話番号の確認コードを取得することができるよ、ですが、それは常にかかわらず、それが既存のユーザーまたは新規ユーザーであるかどうかのウェルカムページにリダイレクトされます。はるかに私はFirebase電話認証を実装し、かつました
private void verifyCode(String code) {
PhoneAuthCredential phoneAuthCredential = PhoneAuthProvider.getCredential(verificationId, code);
signInWithCredentials(phoneAuthCredential);
}
private void signInWithCredentials(PhoneAuthCredential phoneAuthCredential) {
mAuth.signInWithCredential(phoneAuthCredential).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
final String num = getIntent().getStringExtra("phoneNumber");
final Query query = FirebaseDatabase.getInstance().getReference("users").orderByChild("birthday").equalTo(num);
if (task.isSuccessful()) {
if (num.equals(query.toString())) {
Log.i("Method", "Inside if block");
Log.i("value", num + query.toString());
Intent intent = new Intent(VerifyPhoneActivity.this, WelcomeActivity.class);
startActivity(intent);
} else {
Log.i("Method", "Inside if block2");
Log.i("value", num + query.toString());
Intent intent = new Intent(VerifyPhoneActivity.this, ProfileActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
} else {
Toast.makeText(VerifyPhoneActivity.this, task.getException().getMessage(), Toast.LENGTH_LONG).show();
}
}
});
}
私は/ログインサインアップして、ユーザの電話番号のみを取っているし、ログイン用の個別のボタンがありませんし、サインアップしてください。これは、OTPはFirebaseの認証によって送信された後、確認されているように動作しなければならない電話番号がデータベース内にすでに存在している場合、それすべき直接ユーザーのプロフィールページの代わりに、ウェルカム画面、しかし、もしFO電話番号は、それがウェルカムページの代わりに、ユーザープロファイルページに行くべき新しいです。私が直面してるの挑戦は、私が入力した番号がすでにユーザテーブル内のデータベースに存在しているかどうかを確認することはできませんよです(私は彼がのためにサインアップするときに、ユーザーの詳細情報を格納するために別のユーザーテーブルを作成しました初めて)。
あなたは、ユーザーを登録することができますが、あなたはそのような場合、あなたが使用しようとすることができ、ログイン/サインアップ画面に未登録のユーザーをリダイレクトすることはできません、私が理解したものから
FirebaseAuth.getInstance().currentUser
上で、それはこのようなものでなければなりませんあなたの歓迎/ホーム・ページに表示する方法を作成します
override fun onCreate(savedInstanceState: Bundle?) {
if (FirebaseAuth.getInstance().currentUser == null) {
startActivity(Intent(applicationContext, RegistrationActivity::class.java))
finish()
return
}
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// do your other stuff
}
このコードは、それがJavaで、異なるすべきではないkotlinで書かれています。それが役に立てば幸い。
更新 - - -
あなたのコードでいくつかのミスを持って、これを試してください
private void verifyCode(String code) {
PhoneAuthCredential phoneAuthCredential = PhoneAuthProvider.getCredential(verificationId, code);
FirebaseAuth.getInstance().signInWithCredential(phoneAuthCredential).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
final String num = getIntent().getStringExtra("phoneNumber");
FirebaseDatabase.getInstance().getReference("users").orderByChild("phoneNumber").equalTo(num).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
Intent intent = new Intent(VerifyPhoneActivity.this, ProfileActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
} else {
FirebaseDatabase.getInstance().getReference("users").push().child("phoneNumber").setValue(num).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Intent intent = new Intent(VerifyPhoneActivity.this, WelcomeActivity.class);
startActivity(intent);
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
} else {
Toast.makeText(VerifyPhoneActivity.this, task.getException().getMessage(), Toast.LENGTH_LONG).show();
}
}
});
}
あなたはその電話番号に登録されたユーザーを持っている場合、あなたがしなければ最初にすべての、あなたは携帯電話の詳細をユーザーにログインする必要があり、あなたがチェックし、このユーザーはすでにアプリを手段に入ったことがありますが、いずれかを持っていなかった場合は、そのその電話番号を持つユーザーの情報、あなたは、このユーザーが再び戻ってくるそうだとすれば、我々は(我々が行う)その電話番号を持つユーザのレコードを持っているかどうかをチェックし、自分の情報を作成した後、彼の情報を作成し、ようこそ画面に彼を指示そう、この時、彼はプロフィール画面に送られます