【问题标题】:SMS Retriever API not calling SMS_RETRIEVED_ACTION from Firebase Phone AuthSMS Retriever API 未从 Firebase Phone Auth 调用 SMS_RETRIEVED_ACTION
【发布时间】:2017-08-14 08:21:12
【问题描述】:

SmsRetriever.SMS_RETRIEVED_ACTION 未被调用。我正在使用 Firebase 电话身份验证:

PhoneAuthProvider.getInstance().verifyPhoneNumber(
                mPhoneNumber,        // Phone number to verify
                60,                 // Timeout duration
                TimeUnit.SECONDS,   // Unit of timeout
                activity,               // Activity (for callback binding)
                mCallbacks);        // OnVerificationStateChangedCallbacks

我正在尝试使用SMS Retriever API检索短信

SmsRetrieverClient client = SmsRetriever.getClient(activity);

// Starts SmsRetriever, which waits for ONE matching SMS message until timeout
// (5 minutes). The matching SMS message will be sent via a Broadcast Intent with
// action SmsRetriever#SMS_RETRIEVED_ACTION.

Task<Void> task = client.startSmsRetriever();

task.addOnSuccessListener(new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void aVoid) {

            }
        });

        task.addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {

            }
        });

我正在注册 BroadcastReceiver onResume 并在暂停时取消注册:

public class MySMSBroadcastReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    if (SmsRetriever.SMS_RETRIEVED_ACTION.equals(intent.getAction())) {
        Bundle extras = intent.getExtras();
        Status status = (Status) extras.get(SmsRetriever.EXTRA_STATUS);

        switch(status.getStatusCode()) {
            case CommonStatusCodes.SUCCESS:
                // Get SMS message contents
                String message = (String) extras.get(SmsRetriever.EXTRA_SMS_MESSAGE);

                break;
            case CommonStatusCodes.TIMEOUT:

                break;
        }
    }
}
}

可以是 Firebase 短信格式吗?不兼容吗?

提前致谢。

【问题讨论】:

  • 嘿,你有没有得到这个工作?
  • 否,因为 Firebase Auth SMS 格式不可编辑,并且 SMS 检索器 API 需要特定格式。幸运的是,Firebase Auth SDK 在内部使用类似的方式来识别 SMS 代码,因此在 Android 手机中它通常会自动识别。
  • 谢谢。我尝试了我朋友的新华为,但它似乎没有工作,虽然我没有将它插入我的笔记本电脑以查看任何日志记录。

标签: android firebase firebase-authentication


【解决方案1】:

使用下面的依赖并重试

编译'com.google.android.gms:play-services-auth-api-phone:11.0.4'

【讨论】:

    【解决方案2】:

    请将依赖更新为:
    implementation "com.google.android.gms:play-services-auth-api-phone:17.4.0"
    AndroidMaifest.xml 中注册您的广播接收器

    <receiver android:name=".MySMSBroadcastReceiver">
                    <intent-filter>
                        <action android:name="com.google.android.gms.auth.api.phone.SMS_RETRIEVED"/>
                    </intent-filter>
                </receiver>
    

    就是这样!!

    【讨论】:

      【解决方案3】:

      您需要检查所有已实现的依赖项,还需要检查它们的外部库代码。如果不是您的广播接收器,那么肯定可能是一些外部库正在影响您的应用程序。

      在我的情况下,它实际上是未在清单中注册的广播接收器,但在此之前我已经尝试了大约 50 次提交我的应用程序,并且每次都被拒绝,所以首先检查你的代码是否存在您的代码中的任何错误或与您的库相关的任何问题。同时尝试一次在没有此短信检索功能的情况下发布您的应用程序。

      我如何通过一一删除可疑代码并发布应用来检查我的错误。最后,当我删除我的短信检索代码时,我的应用直接被接受了,然后我用谷歌提供的适当文档重写了我的短信检索代码,它正在工作。

      你也可以关注我的回答 https://stackoverflow.com/a/66684609/14280161

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-18
        • 1970-01-01
        • 1970-01-01
        • 2019-07-26
        • 2019-08-08
        • 2019-07-15
        • 2021-06-13
        相关资源
        最近更新 更多