Firebase用户界面 - 脸书,谷歌和电子邮件登录无法正常工作

问题描述 投票:-1回答:1

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

当我将我的应用程序上传到Play商店时,我的问题开始了当用户尝试使用Facebook登录时,它会告诉用户该哈希键与任何存储的哈希值不匹配。我在Facebook开发者和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");
        }
    }

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

android facebook-login firebaseui
1个回答
0
投票

使用调试模式时,使用的签名密钥仅用于调试,它是调试登录密钥。对于已发布的应用,您的签名密钥应该是Play控制台中使用的密钥。

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

以下是从Google Play控制台获取所需签名密钥的方法:

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

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

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

希望这可以帮助。

有用的链接:

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

How to enable Google Play App Signing

© www.soinside.com 2019 - 2024. All rights reserved.