SMS Verification APIs
SMS verification APIs
“Verify your users by SMS without making them deal with
verification codes. By using the SMS Retriever API, your app
can automatically retrieve verification codes intended for
your app, without having to request full SMS reading
permissions.”

• SMS permission is dangerous
https://developers.google.com/identity/sms-retriever/
• One tap verification

• Automatic verification
SMS User Consent - 

One-tap SMS verification
Prerequisite - dependencies
implementation 'com.google.android.gms:play-services-auth:17.0.0'
implementation 'com.google.android.gms:play-services-auth-api-phone:
17.1.0'
Start listen user’s SMS
SmsRetriever.getClient(this).startSmsUserConsent(null)
Request consent
(1/2)
class MySMSBroadcastReceiver : BroadcastReceiver() {
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 -> {
val consentIntent = extras.getParcelable<Intent>(
SmsRetriever.EXTRA_CONSENT_INTENT)

startActivityForResult(consentIntent, SMS_CONSENT_REQUEST)
}
…
}
}
Request consent
(2/2)
<receiver android:name=".MySMSBroadcastReceiver" android:exported="true">
<intent-filter>
<action
android:name="com.google.android.gms.auth.api.phone.SMS_RETRIEVED"/>
</intent-filter>
</receiver>
Hande SMS
(if user is OK about it)
override fun onActivityResult(requestCode: Int, resultCode: Int, data:
Intent?) {
…
if (requestCode == SMS_CONSENT_REQUEST) {
// full text of message
data.getStringExtra(SmsRetriever.EXTRA_SMS_MESSAGE)
}
}
SMS Retriver -
Automatic SMS verification
Prerequisite - dependencies
implementation 'com.google.android.gms:play-services-auth:16.0.1'
implementation 'com.google.android.gms:play-services-auth-api-phone:
16.0.0'
Start listen user’s SMS
SmsRetriever.getClient(this).startSmsRetriever()
Retrive SMS
(1/2)
class MySMSBroadcastReceiver : BroadcastReceiver() {
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 -> {
val message = extras.get(
SmsRetriever.EXTRA_SMS_MESSAGE) as String // full text of SMS
}
…
}
}
Retrive SMS
(2/2)
<receiver android:name=".MySMSBroadcastReceiver" android:exported="true">
<intent-filter>
<action
android:name="com.google.android.gms.auth.api.phone.SMS_RETRIEVED"/>
</intent-filter>
</receiver>
<#>
Your ExampleApp code is: 123ABC78
FA+9qCX9VSu
SMS Retriver SMS format:
Broadcast receiver(s)
class MySMSBroadcastReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (SmsRetriever.SMS_RETRIEVED_ACTION == intent.action) {
val extras = intent.extras
val message = extras.get(SmsRetriever.EXTRA_SMS_MESSAGE) as String
}
}
class MySMSBroadcastReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (SmsRetriever.SMS_RETRIEVED_ACTION == intent.action) {
val extras = intent.extras
val consentIntent = extras.getParcelable<Intent>(
SmsRetriever.EXTRA_CONSENT_INTENT)

startActivityForResult(consentIntent, SMS_CONSENT_REQUEST)
}
Request user consent if app use SMS consent API
Retrieve SMS immediately if app use SMS retriever API

Sms verification APIs

  • 1.
  • 2.
    SMS verification APIs “Verifyyour users by SMS without making them deal with verification codes. By using the SMS Retriever API, your app can automatically retrieve verification codes intended for your app, without having to request full SMS reading permissions.” • SMS permission is dangerous https://developers.google.com/identity/sms-retriever/
  • 3.
    • One tapverification • Automatic verification
  • 4.
    SMS User Consent- 
 One-tap SMS verification
  • 5.
    Prerequisite - dependencies implementation'com.google.android.gms:play-services-auth:17.0.0' implementation 'com.google.android.gms:play-services-auth-api-phone: 17.1.0'
  • 6.
    Start listen user’sSMS SmsRetriever.getClient(this).startSmsUserConsent(null)
  • 7.
    Request consent (1/2) class MySMSBroadcastReceiver: BroadcastReceiver() { 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 -> { val consentIntent = extras.getParcelable<Intent>( SmsRetriever.EXTRA_CONSENT_INTENT)
 startActivityForResult(consentIntent, SMS_CONSENT_REQUEST) } … } }
  • 8.
    Request consent (2/2) <receiver android:name=".MySMSBroadcastReceiver"android:exported="true"> <intent-filter> <action android:name="com.google.android.gms.auth.api.phone.SMS_RETRIEVED"/> </intent-filter> </receiver>
  • 9.
    Hande SMS (if useris OK about it) override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { … if (requestCode == SMS_CONSENT_REQUEST) { // full text of message data.getStringExtra(SmsRetriever.EXTRA_SMS_MESSAGE) } }
  • 10.
    SMS Retriver - AutomaticSMS verification
  • 11.
    Prerequisite - dependencies implementation'com.google.android.gms:play-services-auth:16.0.1' implementation 'com.google.android.gms:play-services-auth-api-phone: 16.0.0'
  • 12.
    Start listen user’sSMS SmsRetriever.getClient(this).startSmsRetriever()
  • 13.
    Retrive SMS (1/2) class MySMSBroadcastReceiver: BroadcastReceiver() { 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 -> { val message = extras.get( SmsRetriever.EXTRA_SMS_MESSAGE) as String // full text of SMS } … } }
  • 14.
    Retrive SMS (2/2) <receiver android:name=".MySMSBroadcastReceiver"android:exported="true"> <intent-filter> <action android:name="com.google.android.gms.auth.api.phone.SMS_RETRIEVED"/> </intent-filter> </receiver>
  • 15.
    <#> Your ExampleApp codeis: 123ABC78 FA+9qCX9VSu SMS Retriver SMS format:
  • 16.
    Broadcast receiver(s) class MySMSBroadcastReceiver: BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (SmsRetriever.SMS_RETRIEVED_ACTION == intent.action) { val extras = intent.extras val message = extras.get(SmsRetriever.EXTRA_SMS_MESSAGE) as String } } class MySMSBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (SmsRetriever.SMS_RETRIEVED_ACTION == intent.action) { val extras = intent.extras val consentIntent = extras.getParcelable<Intent>( SmsRetriever.EXTRA_CONSENT_INTENT)
 startActivityForResult(consentIntent, SMS_CONSENT_REQUEST) } Request user consent if app use SMS consent API Retrieve SMS immediately if app use SMS retriever API