Google SMS Retriever API не получает SMS-сообщения - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь использовать API Google Retriever для автоматической проверки SMS.Я следовал инструкциям здесь , но мое приложение не получает SMS-сообщений.Вот что я сделал:

Я добавил код в свою деятельность, чтобы запустить клиент для извлечения SMS:

    val client = SmsRetriever.getClient(this)
    val retriever = client.startSmsRetriever()
    retriever.addOnSuccessListener {
        Log.i("loginActivity", "started smsretriever")
    }

    retriever.addOnFailureListener {
        //Problem to start listener
    }

Из журналов я вижу, что это начинается успешно.Затем я добавляю свой широковещательный приемник с этим onReceive:

override fun onReceive(context: Context, intent: Intent) {
    if (SmsRetriever.SMS_RETRIEVED_ACTION == intent.action) {
        val extras = intent.extras
        val status = extras.get(SmsRetriever.EXTRA_STATUS) as Status

        when (status.statusCode) {
            CommonStatusCodes.SUCCESS -> {

            }
            CommonStatusCodes.TIMEOUT -> {

            }
    }
}

Это срабатывает только тогда, когда событие TIMEOUT отправляется через 5 минут после запуска клиента получения SMS.Он никогда не срабатывает для SMS-сообщений.

Наконец, я зарегистрировал получателя в Манифесте:

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

С точки зрения текстового сообщения, я отправляю себе это SMS-сообщение: "<#> Ваш код: 123456 проверочный хеш: "

Есть идеи, что я делаю не так?

Ответы [ 5 ]

0 голосов
/ 27 марта 2019

Зарегистрируйте BroadcastReceiver внутри SmsRetrievers addOnSuccessListener метод обратного вызова, не регистрируйтесь в Манифесте файле.

val client = SmsRetriever.getClient(this)
        val retriever = client.startSmsRetriever()
        retriever.addOnSuccessListener {
            val listener = object : SMSBroadcastReceiver.Listener {
                override fun onSMSReceived(otp: String) {
                    Log.d("AppSignatureHelper",otp)
                    Toast.makeText(context, otp, Toast.LENGTH_SHORT).show()
                }

                override fun onTimeOut() {
                    Log.d("AppSignatureHelper","Timed Out.")
                }
            }
            smsBroadcastReceiver.injectListener(listener)
            registerReceiver(smsBroadcastReceiver, IntentFilter(SmsRetriever.SMS_RETRIEVED_ACTION))
        }
        retriever.addOnFailureListener {
            Log.d("AppSignatureHelper","Problem to start listener")
            //Problem to start listener
        }

Интерфейс прослушивателя есть.

 interface Listener {
        fun onSMSReceived(otp: String)
        fun onTimeOut()
    }
0 голосов
/ 06 марта 2019

Возможно, ваше сообщение имеет неправильную конструкцию, проверьте эту ссылку: SMS Retriever API .Во-первых, ваше текстовое сообщение должно начинаться с <#> или [#].И в 4-м пункте Ваше текстовое сообщение должно быть: «Конец 11-символьной хэш-строкой, идентифицирующей ваше приложение»

У меня та же проблема, и это указывает на мое осознание, решите, добавив <#>в начале и хеш-строка в конце.

0 голосов
/ 22 января 2019

Я сделал то же самое, и это отлично сработало для меня.Скорее всего, ваш хэш приложения неверен.

0 голосов
/ 14 февраля 2019

Я недавно столкнулся с той же проблемой.

Я выяснил, что проблема заключалась в том, что я использовал хеш производственного хранилища ключей для тестирования в режиме отладки.

Если вы работаете в режиме отладки, обязательно используйте хранилище ключей по умолчанию, используемое для подписи apk отладки.

Расположение хранилища ключей отладки по умолчанию: $HOME/.android/debug.keystore

Согласно документации app-sign :

При запуске или отладке проекта из IDE Android Studio автоматически подписывает ваше приложение с помощью сертификата отладки, созданного инструментами Android SDK.При первом запуске или отладке проекта в Android Studio среда IDE автоматически создает хранилище ключей и сертификат отладки в $ HOME / .android / debug.keystore и задает хранилище ключей и пароли ключей.

Я недавно написал в блоге об этом, проверить это для более подробной информации .

0 голосов
/ 24 декабря 2018

То, что вы сделали до сих пор, прекрасно, просто мелочь, добавьте ниже в вашу деятельность, это сработало для меня ...........

IntentFilter intentFilter = new IntentFilter();

intentFilter.addAction (SmsRetriever.SMS_RETRIEVED_ACTION);

getApplicationContext (). RegisterReceiver (smsBroadcast, intentFilter);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...