ッセージがプラットフォームに適した形式であれば、SMSワンタイムコードを自動入力できます。Androidでは、140バイト以内のメッセージをSMS Retriever APIが読み取り、その中にコードとアプリを識別する11文字のハッシュが含まれている必要があります。iOSおよびSafariでは、入力欄にautocomplete="one-time-code" を設定し(ネイティブアプリではtextContentType oneTimeCode)、キーボードがコードを提案します。ウェブでは、最終行が @your-domain #codeであるメッセージをWebOTP APIが読み取ります。1つのテンプレートですべてのプラットフォームに対応可能です。
重要なポイント
- オートフィルにより、コードの受信から入力までの間にアプリを切り替える必要がなくなり、ユーザー離脱を防げます。
- Android SMS Retriever:最大140バイトのメッセージ。コードと11文字のアプリハッシュを含める必要があります。SMSの権限は不要です。
- Android SMS User Consent:ハッシュは不要。メッセージには、少なくとも1つの数字を含む4〜10文字の英数字コードを含める必要があります。ユーザーがタップして許可します。
- iOSおよびSafari:入力欄にautocomplete="one-time-code" を設定。ドメインに紐付けられた最終行により、Safariの提案機能が有効になります。
- WebOTP: 最後の行 @domain #code。スキーム、ポート、パスは含めません。Androidおよびデスクトップ版のChromeでサポートされています。
なぜOTPのオートフィルが重要なのでしょうか?
「コード送信」から「コード入力」までの各ステップでユーザーが離脱します。メッセージアプリへの切り替え、6桁の数字の記憶、そして元のアプリへの切り替えです。オートフィルを使えば、これらがタップ操作だけで完結します。また、入力ミスを減らすとともに、ドメインに紐付けられたコードを使用することで、類似サイトにコードを入力させるなりすましを防ぐ効果もあります。ただし、オートフィルは配信の問題を解決するものではありません。コードは迅速に届く必要があるため、オートフィルを利用する場合は、高速な配信ルートとフォールバックを組み合わせてください。詳細はOTPの配信ベストプラクティスをご覧ください。
AndroidのSMS Retriever APIはどのように機能しますか?
SMS Retriever APIを使用すると、AndroidアプリはSMSの読み取り権限を要求することなく、認証メッセージを受信できます。Googleのドキュメントでは、メッセージに対して以下の3つのルールを定めています。
- 140バイト以内であること。
- アプリがサーバーに送り返すワンタイムコードが含まれていること。
- アプリを識別するための11文字のハッシュ文字列が含まれていること。
ハッシュは、アプリのパッケージ名と署名証明書から計算されます。証明書の16進数形式にパッケージ名を付加し、SHA-256を取得してBase64エンコードを行い、その最初の11文字を使用します。デバッグビルドとリリースビルドでは通常異なるキーで署名されるため、ハッシュも異なります。メッセージを構築する際に、サーバー側で正しいハッシュを追加してください。
SMS User Consent APIとは何ですか?
テンプレートが他のチャネルと共有されている場合など、メッセージにアプリのハッシュを含めることができない場合、AndroidのSMS User Consent APIは、ユーザーにアプリがメッセージを1件読み取ることを許可するプロンプトを表示します。Googleによれば、メッセージには少なくとも1つの数字を含む4〜10文字の英数字文字列が含まれている必要があり、送信元を指定した場合はその送信元から送信される必要があります。APIは、開始後約5分間待機し、その後タイムアウトします。
iOSにおけるOTPの自動入力はどのように機能しますか?
iOSでは、キーボードからセキュリティコードの自動入力が可能です。ネイティブアプリでは、テキストフィールドのtextContentTypeをoneTimeCodeに設定してください。ウェブページの場合は、inputにautocomplete="one-time-code"を追加します。一致するSMSが届くと、キーボードの上にコードが表示され、ユーザーがそれをタップします。SafariはWebOTP JavaScript APIを実装していませんが、ChromeのWebOTPドキュメントによると、autocompleteアノテーションを使用し、SMSが以下のドメインに紐付けられた形式に従っている場合、デフォルトのキーボードがコードを提案します(iOS 14およびmacOS Big Sur以降)。
WebOTPメッセージ形式とは何ですか?
WebOTP APIを使用すると、ウェブページがnavigator.credentials.get({ otp: { transport: ['sms'] } })を使用してコードを読み取ることができます。SMSは、人間が読めるテキストで始まり、以下の形式の最終行で終わる必要があります。
Your BroadNet code is 482913. @www.example.com #482913- 最終行は@で始まり、コードを要求するページのドメインが続きます。
- 半角スペースを1つ入れ、その後に # とコードを記述します。
- ドメイン内にスキーム、ポート、パスを含めず、スペースも入れないでください。
- メッセージを読む人のために、人間が判読可能な部分にもコードを含める必要があります。
WebOTPに対応していないブラウザでもコードが表示されるよう、入力時にも常にautocomplete="one-time-code"を保持してください。
1つのSMSテンプレートですべてのプラットフォームに対応できますか?
はい、Androidのバイト制限内に収まり、行の順序が正しければ可能です。結合されたテンプレートの例:
Your BroadNet code is 482913. Do not share it.FA+9qCX9VSu @www.example.com #482913| プラットフォーム | コードの読み取り主体 | メッセージに必要なもの |
|---|---|---|
| Androidアプリ | SMS Retriever API | コードと11文字のアプリハッシュ値(最大140バイト) |
| Androidアプリ(ハッシュなし) | SMS User Consent API | 4〜10文字の英数字コード(数字を少なくとも1つ含む) |
| iOSアプリ | 認証コードの自動入力 (oneTimeCode) | 認識しやすいコード。ドメインに紐付けられた行を推奨 |
| Safari (iOS, macOS) | autocomplete="one-time-code" | 最終行 @domain #code |
| Chrome (Android, desktop) | WebOTP API | 最終行 @domain #code |
表示されているハッシュはプレースホルダーです。アプリ独自の値を指定してください。メッセージを1セグメントに維持するために、テンプレートはGSM-7文字セットを使用してください。絵文字やアクセント付き文字を使用すると、メッセージ全体がUnicodeに切り替わり、容量が半分になり、140バイトの制限を超えてしまう可能性があります。詳細はSMSのエンコーディングとセグメント化をご覧ください。
BroadNetでこれらのメッセージを送信する方法について説明します。
サーバー上でメッセージを構築し、OTP APIまたはSMS APIを通じて送信します。改行はメッセージテキストの一部となります。BroadNetのOTP製品は、コードが届かない場合にSMS、WhatsApp、音声、およびFlash Callへとフォールバックします。また、MyOTP.Appは、1つのアカウントからSMS、WhatsApp、またはTelegramを使用してコードを送信します。フロー全体については、OTPフローの構築方法および当社のマルチチャネルOTP認証ガイドをお読みください。
よくある質問
AndroidアプリがOTP SMSを読み取れないのはなぜですか?
通常、メッセージ内のアプリハッシュがビルドと一致していない(デバッグキーとリリースキーが異なる)、メッセージが140バイトを超えている、またはメッセージの受信後にリスナーが開始されたことが原因です。
Androidでコードを自動入力するためにSMSの権限は必要ですか?
いいえ。SMS Retriever APIとSMS User Consent APIは、どちらもSMSの読み取り権限なしで動作します。
iOSでOTPオートフィルを有効にするにはどうすればよいですか?
ネイティブアプリではtextContentTypeをoneTimeCodeに設定するか、ウェブページでは入力欄にautocomplete="one-time-code"を追加してください。
WebOTP SMS形式とは何ですか?
まず人間が読めるテキストを記載し、最後に@に続けてドメイン、スペース、#、そしてコードを記載した行を追加します。例:@www.example.com #482913。
WebOTPはSafariで動作しますか?
SafariはWebOTP JavaScript APIをサポートしていませんが、autocomplete="one-time-code"を使用すると、ドメインに紐付けられた形式のメッセージからキーボードがコードを提案します。
Android、iOS、ウェブで共通のテンプレートを使用できますか?
はい。テキスト内のコード、独立した行のアプリハッシュ、そして最後にドメイン紐付け行を、すべて140バイト以内に収めてください。
プラットフォームのルールは、2026年9月28日にGoogleのSMS RetrieverおよびSMS User Consentのドキュメント (developers.google.com)とChromeのWebOTPのドキュメント (developer.chrome.com)に基づいて確認されました。当社の編集基準をご覧ください。
