我是android firebase的新手,我已经为Firebase Auth实现了必要的库。我尝试输入一个有效的数字,但日志上写着:
W/JEJE: onVerificationFailed
com.google.firebase.FirebaseException: An internal error has occurred. [ INVALID_APP_CREDENTIAL:App validation failed ]
at com.google.android.gms.internal.nf.zzK(Unknown Source)
at com.google.android.gms.internal.og.zza(Unknown Source)
at com.google.android.gms.internal.oh.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6176)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)
这是我的代码:
public class MainActivity extends AppCompatActivity {
private static String mVerificationId;
private static PhoneAuthProvider.ForceResendingToken mResendToken;
private static FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText editText = (EditText) findViewById(R.id.phone);
Button submit = (Button) findViewById(R.id.submit);
final PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallBacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
@Override
public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
Log.d("JEJE", "onVerificationCompleted:" + phoneAuthCredential);
signInWithPhoneAuthCredential(phoneAuthCredential);
}
@Override
public void onVerificationFailed(FirebaseException e) {
Log.w("JEJE", "onVerificationFailed", e);
if (e instanceof FirebaseAuthInvalidCredentialsException) {
Log.d("JEJE", "INVALID REQUEST");
} else if (e instanceof FirebaseTooManyRequestsException) {
Log.d("JEJE", "Too many Request");
}
}
@Override
public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken) {
super.onCodeSent(s, forceResendingToken);
Log.d("JEJE", "onCodeSent:" + s);
mVerificationId = s;
mResendToken = forceResendingToken;
}
};
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String phoneNum = editText.getText().toString();
Toast.makeText(MainActivity.this, phoneNum, Toast.LENGTH_SHORT).show();
verifyPhone(phoneNum,mCallBacks);
}
});
}
private void signInWithPhoneAuthCredential(PhoneAuthCredential phoneAuthCredential) {
mAuth.signInWithCredential(phoneAuthCredential).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()){
FirebaseUser user = task.getResult().getUser();
}else {
if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
// The verification code entered was invalid
}
}
}
});
}
public void verifyPhone(String phoneNumber, PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallbacks){
PhoneAuthProvider.getInstance().verifyPhoneNumber(
"+639952874699", // Phone number to verify
60, // Timeout duration
TimeUnit.SECONDS, // Unit of timeout
this, // Activity (for callback binding)
mCallbacks); // OnVerificationStateChangedCallback
}
}
请告诉我什么是错误的谢谢..
答案 0 :(得分:16)
添加SHA Certificate Fingerprint解决了我的问题。嗯,我相当新,但我设法显示输出,我能够收到短信验证。
答案 1 :(得分:4)
我和你的问题完全相同。即使我上传了两个SHA1,它仍然会给出一个&#34;手机登录错误&#34;提示。
您需要将Firebase项目与Google Play相关联。
前往https://console.firebase.google.com/u/0/project/you-project-name/settings/accountlinking并点击右下角&#34;链接到Google Play&#34;
答案 2 :(得分:3)
过了一会儿,我只想总结一下我发现的关于手机验证的所有信息。您需要做一些事情,并且应该记住它可以工作。
以下是您需要执行的操作列表:
compile 'com.google.firebase:firebase-auth:11.0.4'
。Authentication
。然后转到Sign-in Method
并确保启用电话提供商。 keytool -exportcert -list -v -alias androiddebugkey -keystore %USERPROFILE%\。机器人\ debug.keystore
如firebase指南中所述。注意这个命令在线,所以一起运行它,它会做什么,它会在你的用户的名为.android的隐藏文件夹中查找你的debug.keystore文件。密钥库的默认别名是androiddebugkey
所以不要更改它,它的默认密码是android
,所以当它要求你输入密码时,只需使用“android”。
然后你会看到一个返回列表,其中一个是Sha-1。把它放在你的项目中。
另请注意,这是写于2017年8月16日,您无法在模拟器上进行手机验证,因此请使用真实设备。
希望它有所帮助。
感谢saurabh Yadav缺少斜线;)显然我必须在这里放两条斜线才能显示。
答案 3 :(得分:1)
我也有同样的问题。
在阅读了一些内容后,我发现了一些其他问题并在运行我的应用程序后。
问题1:this链接说明了,
另请注意,电话号码登录需要物理设备,并且无法在模拟器上运行。
所以你可以在真实设备上测试和运行,而不是任何模拟器。
如果你可以在模拟器上运行,那么同样的错误就会给出。
您可以参考我的github this链接获取Firebase电话登录示例
答案 4 :(得分:0)
尝试将firebase-tools lib升级到最新版本,然后调用firebase注销,然后登录firebase登录。
答案 5 :(得分:0)
如果您要进行签名构建并将其放入Play商店,则游戏商店的sha1应与Firebase指纹的sha1相同。完成后,您需要通过firebase登录将您的应用程序与Play商店链接。在sha1密钥更改后,从您在firebase帐户中生成的新应用程序中放置新的google-services.json文件。< / p>