Вы можете просто поставить обе опции для своих пользователей.Вы можете поместить кнопку для входа в систему с помощью Google ID, а другую - для ввода своих телефонных номеров для входа.
Если вы не знаете, как это сделать, вам просто нужно добавить соответствующие кнопки и в java
часть, вы можете использовать что-то вроде этого:
Это часть для получения и проверки OTP, входа с помощью Google ID и номера телефона.
Это еще не все, например, использованиеsignIn()
метод в onClickListener()
кнопки входа Google вашего приложения, но я думаю, что вы можете сделать это самостоятельно.
private void signIn(){
Intent sIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(sIntent,RC_SIGN_IN);
}
@Override
public void onActivityResult(int requestCode,int resultCode,Intent data){
super.onActivityResult(requestCode,resultCode,data);
if(requestCode == RC_SIGN_IN){
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if(result.isSuccess()){
GoogleSignInAccount account = result.getSignInAccount();
firebaseAuthWithGoogle(account);
}
else{
Toast.makeText(MainActivity.this,"Auth went wrong",Toast.LENGTH_SHORT).show();
}
}
}
private void firebaseAuthWithGoogle(GoogleSignInAccount account){
AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(),null);
mAuth.signInWithCredential(credential).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
Log.d("Tag","SignInWithCredential: success");
FirebaseUser fUser = mAuth.getCurrentUser();
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
assert fUser != null;
// do what you want on successful signIN, like storing the email using ref
}
else{
Log.w("TAG","SignInWithCredential: failure", task.getException());
Toast.makeText(MainActivity.this,"Authentication failed", Toast.LENGTH_SHORT).show();
}
}
});
}
private void GetOTP(){
String pn = phone.getText().toString();
if(pn.isEmpty()){
Toast.makeText(MainActivity.this,"Phone number is required", Toast.LENGTH_SHORT).show();
}
else if(pn.length()<10){
Toast.makeText(MainActivity.this,"Valid Phone number is required", Toast.LENGTH_SHORT).show();
}
else
PhoneAuthProvider.getInstance().verifyPhoneNumber(pn,60, TimeUnit.SECONDS,this,mCallBacks);
}
PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallBacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
@Override
public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
}
@Override
public void onVerificationFailed(FirebaseException e) {
}
@Override
public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken) {
super.onCodeSent(s, forceResendingToken);
otp = s;
}
};
private void verifyCode(){
String code = cd.getText().toString();
String pH = phone.getText().toString();
if(code.equals("") && pH.equals(""))
Toast.makeText(MainActivity.this,"Nothing to validate", Toast.LENGTH_SHORT).show();
else {
try {
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(otp, code);
signInWithPhoneAuthCredential(credential);
}
catch (Exception e) {
Log.i("exception",e.toString());
Toast.makeText(MainActivity.this,"Invalid credentials",Toast.LENGTH_LONG).show();
}
}
}
private void signInWithPhoneAuthCredential(PhoneAuthCredential credential){
mAuth.signInWithCredential(credential).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
startActivity(new Intent(MainActivity.this,Main2Activity.class));
}
else if(task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
Toast.makeText(MainActivity.this, "OTP is incorrect", Toast.LENGTH_SHORT).show();
}
}
});
}
После того, как вы получили emailID или номер телефона, вы можете просто сделать егоidentifier
вашего пользователя в базе данных Firebase.
Я имею в виду, что вы можете просто сохранить все остальные данные этого пользователя под номером телефона / электронной почты, который вы получили.
Это выглядит примерно так в коде:
//email is the email of the user and phone is the phone Number
if(email==null){
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
ref.child("users").child(phone).child("username").setValue(uName);
// you can set other details in the same way
}
else if(phone==null){
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
ref.child("users").child(email).child("username").setValue(uName);
// you can set other details in the same way
}
// uName is the username you want to store for the user