Android Firebase手机身份验证在调试模式下工作正常,但应用程序在发布时崩溃
是因为权限吗 我已经在运行时授予了Android Firebase手机身份验证在调试模式下工作正常,但应用程序在发布时崩溃,android,firebase-authentication,android-permissions,Android,Firebase Authentication,Android Permissions,是因为权限吗 我已经在运行时授予了READ\u SMS、RECEIVE\u SMS、READ\u PHONE\u STATE权限,但仍然会崩溃 12-26 10:56:02.409 30698-30698/? E/UncaughtException: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=55, result=0, data=null} to activity {com
READ\u SMS、RECEIVE\u SMS、READ\u PHONE\u STATE
权限,但仍然会崩溃
12-26 10:56:02.409 30698-30698/? E/UncaughtException: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=55, result=0, data=null} to activity {com.app.eco4ndly.pathshala/com.app.eco4ndly.pathshala.Opening_Screen}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getStringExtra(java.lang.String)' on a null object reference
at android.app.ActivityThread.deliverResults(ActivityThread.java:4255)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4298)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1613)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:203)
at android.app.ActivityThread.main(ActivityThread.java:6339)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1084)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:945)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getStringExtra(java.lang.String)' on a null object reference
at com.app.eco4ndly.pathshala.Opening_Screen.onActivityResult(Opening_Screen.java:108)
at android.app.Activity.dispatchActivityResult(Activity.java:6948)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4251)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4298)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1613)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:203)
at android.app.ActivityThread.main(ActivityThread.java:6339)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1084)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:945)
还需要做些什么
更新
在opening_Screen.java中
private void attemptsRegistration() {
Intent intent = new Intent(Opening_Screen.this,PhoneVerification.class);
intent.putExtra(Constant.REQUEST_CODE,55);
startActivityForResult(intent,55);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
final View view = findViewById(android.R.id.content);
if (requestCode == 55){
String result = data.getStringExtra("result");
if (result.equals("PhoneVerifiedSuccessfully")){
RegistrationDataPass.setPhone(data.getStringExtra("phone"));
Intent i = new Intent(Opening_Screen.this,RegPage1.class);
i.putExtra("PhoneNumber",data.getStringExtra("phone"));
startActivity(i);
}else if (result.equals("InvalidCode")){
Constant.showSnak(view,"Registration Failed\nInvalid Code");
}else if (result.equals("INVALID REQUEST")){
Constant.showSnak(view,"Registration Failed\nINVALID REQUEST");
}else if (result.equals("Too many Request")){
Constant.showSnak(view,"Registration Failed\nToo many Requests");
}
}
}
Phone\u-Verification.java
代码非常庞大,我正在解释它是如何工作的。
当它启动时,我正在检查棉花糖的权限,然后在授予所有权限后,电话号码将作为用户的输入,然后转到verifyPhone()
验证回调是这样的
final PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallBacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
@Override
public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
//progressDialog.dismiss();
Log.d("JEJE", "onVerificationCompleted:" + phoneAuthCredential);
Log.e("STEP in signin","InsideVerification");
signInWithPhoneAuthCredential(phoneAuthCredential);
}
@Override
public void onVerificationFailed(FirebaseException e) {
Constant.hideProgressBar();
Log.w("JEJE", "onVerificationFailed", e);
if (e instanceof FirebaseAuthInvalidCredentialsException) {
Log.d("JEJE", "INVALID REQUEST");
Intent intent = new Intent();
intent.putExtra("result","INVALID REQUEST");
intent.putExtra("phone",phoneNumber);
setResult(REQ_CODE,intent);
} else if (e instanceof FirebaseTooManyRequestsException) {
Log.d("JEJE", "Too many Request");
Intent intent = new Intent();
intent.putExtra("result","Too many Request");
intent.putExtra("phone",phoneNumber);
setResult(REQ_CODE,intent);
}
showSnakBar(e.toString());
//hideProgressDialog();
Constant.hideProgressBar();
Toast.makeText(PhoneVerification.this, "Failed", Toast.LENGTH_SHORT).show();
finish();
}
@Override
public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken) {
super.onCodeSent(s, forceResendingToken);
//hideProgressDialog();
Constant.hideProgressBar();
Log.d("JEJE", "onCodeSent:" + s);
mResendToken = forceResendingToken;
tv.setText("We have sent a verification Code to your number "+phoneNumber+" via SMS.\nEnter the CODE bellow");
phoneNumLayout.setVisibility(View.GONE);
otpLayout.setVisibility(View.VISIBLE);
verifyToken = s;
showTimer();
}
};
在
verifyPhone()
中显示进度条后,应用程序正在崩溃。未发送任何代码。在我看来,您必须将正确的键、值
对传递给intent.puExtra()
尝试下面的代码
intent.putExtra("result",55);
然后您的data.getStringExtra(“结果”)代码>获取值
if (requestCode == 55){
String result = data.getStringExtra("result");
或尝试下面的代码这可能会有所帮助
Intent intent = new Intent(Opening_Screen.this,PhoneVerification.class);
intent.putExtra(Constant.REQUEST_CODE,55);
intent.putExtra("result",YOUR_RESULT_STRING);
intent.putExtra("phone",PHONE_STRING);
startActivityForResult(intent,55);
要进行更多检查,您必须将正确的键、值
对传递给intent.puExtra()
尝试下面的代码
intent.putExtra("result",55);
然后您的data.getStringExtra(“结果”)代码>获取值
if (requestCode == 55){
String result = data.getStringExtra("result");
或尝试下面的代码这可能会有所帮助
Intent intent = new Intent(Opening_Screen.this,PhoneVerification.class);
intent.putExtra(Constant.REQUEST_CODE,55);
intent.putExtra("result",YOUR_RESULT_STRING);
intent.putExtra("phone",PHONE_STRING);
startActivityForResult(intent,55);
在添加@Omi的答案后,需要进行更多检查,这里是您需要设置的另一个条件
if (requestCode == 55 && data!=null){
//here your code
}
希望这有帮助。在添加@Omi的答案后,这里是另一个你需要设置的条件
if (requestCode == 55 && data!=null){
//here your code
}
希望有帮助。转到设置->开发人员选项->应用程序部分&
确保“不保留活动”选项处于禁用状态,然后尝试转到“设置->开发人员选项->应用程序”部分&
确保您的“不保留活动”选项处于禁用状态,然后重试。好吧,问题已经解决。
我对这个问题的理解是错误的。问题不在于Android版本。每个版本都出现了问题
原因
正如我所描述的,应用程序在调试模式下运行良好,但在发布模式下不工作。我使用了firebase电话认证。并且需要SHA证书指纹
。不幸的是,我忘记提供版本SHA-1。我在发布版本中使用了调试SHA-1指纹
解决方案
提供发布版SHA-1指纹。好了,问题已经解决了
我对这个问题的理解是错误的。问题不在于Android版本。每个版本都出现了问题
原因
正如我所描述的,应用程序在调试模式下运行良好,但在发布模式下不工作。我使用了firebase电话认证。并且需要SHA证书指纹
。不幸的是,我忘记提供版本SHA-1。我在发布版本中使用了调试SHA-1指纹
解决方案
已提供版本SHA-1指纹。共享相关代码是否确定此错误与版本相关?它是NullPointerException
。发布你的打开的\u Screen.java文件。@Nilu不,不是。幸运的是,我知道NullPointerException是什么。@Xenolion ya你是对的。此错误不适用于该版本。我以错误的方式获取此错误与共享相关的代码您确定此错误与版本相关吗?它是NullPointerException
。发布你的打开的\u Screen.java文件。@Nilu不,不是。幸运的是,我知道NullPointerException是什么。@Xenolion ya你是对的。此错误不适用于该版本。我搞错了,我想这不是问题所在。我的代码在调试模式下运行得非常好。如果我不满意,请纠正我wrong@SayannPoria打开屏幕时共享第108行。javaString result=data.getStringExtra(“结果”)代码>我认为这不是问题所在。我的代码在调试模式下工作得非常好。如果我不满意,请纠正我wrong@SayannPoria打开屏幕时共享第108行。javaString result=data.getStringExtra(“结果”)代码>我很高兴你解决了你的问题@Sayann祝贺并感谢你的回答!!您好,如何获得SHA-1版本?您可以在这里找到它。我们是否需要再次更新google-services.json并推出新版本的应用程序?我很高兴您解决了您的问题@Sayann祝贺并感谢您的回答!!您好,如何获得SHA-1版本?您可以在这里找到它。我们是否需要再次更新google-services.json并推出新版本的应用程序?