1

在以下文档中: https ://developers.google.com/identity/sms-retriever/user-consent/request

据说只有满足以下条件的消息才会触发广播:

  1. 该消息包含一个 4-10 个字符的字母数字字符串,其中
    至少有一个数字。
  2. 该消息是由不在用户联系人中的电话号码发送的。
  3. 如果您指定了发件人的电话号码,则消息是由该号码发送的。

但是没有提到当不满足上述任何一个条件并且没有触发广播时如何处理这种情况。我们如何对最终用户进行此操作?

我能够处理成功和超时情况,处理这种情况将使代码更加用户友好。

switch (smsRetrieverStatus.getStatusCode()) {

    case CommonStatusCodes.SUCCESS:                    
        // Get consent intent
        Intent consentIntent = extras.getParcelable(SmsRetriever.EXTRA_CONSENT_INTENT);
        try {
            // Start activity to show consent dialog to user, activity must be started in
            // 5 minutes, otherwise you'll receive another TIMEOUT intent
            startActivityForResult(consentIntent, SMS_CONSENT_REQUEST);
        } catch (ActivityNotFoundException e) {
            Log.d("Exception","ActivityNotFound");// Handle the exception ...
        }
        break;

    case CommonStatusCodes.TIMEOUT:
        Log.e("Timeout-Error:","Listened for msg for 5minutes");
            break;
}
4

1 回答 1

0

您可以尝试使用CommonStatusCodes.ERROR,但我不确定当收到的短信特别无效时是否会触发此功能。

一种用户友好的解决方案可能是:例如设置一个 30 秒的计时器,该计时器在您请求 SMS/OTP 时立即启动。倒计时完成后,您会显示“重新发送短信”按钮。因此,如果 SMS 没有被接收/检索,您有一种更加用户友好的方式让用户重试并请求另一条 SMS。

于 2021-03-03T18:01:52.083 回答