我在我的应用程序中使用firebase ui进行登录。 当我在调试模式下运行时,一切正常-完全没有错误。 我正在通过手机运行它,效果很好!
当我上传我的应用程序到商店时,我的问题开始了。 当用户尝试使用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");
}
}
简单的代码,但由于某些原因无法正常工作...
答案 0 :(得分:0)
使用调试模式时,使用的签名密钥仅用于调试,它是调试登录密钥。对于已发布的应用,您的签名密钥应为Play控制台中使用的密钥。
如果您已成功将应用发布到Play商店,则您已经生成了所需的SHA-1证书指纹。而且,是的,它是发布的应用程序所必需的发布签名密钥。
以下是从 Google Play控制台获取所需签名密钥的方法:
您还需要将此SHA1指纹添加到您的 Firebase控制台:
希望这会有所帮助。
有用链接: