Android 17 SMS OTP delay: why auto-read breaks in 2027 and the India fix

Targeting Android 17 hides standard OTP SMS for three hours. Move to SMS Retriever or User Consent before Play's expected August 2027 API 37 rule.

Read time
18 min
Word count
2.6K
Sections
12
FAQs
8
Share
Indian developer holds an Android phone beside a second handset on a test stand, with Android robot and Google Play logos
On this page · 12 sections
  1. What Android 17 changed
  2. Why auto-fill breaks, and why it looks like a UX bug
  3. When it hits you: the dates
  4. The India fix: choose a path for each flow
  5. SMS Retriever: the default when you own the template
  6. SMS User Consent: when someone else writes the SMS
  7. DLT and TRAI: the part that is not code
  8. Beyond SMS: WhatsApp, RCS, carrier checks and passkeys
  9. A fallback ladder for one login screen
  10. Migration checklist
  11. How eCorpIT can help
  12. References

Summary. Android 17 (API level 37), released on 16 June 2026, holds back standard SMS messages containing a one-time password from most apps that target API 37: for three hours the SMS_RECEIVED_ACTION broadcast is withheld and SMS provider queries are filtered. Exempt apps include the default SMS app, the assistant app and connected-device companion apps. A second change already hits every app on an Android 17 device: WebOTP-format messages are hidden for three hours from apps that are not the domain-verified recipient. Google's fixes are the SMS Retriever API (an 11-character app hash in a message of at most 140 bytes) and the SMS User Consent API (one tap to share one message). Google's blog said Play will require API 37 in August 2027, while Play Console Help still lists only the API 36 rule. In India the slow step is the DLT template change under TRAI's TCCCPR 2018, amended again on 18 September and 4 November 2026. WhatsApp templates and passkeys cut OTP volume, carrier verification lists no Indian carrier yet, and RBI's 2025 directions keep SMS OTP lawful.

About this article. For Android engineers and product owners at Indian banks, fintechs, ecommerce and delivery companies whose apps read OTP SMS. On 7 November 2026 we checked platform claims against Google's Android, Chrome, Firebase and Play documentation, WhatsApp claims against Meta's developer pages, and regulatory claims against TRAI's gazette texts (TCCCPR 2018 as amended to 4 November 2026) and RBI's Directions of 25 September 2025. This is general information, not legal advice; Google can revise these pages at any time, and no vendor paid for inclusion. Researched with AI assistance and reviewed by our editorial team.

What Android 17 changed

Two Google pages describe the change. The one for apps targeting Android 17 covers standard SMS; the one for all apps covers the two special OTP formats on any Android 17 device, whatever your targetSdkVersion. Google's launch post lists the exempt apps.

Change Who it applies to What your app sees Google page
OTP protection for standard SMS (an OTP in neither the WebOTP nor the SMS Retriever format) Most apps targeting API 37 or higher No SMS_RECEIVED_ACTION broadcast and filtered SMS provider queries for 3 hours after receipt Behaviour changes: apps targeting Android 17
OTP protection for WebOTP-format messages All apps on Android 17 that can read SMS but are not the recipient named by domain verification The same 3-hour hold Behaviour changes: all apps
SMS Retriever-format messages (carrying an app hash) All apps except the app that owns the hash and exempt apps A 3-hour hold, as in earlier releases Behaviour changes: all apps
Exemptions Default SMS app, assistant app, connected-device companion apps and similar No delay Both pages and the launch post

Nothing is blocked for the user, who still sees the message and can type the code; your app sees it three hours later, after the code has expired. Google does not say how the system detects an OTP, so rewording templates to dodge it is a poor bet. Google tells apps that extract OTPs from SMS to move to SMS Retriever or SMS User Consent. Our Android 17 API 37 breaking-changes guide covers the other targeted changes.

Why auto-fill breaks, and why it looks like a UX bug

Many Indian apps auto-fill OTPs the same way: hold RECEIVE_SMS or READ_SMS, catch the SMS broadcast or query the inbox, and pull a 6-digit code out with a regular expression. Once the app targets API 37, both routes return nothing for that message for three hours.

On Google Play these permissions are open only to default SMS, phone or assistant handlers and to approved exceptions such as SMS-based financial transactions (Google's example is UPI) and SMS-based money management. So the change lands hardest on Indian payments, lending and budgeting apps.

Nothing crashes: the OTP screen waits while the user copies the code or gives up, so the failure shows in conversion, not crash rates. Log whether each code was auto-filled, typed or timed out before you change anything.

Three places hide SMS reading:

  • Third-party SDKs. Check the merged manifest, not only your own.
  • Cross-platform plugins. React Native and Flutter plugins that read SMS directly hit the same wall; those that wrap SMS Retriever or User Consent do not.
  • Web and app sharing one template. If your website sends WebOTP-format messages and your app reads SMS directly, the app counts as the recipient only if Android's domain verification links it to that domain. That applies on Android 17 devices today, whatever you target.

When it hits you: the dates

The standard-SMS delay depends on your target API level, so what matters is when you must target 37. Sources: Google's Beta 1, resizability and launch posts, and Play Console Help.

Date Event Status on 7 November 2026
13 February 2026 Android 17 Beta 1; Google says the Q2 release is the only one with planned app-breaking behaviour changes Done
13 February 2026 Google's blog says Play will require API 37 for new apps and updates in August 2027 Blog statement only
16 June 2026 Android 17 stable release Done
31 August 2026 Play requires API 36 for new apps and updates In force
1 November 2026 End of the extension window for the API 36 rule Passed
Q4 2026 Planned minor Android 17 SDK release No breaking changes announced
August 2027 API 37 requirement for new apps and updates Month from Google's blog; no day on Play Help yet

Updates targeting API 36 stay acceptable until August 2027. The last two rules took effect on 31 August (2025 for API 35, 2026 for API 36), so plan for 31 August 2027 and finish the OTP migration by June 2027 to leave room for a staged rollout. Our Google Play API 37 deadline checklist covers the wider Android 17 work.

The India fix: choose a path for each flow

There is no single replacement. Pick per flow, by who writes the message and whether you need SMS at all. Sources: Google's Retriever, User Consent, WebOTP and phone-verification guides and Meta's template documentation.

Option What the user does SMS permission needed You must control the SMS text DLT template change Best for
SMS Retriever API Nothing; the code arrives in the app No Yes: 11-character hash, at most 140 bytes Yes Your own sign-up and login OTPs
SMS User Consent API One tap on a system prompt for each message No No; needs a 4 to 10 character code with a digit No OTPs written by a bank, aggregator or partner
WebOTP (Chrome on Android) One tap Not applicable Yes: last line is @domain #code Yes Mobile web login and checkout
WhatsApp authentication template One tap (autofill), nothing (zero-tap) or copy code No Meta template with package name and signature hash No; Meta template approval instead A second channel when SMS is slow
Phone Number Verification API (GSMA TS.43) One tap on a Credential Manager sheet No No SMS is sent No Sign-up number checks where an aggregator covers the carrier
Passkeys through Credential Manager Screen lock or biometric No No SMS is sent No Returning-user sign-in without an OTP

The first two are Google's named fixes. Play's policy page lists the Digital Credentials API first among its recommended options for phone verification, then SMS Retriever and User Consent. The rest cut how often you need one.

SMS Retriever: the default when you own the template

SMS Retriever, part of Google Play services, hands your app one message carrying its hash, without any SMS permission. It needs a minSdkVersion of 19 and a compileSdkVersion of 28 or higher.

  1. Compute the hash from the right certificate. It is the first 11 characters of a base64-encoded SHA-256 of your package name and signing certificate. With Play App Signing, download deployment_cert.der from the App signing section of Play Console; debug and upload keys give different hashes. Google says not to put a hash computed on the device into your messages.
  1. Rewrite the message. At most 140 bytes, containing the one-time code and the 11-character hash.
  1. Listen before you request the SMS. startSmsRetriever() waits up to five minutes for one matching message.
  1. Receive it safely. Protect the receiver with com.google.android.gms.auth.api.phone.permission.SEND (Play services 19.8.31 or higher) so only Play services can deliver the broadcast, and do not declare that permission for the app itself. The sender address extra arrives from Play services 24.20.
  1. Verify on the server. Check the code is valid and unexpired, mark the number verified, then delete the code. Google says codes are generated and checked only on the server.

            val client = SmsRetriever.getClient(context)
client.startSmsRetriever()
    .addOnSuccessListener { requestOtpFromServer(phoneNumber) } // send SMS only after listening starts
    .addOnFailureListener { showManualEntry() }                 // manual entry stays available
          

If the same OTP serves your website, one template can carry both formats. WebOTP needs @host #code as the last line, and Chrome lists a message ending in an app hash as malformed, so the hash goes in the body:


            482913 is your ExampleApp login code. Do not share it with anyone. FA+9qCX9VSu
@example.com #482913
          

That is Google's sample hash; yours will differ. The message is 99 characters of plain Latin text. Hindi or another Indian script goes out as Unicode (UCS-2) at two bytes per character, so 140 bytes holds only 70 characters; test regional-language templates before you file them.

SMS User Consent: when someone else writes the SMS

Some OTPs are not yours to change: a card issuer's code, a bank's account-linking code, a partner's message. User Consent is Google's answer for that case. Your app calls startSmsUserConsent(); when a matching message arrives, the device asks the user whether to share that one message, and if they agree you get the full text.

For five minutes, a message triggers the prompt only if it contains a 4 to 10 character alphanumeric string with at least one digit and, if you passed a sender number, came from that number. Messages that arrived earlier are not forwarded. Chrome's WebOTP FAQ adds that the prompt does not appear when the sender is in the user's contacts.

Two India cautions. The sender filter takes a phone number while Indian OTPs come from alphanumeric DLT headers, so test with your real header or pass null. And each message costs a tap, so this is the fallback, not the primary flow.

DLT and TRAI: the part that is not code

India's commercial SMS, OTPs included, runs on the distributed ledger (DLT) system under TRAI's Telecom Commercial Communications Customer Preference Regulations, 2018 (TCCCPR). Senders register headers and content templates, and messages are scrubbed against them, so adding a hash or a WebOTP line is a template change. Three amendments matter:

  • February 2025. Operators may allow more than three variables only with recorded justification, and then only if each variable is pre-tagged and at least 30% of the template is fixed text. Each template may link to one header, and templates unused for 90 days are deactivated until the sender asks for reactivation.
  • September 2026. The Third Amendment moved OTPs for app login, password reset and two-factor authentication into the definition of service messages. A template found on complaint to be in the wrong category is blacklisted, and five such blacklistings in 90 days suspend the sender for a month or until all its templates are re-verified, whichever is later. That provision starts 90 days after gazette publication: 17 December 2026 if counted from the 18 September notification date.
  • November 2026. The Fourth Amendment of 4 November postpones regulation 35A, a charge of up to 5 paise a minute on A2P voice calls, to a date TRAI will notify. SMS template rules are unchanged.

For an OTP template, that means:

  • Fix the hash and domain. Both are constant for a given app, signing key and website.
  • Count variables. A combined Retriever and WebOTP template uses the code twice.
  • Plan one template per app and header. Different package names give different hashes.
  • Treat debug builds separately. Use User Consent there, or register a test template.
  • Check category and timing. File OTPs as service messages, and do not register so early that templates sit unused for 90 days.

Approval runs on the operator's calendar, so start early.

Beyond SMS: WhatsApp, RCS, carrier checks and passkeys

WhatsApp authentication templates. Meta requires one for any OTP sent over WhatsApp. One-tap autofill opens your app with the code; it is Android only, needs app changes and shows a copy-code button on other devices, though iOS 26 and later offers keyboard autofill. Zero-tap delivers the code to your app without the user leaving it, also on Android only, and Meta advises against making WhatsApp your default channel. Both carry your package name and the same hash you compute for SMS Retriever, and Meta deprecated the older PendingIntent handshake on 15 October 2026 in favour of its OTP Android SDK. For pricing, ask Meta or your provider; since 1 July 2024 India has carried Meta's authentication-international rate for eligible senders based abroad.

RCS. Google's Android 17 notes and its Retriever and User Consent guides cover SMS only, and we found no public Android API that lets a third-party app read RCS business messages. Treat RCS as a tap-or-copy channel with SMS fallback.

Carrier-based number verification. Android's Phone Number Verification API gets a verified number from the carrier without an SMS: the user confirms on a Credential Manager sheet, Android fetches an encrypted GSMA TS.43 token by authenticating the SIM, and your server exchanges it with an aggregator or carrier, which is when charges apply. It needs Android 10 or later, and Google says to check carrier support first and fall back to SMS. Google's Firebase version lists 14 regions and 20 carriers, none in India, on a page last updated 6 November 2026, so pilot it first. It sits alongside the SIM checks in our India SIM binding guide.

Missed-call verification. Play stops accepting account verification by phone call as a use of READ_CALL_LOG from 27 January 2027.

Passkeys. Credential Manager is Google's recommended Jetpack API for passkeys, passwords and Sign in with Google, and a passkey removes the OTP from routine sign-in. Chrome's documentation warns that SMS can be spoofed and numbers hijacked or recycled. Our passkeys versus SMS OTP guide covers the server side. For payments, RBI's Authentication Mechanisms for Digital Payment Transactions Directions, 2025 (issued 25 September 2025, compliance by 1 April 2026 unless stated otherwise) keep the two-factor norm, and RBI says they encourage new factors and risk-based checks without discontinuing SMS OTP. SMS OTP stays lawful; it just stops being the only sensible option.

A fallback ladder for one login screen

The timers are design choices, not study figures.

Step Condition Channel What the user does
1 Returning user with a passkey Passkey through Credential Manager Unlocks with screen lock or biometric
2 New sign-up, carrier supported by your aggregator Phone Number Verification API Taps once to share the number
3 Otherwise SMS with Retriever hash and WebOTP line; Retriever listening for 5 minutes Nothing, if the SMS arrives on this phone
4 No SMS by the end of your resend timer WhatsApp authentication template with one-tap autofill Taps the autofill button
5 SMS sent by a partner you do not control SMS User Consent Taps to share one message
6 Always Manual code entry, visible from the start Types the code

Keep step 6 visible throughout: Google's User Consent guidance asks you to offer keyboard entry first, because the SMS may arrive on a different device from the one running your app.

Migration checklist

  1. List every flow that reads SMS (login, sign-up, number change, payment confirmation) and search the merged manifest for RECEIVE_SMS and READ_SMS.
  1. Add funnel events for auto-filled, typed and timed-out codes, and collect a baseline.
  1. Decide per flow: SMS Retriever, SMS User Consent, or a non-SMS method.
  1. Download the Play App Signing certificate and compute the production hash.
  1. Draft templates with the hash and, for WebOTP, the @domain #code last line; check the 140-byte limit, including Unicode versions.
  1. File the templates with your gateway as service messages and confirm the current TCCCPR rules.
  1. Build the Retriever and User Consent paths, keeping manual entry visible.
  1. Remove both SMS permissions once no flow needs them, and update your Play permissions declaration.
  1. Test on an Android 17 device with a build targeting API 37; compatibility toggles also let a debuggable app switch on targeted changes without changing its target.
  1. Test WebOTP-format messages on Android 17 devices now, then ship through a staged rollout against your baseline.

How eCorpIT can help

eCorpIT is a Gurugram-based technology organisation, founded in 2021, assessed at CMMI Level 5 and MSME certified, with senior-led engineering teams working across AWS, Microsoft and Google platforms. Our Android app development team can take an app through the Android 17 OTP change, from SMS-reading inventory and DLT template drafting to Retriever, User Consent and passkey builds and a measured staged rollout. Talk to us at /contact-us/.

Last updated: 7 November 2026.

References

  1. Behavior changes: apps targeting Android 17 or higher, last updated 31 October 2026 — Android Developers
  1. Android 17 is here, 16 June 2026 — Android Developers Blog
  1. Behavior changes: all apps (Android 17), last updated 28 October 2026 — Android Developers
  1. Perform SMS verification on a server — Google for Developers
  1. Request one-time consent to read an SMS verification code — Google for Developers
  1. Prepare your app for the resizability and orientation changes in Android 17, 13 February 2026 — Android Developers Blog
  1. Target API level requirements for Google Play apps — Play Console Help
  1. Telecom Commercial Communications Customer Preference (Third Amendment) Regulations, 2026, 18 September 2026 — Telecom Regulatory Authority of India
  1. Telecom Commercial Communications Customer Preference (Fourth Amendment) Regulations, 2026, 4 November 2026 — Telecom Regulatory Authority of India
  1. RBI issues Directions on Framework on Authentication Mechanisms for Digital Payment Transactions, 25 September 2025 — Reserve Bank of India
  1. Use of SMS or Call Log permission groups — Play Console Help
  1. The First Beta of Android 17, 13 February 2026 — Android Developers Blog
  1. Verify phone numbers on the web with the WebOTP API — Chrome for Developers
  1. About verifying phone numbers, last updated 26 October 2026 — Android Developers
  1. Authentication templates — Meta for Developers
  1. Request SMS verification in an Android app, last updated 3 November 2026 — Android Developers
  1. What is UCS-2 character encoding? — Twilio
  1. One-tap SMS verification with the SMS User Consent API — Google for Developers
  1. Telecom Commercial Communications Customer Preference (Second Amendment) Regulations, 2025, 12 February 2025 — Telecom Regulatory Authority of India
  1. One-tap autofill authentication templates — Meta for Developers
  1. Zero-tap authentication templates — Meta for Developers
  1. Authentication-international rates — Meta for Developers
  1. Implement phone number verification — Android Developers
  1. Firebase Phone Number Verification supported carriers and pricing, last updated 6 November 2026 — Firebase
  1. About Credential Manager — Android Developers
  1. Reserve Bank of India (Authentication mechanisms for digital payment transactions) Directions, 2025 — Reserve Bank of India
  1. Migrate apps to Android 17 — Android Developers

Frequently asked

Quick answers.

01 Why does my app stop reading SMS OTPs when it targets Android 17?
Android 17 withholds standard SMS messages containing an OTP from most apps targeting API 37 for three hours: the broadcast is suppressed and inbox queries are filtered. Exempt apps include the default SMS app, the assistant app and companion apps. Google says to use SMS Retriever or SMS User Consent.
02 Does the three-hour delay apply if my app still targets API 36?
Not for standard SMS, which is gated on API 37. But on Android 17 devices every app is held back for three hours from WebOTP-format messages meant for another domain and from SMS Retriever messages carrying another app's hash. Test both cases on an Android 17 device now.
03 Will SMS User Consent work with Indian DLT sender headers?
It can. The prompt triggers when a message contains a 4 to 10 character alphanumeric code with at least one digit. The optional sender filter expects a phone number, while Indian OTPs arrive from alphanumeric DLT headers, so test with your real header or pass null and accept any sender.
04 Do I have to re-register DLT templates to add the app hash?
In practice, yes. OTPs go out against content templates registered with operators under TRAI's TCCCPR framework, and a hash or WebOTP line changes the text. Put the hash in as fixed text, plan one template per app, file OTPs as service messages and confirm the current rules with your gateway.
05 Can a WhatsApp OTP fill automatically on Android?
Yes, with Meta's authentication templates. The one-tap autofill button opens your app and passes the code, and zero-tap delivers it to your app's broadcast receiver without the user leaving the app. Both work only on Android, need app changes and carry your package name and SMS Retriever hash.
06 Does RBI still allow SMS OTP for digital payments?
Yes. RBI's Authentication Mechanisms for Digital Payment Transactions Directions, 2025, with compliance due by 1 April 2026, keep the two-factor norm and encourage new factors. RBI's press release says the framework does not call for SMS OTP to be discontinued, and issuers may add risk-based checks.
07 When will Google Play force apps to target API 37?
Google's Android Developers Blog said on 13 February 2026 that Play will require new apps and updates to target API 37 in August 2027. Play Console Help had not published that rule as of 7 November 2026. The last two rules began on 31 August, so plan for that date.
08 Can carrier-based phone number verification replace SMS OTP in India?
Not yet at scale. Android's Phone Number Verification API swaps the SMS for a carrier-issued TS.43 token, but it needs a carrier and aggregator that support it. Google's Firebase version lists 14 regions and no Indian carrier as of November 2026, so pilot it and keep SMS as the fallback.

About the author

Manu Shukla

Founder & Director

Founder of eCorpIT. Hands-on engineer leading senior-only delivery for AI apps, custom software, and cloud systems for global clients.

Subscribe

One engineering note a week. No fluff, no spam.

Senior-architect playbooks on AI agents, mobile apps, cloud, security, data, and marketing — delivered every Wednesday.

Past the reading

Read enough. Let's build something.

A senior architect responds in 24 working hours with scope, indicative cost, and a timeline. NDA before any technical conversation.

Loading search…

Browse all guides