在Android应用程序上通过Firebase进行Facebook / Google注册

时间:2019-03-13 10:13:41

标签: android facebook firebase google-authentication

首次开发Android应用程序。我试图通过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();
                        }
                        // ...
                    }
                });
    }

我在Google上遵循了Signup上的FireBase指南:https://firebase.google.com/docs/auth/android/google-signin

  

用户首次登录后,将创建一个新的用户帐户并将其链接到用户登录所用的凭据(即用户名和密码,电话号码或身份验证提供者信息)。这个新帐户存储在Firebase项目中,无论用户如何登录,都可以用来在项目中的每个应用程序中识别用户。

这是在指南之后复制的,我只是想在我已经在我的应用程序中注册过的firebase上找到任何Google帐户。

编辑:

发现我的应用在使用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)

1 个答案:

答案 0 :(得分:1)

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

按照其Github存储库中介绍的过程进行操作,您可以在Firebase Quick Start Github存储库中查看一些工作示例活动。

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

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

访问您的Firebase注册用户帐户

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

有关Firebase文档online的更多信息。

  

您是否需要在Firebase中注册用户(从Google登录时   和Facebook)来创建个人资料,例如   图片?

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

Github Quickstart上的Google Sign-In方法和Facebook Sign-In方法示例自动添加新用户(如果他们是首次登录Firebase项目)。您可以尝试添加新用户,并在Firebase身份验证用户选项卡上看到它已添加。如下所示:enter image description here

您还可以使用户具有注销和删除其登录帐户的功能,这些内容也包含在文档和Github示例中。