首页 > 解决方案 > 在 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)

标签: androidfacebookfirebasegoogle-authentication

解决方案


编写 Firebase 登录身份验证时需要考虑的事项

按照他们的 Github 存储库中介绍的过程,您可以在Firebase 快速入门 Github 存储库中查看一些工作示例活动。

您还需要在 Firebase 控制台中启用 Facebook 和 Google 登录。另一个重点是确保每次使用 Firebase 控制台进行更改时都使用最新的 google-services.json 文件。

最后,确保您在 Firebase 控制台中为您的 Firebase 项目设置了所需的调试和发布 SHA1 指纹,以便在您的应用进入 Play 商店时连接 Firebase 服务。

访问您的 Firebase 注册用户帐户

  1. 登录到您的 Firebase 控制台。
  2. 转到您的 Firebase 项目并在左侧菜单中选择身份验证。
  3. 它将显示一个包含用户名、ID 和身份验证详细信息的用户选项卡。

更多在线查看 Firebase 文档。

您是否必须在 firebase 中注册用户(从 google 和 facebook 登录时)才能创建例如带有图片的个人资料?

对于 Google Sing-In,可以使用来自 Google 帐户的个人资料图片和更多元数据。

如果新用户是首次登录 Firebase 项目,Github Quickstart 上的 Google 登录方法和 Facebook 登录方法示例会自动添加新用户。您可以尝试添加一个新用户,并在 Firebase 身份验证用户选项卡上看到该用户已添加。见下图:在此处输入图像描述

您还可以让用户能够注销和删除他们的登录帐户,文档和 Github 示例中也有介绍。


推荐阅读