Подтверждение по SMS с Android SmsRetrieverClient не анализирует сообщение

Пытался реализовать автоматическое чтение SMS для проверки, выполнив следующие действия: https://developers.google.com/identity/sms-retriever/request

1) объявил

lateinit var smsRetrieverClient: SmsRetrieverClient
private lateinit var smsReceiver: SmsBrReceiver

2) Инициализировал и зарегистрировал их в логине Activity onCreate

smsRetrieverClient = SmsRetriever.getClient(this)
smsReceiver = SmsBrReceiver()

val intentFilter = IntentFilter()
intentFilter.addAction(SmsRetriever.SMS_RETRIEVED_ACTION)
applicationContext.registerReceiver(smsReceiver, intentFilter)

val task = smsRetrieverClient.startSmsRetriever()
task.addOnSuccessListener(OnSuccessListener<Void> {
    smsReceiver.setTimeout()
})
task.addOnFailureListener(OnFailureListener { e ->
    showCodeInput()
})

3) Сделал BroadcastReceiver для SmsRetriever

inner class SmsBrReceiver : BroadcastReceiver() {
    var h = Handler()
    var r: Runnable = Runnable { doTimeout() }

    fun setTimeout() {
        h.postDelayed(r, 600000)
    }

    override fun onReceive(context: Context, intent: Intent?) {

        val action = intent.action

        if (SmsRetriever.SMS_RETRIEVED_ACTION == action) {

            cancelTimeout()
            val extras = intent.extras
            val status = extras!!.get(SmsRetriever.EXTRA_STATUS) as Status
            when (status.statusCode) {
                CommonStatusCodes.SUCCESS -> { // not called

4) SMS приходит в формате

\u200b\u200bPlease enter code: 1111 /appKeyXf56

И ключ приложения в конце SMS соответствует тому, что ключ подписи установленного приложения дает для генерации, как описано здесь: https://developers.google.com/identity/sms-retriever/verify#computing_your_apps_hash_string

CommonStatusCodes.SUCCESS не вызывается после получения SMS, но CommonStatusCodes.TIMEOUT вызывается через 5 минут.

Чего не хватает? На всякий случай объявления gradle для аутентификации телефона:

com.google.android.gms:play-services-auth-api-phone:16.0.0
classpath "com.google.gms:google-services:4.2.0

person Demonick    schedule 26.11.2018    source источник


Ответы (1)


Решением было сократить сообщение, хотя оно, казалось, не превышало 140 байт. После внесения текста SMS до ~ 30 символов авточитка SMS работает без других изменений.

person Demonick    schedule 29.11.2018
comment
Спасибо! Вы сэкономили мне столько времени на отладку - person Denis Nek; 15.12.2018
comment
В официальном документе сказано: ›Не более 140 байт developers.google.com/identity/sms. -retriever / verify - person Denis Nek; 15.12.2018
comment
140 байт - это обманчиво короткое сообщение. И это не значит, что мы можем легко это измерить, вам нужно поэкспериментировать. - person Dror Bar; 28.05.2019