Firebase UI - facebook、google 和电子邮件登录无法正常工作

2024-01-07

我在我的应用程序中使用 firebase ui 进行登录。 当我在调试模式下运行它时,一切正常 - 完全没有错误。 我用手机运行它,效果很好!

当我将应用程序上传到 Play 商店时,我的问题就开始了。 当用户尝试使用 Facebook 登录时,它会告诉用户哈希密钥与任何存储的哈希值都不匹配。 我在 Facebook Developers 和 Android Studio 中检查了几次,其哈希密钥相同。

当我尝试使用 Google 登录时,我也遇到“开发人员错误”。 我不知道为什么...

并且使用“电子邮件和密码”登录时出错 - 用户输入他的电子邮件和密码,但没有任何反应。它只是停留在同一个活动上。

我不确定我应该做什么,我应该创建版本 SHA-1 吗? 或者我在这里缺少其他东西。

这是我的登录代码

        public void startSignIn(){
    List<AuthUI.IdpConfig> providers = Arrays.asList(
            new AuthUI.IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER)
                    .setPermissions(Arrays.asList(Scopes.PROFILE,Scopes.EMAIL)).build(),
            new AuthUI.IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build(),
            new AuthUI.IdpConfig.Builder(AuthUI.FACEBOOK_PROVIDER).build());
    Intent intent = AuthUI.getInstance()
            .createSignInIntentBuilder()
            .setAvailableProviders(providers).build();
    startActivityForResult(intent,RC_SIGN_IN);
}


protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == RC_SIGN_IN){
        IdpResponse idpResponse = IdpResponse.fromResultIntent(data);
        if(idpResponse != null && resultCode == RESULT_OK){
            currentUser = FirebaseAuth.getInstance().getCurrentUser();

            //check if the user is exists by userUID. if he is, it jumps to main activity
            refToUsers.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if(dataSnapshot.hasChild(currentUser.getUid())){

                        Intent mainActivity = new Intent(getApplicationContext(), MainActivity.class);
                        mainActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(mainActivity);
                    }else{
                        //if the user is not exists it will move to register activity
                        Intent registerActivity = new Intent(getApplicationContext(), RegisterActivity.class);
                        registerActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(registerActivity);
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    Log.d(TAG,databaseError.getMessage());
                }
            });



        }else if (idpResponse.getErrorCode() == ErrorCodes.NO_NETWORK) {
            errorToast("No internet connection");

        }else if (idpResponse.getErrorCode() == ErrorCodes.UNKNOWN_ERROR) {
            errorToast("Unknown Error");
        }
    }

简单的代码,但由于某种原因不起作用......


当您使用调试模式时,所使用的签名密钥仅用于调试,它是调试登录密钥。对于已发布的应用,您的签名密钥应该是 Play 管理中心中使用的密钥。

如果您已成功将应用程序发布到 Play 商店,则您已经生成了所需的 SHA-1 证书指纹。是的,这是已发布的应用程序所需的发布签名密钥。

以下是如何从您的网站获取所需的签名密钥谷歌游戏控制台:

  1. 登录您的 Google Play 管理中心。
  2. 从列表中选择您的应用程序。
  3. 在左侧菜单中选择带有火箭图标的“发布管理”。
  4. 从展开的“发布管理”菜单中选择“应用程序签名”。
  5. 在“应用程序签名证书”部分中,您将看到 SHA1、SHA256 和 MD5 证书指纹。复制您需要的并使用它。

您还需要将此 SHA1 指纹添加到您的Firebase 控制台:

  1. 登录您的 Firebase 控制台。
  2. 选择您的 Firebase 项目。
  3. 转到“项目设置”,即左侧菜单上“项目概述”按钮旁边的齿轮图标。
  4. 在“常规”选项卡中,向下滚动到“您的应用程序”部分,其中列出了项目详细信息。您之前必须从此处下载 google-services.json。
  5. 在此处添加您的发布 SHA1 指纹。
  6. 下载新的副本谷歌服务.json file.
  7. 在您的项目中使用此较新的 json 文件,而不是旧的文件,因为您已更改 Firebase 配置并且需要重新编译应用。

希望这可以帮助。

有用的链接:

https://developer.android.com/studio/publish/app-signing https://developer.android.com/studio/publish/app-signing

如何启用 Google Play 应用签名 https://stackoverflow.com/questions/44103024/how-to-enable-google-play-app-signing

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase UI - facebook、google 和电子邮件登录无法正常工作 的相关文章

随机推荐