BroadNet
ジャーナルエンジニアリング
エンジニアリング

SMS OTPオートフィル:Android SMS Retriever、iOS one-time-code、およびWebOTPメッセージ形式

メッセージが適切な形式で構成されていれば、Android、iOS、およびウェブ上でSMSコードを自動入力できます。具体的には、AndroidのSMS Retriever用には11文字のアプリハッシュ、iOSおよびSafari用にはautocomplete="one-time-code"、WebOTP用には最終行に @your-domain #codeを使用します。以下に、各形式と3つすべてに対応するテンプレートを示します。

8 読了目安
エンジニアリング · No. 40
8 読了目安

ッセージがプラットフォームに適した形式であれば、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文字を使用します。デバッグビルドとリリースビルドでは通常異なるキーで署名されるため、ハッシュも異なります。メッセージを構築する際に、サーバー側で正しいハッシュを追加してください。

テンプレートが他のチャネルと共有されている場合など、メッセージにアプリのハッシュを含めることができない場合、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は、人間が読めるテキストで始まり、以下の形式の最終行で終わる必要があります。

snippet
Your BroadNet code is 482913.
@www.example.com #482913
  • 最終行は@で始まり、コードを要求するページのドメインが続きます。
  • 半角スペースを1つ入れ、その後に # とコードを記述します。
  • ドメイン内にスキーム、ポート、パスを含めず、スペースも入れないでください。
  • メッセージを読む人のために、人間が判読可能な部分にもコードを含める必要があります。

WebOTPに対応していないブラウザでもコードが表示されるよう、入力時にも常にautocomplete="one-time-code"を保持してください。

1つのSMSテンプレートですべてのプラットフォームに対応できますか?

はい、Androidのバイト制限内に収まり、行の順序が正しければ可能です。結合されたテンプレートの例:

snippet
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 API4〜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)に基づいて確認されました。当社の編集基準をご覧ください。

この記事は役に立ちましたか?

コンテンツの執筆・レビュー方針

執筆者

BroadNet編集チーム

編集チームがBroadNetブログを運営しています。記事はBroadNetの規制対応、製品、エンジニアリング、業界調査、通信事業者向けソリューションの各チームとともに執筆され、当社の編集基準に基づいてレビューされています。

続きを読む

ジャーナルからのおすすめ記事

すべての記事を見る
コ
エンジニアリング

コードからSMSを送信する方法:1回のREST呼び出しでPython、PHP、Node.js、Java、Go、C#に対応

コードからSMSを送信するには、認証済みの1回のHTTPS POSTを行います。具体的には、Bearerトークン、送信元ID・宛先番号・メッセージ・メッセージタイプを含むJSONボディ、そして返されるメッセージIDが必要です。以下に、Python、PHP、Node.js、Java、Go、C#での同様のリクエスト例に加え、エラーハンドリングと本番環境への導入に関するアドバイスを記載します。

BroadNet編集チーム
9m
コ
エンジニアリング

コード送信前のプロセス:MobileValidateとBroadNetを活用したOTPの事前チェックルーチン

事前チェックとは、ユーザーが電話番号を入力した瞬間からコードを送信する瞬間までに行われる1回のルックアップです。これにより、OTPを受信できない番号を検知し、追加の認証(フリクション)が必要なリスクのあるパターンをフラグ立てし、最適なチャネルを選択します。以下に、MobileValidateとBroadNetを用いたルーチンと、各結果に応じた判定テーブルを示します。

BroadNet編集チーム
9m
E
エンジニアリング

Email to SMS:Email-to-SMSゲートウェイの仕組み、活用シーン、およびセキュリティ対策

Email-to-SMSゲートウェイは、電話番号宛の電子メールをテキストメッセージに変換します。これにより、メール送信のみが可能な監視ツール、ヘルプデスク、レガシーシステムなどが、SMSを通じてユーザーに連絡できるようになります。本記事では、その仕組み、APIよりも優れているケース、そしてなりすましメールに対する防御方法について解説します。

BroadNet編集チーム
7m
ジャーナルをメールで購読する

月に1本のエッセイをお届けします。 それだけです。

購読いただくと、エンジニアリング、規制、または業界に関する最新情報を、発行当日に直接お届けします。ドリップキャンペーンや製品の勧誘、第三者への情報共有は一切行いません。ワンクリックで購読解除が可能です。

配信は月に1回のみです。いつでもオプトアウト可能です。詳細は プライバシーポリシー.

お届けする内容
  • クリックベイトではない、読み応えのある記事
    単一のトピックについて、6分から11分程度で集中して読める内容をお届けします。
  • 現場の運用担当者が執筆
    エンジニア、規制担当責任者、および製品担当者が社内で執筆しています。
  • 地域に精通した視点
    規制当局、通信事業者、およびチャネルミックスに関する中東・北アフリカの視点。
  • 月1回
    ドリップ配信は行いません。共有すべき内容がある時にのみ、エッセイをお届けします。
読むのは終わりにして、実装を始めましょう。

私たちが執筆する内容のほとんどは、実務現場で得た知見に基づいています。

この記事に共感いただけたなら、ぜひ一度お話ししましょう。活用事例、ボリューム、対象市場をお聞かせください。それに基づき、配信ルート、料金、そして直接ご確認いただける導入事例をご提案します。

$ curl -X POST https://api.broadnet.me/sms/sendSms