android - 在 Android 应用程序上的 Firebase 上注册 Facebook/Google
问题描述
第一次开发安卓应用。使用 FaceBook 和 Google 登录时,我试图让用户在我们的 Firebase 中注册。
到目前为止,我已经使用电子邮件和密码登录。使用 Facebook 和 Google 登录。
问题是:您是否必须在 firebase 中注册用户(从 google 和 facebook 登录时)才能创建个人资料(例如带有图片)?
这个范围的代码是在我们项目的 Fragment 上实现的:
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 项目的一部分存储,可用于在项目中的每个应用中识别用户,无论用户如何登录。
这是在指南之后复制的,我只是想在我的应用程序中注册的 firebase 上找到任何 google 帐户。
编辑:
使用 google 注册时发现我的应用程序出错:
这里是logcat:
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 快速入门 Github 存储库中查看一些工作示例活动。
您还需要在 Firebase 控制台中启用 Facebook 和 Google 登录。另一个重点是确保每次使用 Firebase 控制台进行更改时都使用最新的 google-services.json 文件。
最后,确保您在 Firebase 控制台中为您的 Firebase 项目设置了所需的调试和发布 SHA1 指纹,以便在您的应用进入 Play 商店时连接 Firebase 服务。
访问您的 Firebase 注册用户帐户
- 登录到您的 Firebase 控制台。
- 转到您的 Firebase 项目并在左侧菜单中选择身份验证。
- 它将显示一个包含用户名、ID 和身份验证详细信息的用户选项卡。
更多在线查看 Firebase 文档。
您是否必须在 firebase 中注册用户(从 google 和 facebook 登录时)才能创建例如带有图片的个人资料?
对于 Google Sing-In,可以使用来自 Google 帐户的个人资料图片和更多元数据。
如果新用户是首次登录 Firebase 项目,Github Quickstart 上的 Google 登录方法和 Facebook 登录方法示例会自动添加新用户。您可以尝试添加一个新用户,并在 Firebase 身份验证用户选项卡上看到该用户已添加。见下图:
您还可以让用户能够注销和删除他们的登录帐户,文档和 Github 示例中也有介绍。
推荐阅读
- android - 启用通知后通信超时断开状态 8 (Android 7.1.2)
- mysql - 在MYSQL中将String(varchar)转换为毫秒
- python - 使循环有向图无环(需要解释)
- android - 如何在 Android Studio 中为 APK 构建获取正确的 gradle.startParameter.taskNames
- python - 在cmd中编译我的python代码时遇到了这个问题
- python-3.x - 如何从字符串创建嵌套字典
- python - 将两个数据框相乘 Python
- android - 使用 App Actions 进行测试时,切片的 setSeeMoreAction() 不起作用
- eclipse - 如何在 Eclipse 中通过插件(以编程方式)创建/导入 CodeFormatter 配置文件?
- html - 为表格单元格添加内边框