我在应用程序中使用firebase UI进行登录。当我在调试模式下运行它时,一切正常 - 根本没有错误。我正在通过我的手机运行它,而且正常工作!
当我上传应用程序以播放商店时,我的问题开始。当用户尝试与Facebook登录时,它会告诉用户哈希键与任何存储的哈希相匹配。我在Facebook开发人员和我的Android Studio及其相同的Hash Key中检查了几次。
我尝试与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 Console中使用的键。
如果您已成功地发布了您的应用程序到Play商店,那么您已经生成了所需的SHA-1证书指纹。而且,是的,这是已发布应用程序所需的发行签名密钥。
这是如何从 Google Play Console 中获取所需的签名密钥:
- 登录您的Google Play游戏机。
- 从列表中选择您的应用程序。
- 在左侧菜单上,请使用火箭图标选择"释放管理"。
- 从扩展的"发行管理"菜单中选择"应用签名"。
- 在"应用程序签名证书"部分中,您将看到SHA1,SHA256和MD5证书指纹。复制您需要的并使用它。
您还需要将此SHA1指纹添加到 firebase Console :
- 登录您的火箱控制台。
- 选择您的Firebase项目。
- 转到左侧菜单上项目概述按钮旁边的"项目设置"。
- 在"常规"选项卡中,向下滚动到"您的应用程序"部分,其中列出了项目详细信息。您必须从这里下载Google-Services.json。
- 在此处添加您的版本SHA1指纹。
- 下载 google-services.json 文件的新鲜副本。
- 随着您更改了firebase配置,使用此较新的JSON文件,而不是较旧的文件,并且需要重新编译应用程序。
希望这会有所帮助。
有用的链接:
https://developer.android.com/studio/publish/app-signing
如何启用Google Play应用程序签名