Впервые разрабатываю приложение для Android. Я пытаюсь зарегистрировать пользователя в нашей Firebase при входе в FaceBook и Google.
Пока у меня есть логин с электронной почтой и паролем. Войдите через Facebook и Google.
Вопрос заключается в следующем: нужно ли регистрировать пользователя в firebase (при входе в Google и Facebook), чтобы иметь возможность создать профиль, например, с изображением?
Эта область кода реализована на фрагменте нашего проекта:
onCreateView
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.google_credential))
.requestEmail()
.build();
//
mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
.enableAutoManage(getActivity(), new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
})
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
Вне onCreateView
private void signIn() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try {
// Google Sign In was successful, authenticate with Firebase
GoogleSignInAccount account = task.getResult(ApiException.class);
firebaseAuthWithGoogle(account);
} catch (ApiException e) {
// Google Sign In failed, update UI appropriately
Log.w(TAG, "Google sign in failed", e);
// ...
}
}
}
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
Log.d("MainACtivity", "firebaseAuthWithGoogle:" + acct.getId());
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
firebaseAuth.signInWithCredential(credential)
.addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Log.d("Main", "signInWithCredential:onComplete:" + task.isSuccessful());
// If sign in fails, display a message to the user. If sign in succeeds
// the auth state listener will be notified and logic to handle the
// signed in user can be handled in the listener.
if (!task.isSuccessful()) {
Log.w("MainAcitivyt", "signInWithCredential", task.getException());
Toast.makeText(getActivity(), "Authentication failed.",
Toast.LENGTH_SHORT).show();
}
// ...
}
});
}
Я следовал инструкциям FireBase при регистрации через Google: https://firebase.google.com/docs/auth/android/google-signin
После первого входа в систему создается новая учетная запись пользователя, которая связывается с учетными данными, т.е. С именем пользователя и паролем, номером телефона или информацией о поставщике аутентификации, с которыми пользователь вошел в систему. Эта новая учетная запись хранится как часть вашего проекта Firebase и может использоваться для идентификации пользователя во всех приложениях вашего проекта, независимо от того, как пользователь входит в систему.
Это скопировано после руководства, я просто пытаюсь найти любую учетную запись Google на firebase, с которой я зарегистрировался в моем приложении.
РЕДАКТИРОВАТЬ:
Выясните, что в моем приложении произошла ошибка при входе в Google:
вот логкат:
2019-03-13 11:29:25.729 10997-10997/com.itcom202.weroom W/LoginFragment: Google sign in failed
com.google.android.gms.common.api.ApiException: 10:
at com.google.android.gms.common.internal.ApiExceptionUtil.fromStatus(Unknown Source:4)
at com.google.android.gms.auth.api.signin.GoogleSignIn.getSignedInAccountFromIntent(Unknown Source:8)
at com.itcom202.weroom.LoginFragment.onActivityResult(LoginFragment.java:194)
at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:160)
at android.app.Activity.dispatchActivityResult(Activity.java:7235)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4320)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4367)
at android.app.ActivityThread.-wrap19(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1649)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Что нужно учитывать при кодировании входа в Firebase
Следуйте процессу, описанному в их репозитории Github, и вы можете посмотреть несколько рабочих примеров в репозитории Firebase Quick Start Github.
Вам также необходимо включить Facebook и Google Sign-In в вашей консоли Firebase. Еще один важный момент - убедитесь, что вы используете самый свежий файл google-services.json каждый раз, когда вносите изменения в свою консоль Firebase.
Наконец, убедитесь, что у вас есть требуемая отладка и отпустите настройку отпечатков пальцев SHA1 с вашим проектом Firebase в консоли Firebase, чтобы соединиться со службой Firebase, когда ваше приложение перейдет в магазин Play.
Доступ к вашим учетным записям Firebase
Для получения дополнительной информации смотрите документацию Firebase онлайн.
Нужно ли регистрировать пользователя в firebase (при входе в Google и Facebook), чтобы иметь возможность создать профиль, например, с изображением?
Для Google Sing-In доступно изображение профиля из учетной записи Google и некоторые другие метаданные, которые можно использовать.
Методы входа в Google и примеры входа в Facebook на Github Quickstart автоматически добавляют новых пользователей, если они впервые подписываются в проекте Firebase. Вы можете попробовать добавить нового пользователя и увидеть, что он добавляется на вашей вкладке Firebase Authentication Users. Видно ниже:
Вы также можете дать пользователям возможность выйти и удалить свои учетные записи, также описанные в документации и примерах Github.