Как автоматически читать смс в Android? - PullRequest
0 голосов
/ 06 ноября 2019

С 9 января 2019 года Google удалит приложения из Playstore с разрешениями ЧИТАТЬ СМС И ЖУРНАЛ ВЫЗОВОВ, если они не объяснят необходимость.

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

Но эти API-интерфейсы четко не выражены и приводят в замешательство. Я не знаю, если это я, кто думает, что это сбивает с толку. Во всяком случае, вот что я изучил, чтобы прочитать SMS, но ничего не понял.

Я не уверен, что это правильная ссылка для автоматического чтения SMS.

https://developers.google.com/identity/sms-retriever/request

Я использовал эти зависимости

implementation 'com.google.android.gms:play-services-auth:17.0.0'
implementation 'com.google.android.gms:play-services-auth-api-phone:17.0.0'

Существует один хороший учебник по реализации автоматического чтения SMS, но некоторые API устарели, поэтому я пытаюсь найти любое простое объяснение для реализации автоматического чтенияSMS в Android.

Вот ссылка на этот учебник

https://androidwave.com/automatic-sms-verification-android/

1 Ответ

1 голос
/ 06 ноября 2019

Вы должны использовать sms retriever api для чтения сообщений otp. Вот как вы можете это сделать.

Вам нужно менее 2 зависимостей для кода извлечения смс

implementation 'com.google.android.gms:play-services-auth:17.0.0'
implementation 'com.google.android.gms:play-services-auth-api-phone:17.1.0'

Определите несколько таких переменных в вашей деятельности / фрагмент

private val SMS_CONSENT_REQUEST = 2
private lateinit var smsVerificationReceiver: BroadcastReceiver

В вашем методе onCreate () запустите ретривер SMS

 SmsRetriever.getClient(this).startSmsUserConsent(null)
 smsReceiver()
 val intentFilter = IntentFilter(SmsRetriever.SMS_RETRIEVED_ACTION)
 registerReceiver(smsVerificationReceiver, intentFilter)

Ниже приведен метод для широковещательного приемника

 private fun smsReceiver() {
    smsVerificationReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            if (SmsRetriever.SMS_RETRIEVED_ACTION == intent.action) {
                val extras = intent.extras
                val smsRetrieverStatus = extras?.get(SmsRetriever.EXTRA_STATUS) as Status

                when (smsRetrieverStatus.statusCode) {
                    CommonStatusCodes.SUCCESS -> {
                        // Get consent intent
                        val consentIntent =
                            extras.getParcelable<Intent>(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 (e: ActivityNotFoundException) {
                            // Handle the exception ...
                        }
                    }
                    CommonStatusCodes.TIMEOUT -> {
                        // Time out occurred, handle the error.
                    }
                }
            }
        }
    }
}

А затем в onActivityResult () вы можете получить проверочный код

public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    when (requestCode) {
        // ...
        SMS_CONSENT_REQUEST ->
            // Obtain the phone number from the result
            if (resultCode == Activity.RESULT_OK && data != null) {
                // Get SMS message content
                val message = data.getStringExtra(SmsRetriever.EXTRA_SMS_MESSAGE)
                // Extract one-time code from the message and complete verification
                // `message` contains the entire text of the SMS message, so you will need
                // to parse the string.
                val oneTimeCode = parseOneTimeCode(message) // define this function
                et_otp.setText(oneTimeCode.toString())
                // send one time code to the server
            } else {
                // Consent denied. User can type OTC manually.
            }
    }
}

Также не забудьте отменить регистрацию получателя в методе onDestroy ()

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