---
title: "Saisie automatique d'OTP par SMS : Android, iOS et Web"
description: "Comment fonctionne la saisie automatique d'OTP sur Android, iOS et le Web : hash SMS Retriever, codes liés au domaine, WebOTP, format SMS unique et WhatsApp."
canonical: "https://omnichannels.ai/fr/blog/otp-autofill-android-ios-web/"
language: "fr"
updated: "2026-11-08"
publisher: "BroadNet Technologies"
brand: "OmniChannels.ai"
category: "integration"
primaryQuery: "otp autofill sms android ios"
keywords: ["saisie automatique code sms android", "format sms retriever api", "android sms user consent api", "code de sécurité ios saisie automatique", "code sms lié au domaine", "webotp api", "autocomplete one-time-code", "remplissage automatique code whatsapp", "hash application sms otp"]
published: "2026-11-08"
author: "OmniChannels.ai Editorial Team"
reviewer: "BroadNet Messaging Solutions Team"
readingMinutes: 9
answer: "La saisie automatique d'OTP repose sur trois mécanismes distincts. Les applications Android utilisent l'API SMS Retriever, qui exige un hash d'application de 11 caractères dans un message de 140 octets au plus, ou l'API SMS User Consent, sans hash. iOS propose les codes depuis le SMS lui-même, et les codes liés au domaine se terminent par une ligne comme @example.com #123456. Les sites web utilisent autocomplete=\"one-time-code\" et l'API WebOTP, qui lisent cette même dernière ligne."
takeaways: ["Android propose deux API : SMS Retriever (message de 140 octets au plus avec un code à usage unique et un hash d'application de 11 caractères) et SMS User Consent (l'utilisateur autorise le partage d'un message).", "Sur iOS, définissez le type de contenu du champ sur one-time-code ; les codes liés au domaine se terminent par une dernière ligne @domaine, une espace et #code, pris en charge depuis iOS 14.", "Sur le Web, ajoutez autocomplete=\"one-time-code\" au champ et appelez navigator.credentials.get avec le transport sms pour Chrome sur Android ; Safari utilise l'attribut.", "Un seul message peut satisfaire les trois plateformes si le hash de l'application figure au-dessus d'une dernière ligne @domaine #code, mais testez-le sur de vrais appareils et opérateurs.", "Les modèles d'authentification WhatsApp proposent les boutons copier le code, one-tap et zero-tap ; le zero-tap n'existe que sur Android."]
faq: 
  - q: "Quel est le format de message de l'API SMS Retriever ?"
    a: "La documentation de Google indique que le message ne doit pas dépasser 140 octets, contenir un code à usage unique que votre application renvoie à votre serveur, et inclure un hash de 11 caractères qui identifie votre application. Le reste du contenu est libre. Le hash permet à Google Play services d'acheminer le message vers la bonne application sans autorisation supplémentaire."
  - q: "Faut-il un hash d'application pour l'API SMS User Consent ?"
    a: "La présentation de l'API SMS User Consent par Google ne décrit aucun hash d'application. L'utilisateur voit à la place une invite et choisit de partager ou non le message avec votre application. Votre application doit commencer à écouter avant l'arrivée du SMS, puis elle extrait le code du texte du message lui-même."
  - q: "Qu'est-ce qu'un code SMS lié au domaine sur iOS ?"
    a: "C'est un SMS dont la dernière ligne associe le code à votre domaine : le domaine précédé de @, une espace, puis le code précédé de #. Apple le documente pour iOS 14 et versions ultérieures. La saisie automatique ne propose le code que si le site ouvert dans Safari, ou un domaine associé de l'application, correspond au domaine du message."
  - q: "Comment WebOTP lit-il le SMS ?"
    a: "La page appelle navigator.credentials.get avec une option otp et le transport sms. Quand arrive un message dont la dernière ligne est @hôte #code et dont l'hôte correspond à l'origine de la page, le navigateur demande confirmation à l'utilisateur et renvoie le code. HTTPS est requis, et Chrome sur Android est le navigateur documenté."
  - q: "Pourquoi mon OTP ne se remplit-il pas automatiquement ?"
    a: "Les causes habituelles sont un code mal identifiable, un hash d'application erroné ou absent sur Android, une dernière ligne qui ne suit pas le format @domaine #code, un domaine différent de celui de la page, ou un texte qui fait dépasser la limite d'octets. Vérifiez chaque point au regard des règles de format, puis testez avec un vrai téléphone."
  - q: "WhatsApp prend-il en charge la saisie automatique d'OTP ?"
    a: "Oui. Les modèles d'authentification de Meta prennent en charge un bouton copier le code, un bouton de saisie automatique one-tap et une option zero-tap. One-tap et zero-tap exigent le nom de package et le hash de signature de votre application Android. Le zero-tap n'est pris en charge que sur Android ; les autres plateformes reçoivent un bouton copier le code."
sources: 
  - title: "SMS Retriever API: perform SMS verification — Google for Developers"
    url: "https://developers.google.com/identity/sms-retriever/verify"
  - title: "SMS User Consent API: request a one-time code — Google for Developers"
    url: "https://developers.google.com/identity/sms-retriever/user-consent/request"
  - title: "Enabling AutoFill for domain-bound SMS codes — Apple Developer"
    url: "https://developer.apple.com/documentation/security/enabling-autofill-for-domain-bound-sms-codes"
  - title: "Verify phone numbers on the web with the WebOTP API — Chrome for Developers"
    url: "https://developer.chrome.com/docs/identity/web-apis/web-otp"
  - title: "WebOTP API — WICG specification"
    url: "https://wicg.github.io/web-otp/"
  - title: "Authentication templates — WhatsApp Business Platform, Meta for Developers"
    url: "https://developers.facebook.com/docs/whatsapp/business-management-api/authentication-templates"
---

# Saisie automatique d'OTP par SMS : Android, iOS et Web

Canonical: https://omnichannels.ai/fr/blog/otp-autofill-android-ios-web/
Language: fr
Publisher: OmniChannels.ai by BroadNet Technologies

Ce guide s'adresse aux développeurs et aux responsables produit qui veulent qu'un code de vérification se remplisse tout seul sur Android, iPhone et le Web. Il explique ce que chaque plateforme exige du SMS, comment rédiger un seul message valable pour les trois, comment les modèles d'authentification WhatsApp gèrent la saisie automatique, et ce qui pose le plus souvent problème.

## Comment fonctionne la saisie automatique d'OTP sur chaque plateforme ?

Chaque plateforme lit le SMS à sa manière : il n'existe donc pas d'interrupteur unique. Android exige soit un hash d'application, soit le consentement de l'utilisateur, iOS détecte les codes lui-même, et les navigateurs lisent une dernière ligne formatée.

| Plateforme | Mécanisme | Ce que le SMS doit contenir | Action de l'utilisateur |
|---|---|---|---|
| Application Android | API SMS Retriever | 140 octets au plus, un code à usage unique et un hash d'application de 11 caractères | Aucune |
| Application Android | API SMS User Consent | Un message contenant un code à usage unique | Autorise le partage d'un message |
| Application iOS et iPadOS | Saisie automatique des codes de sécurité | Un code qu'iOS sait détecter ; format lié au domaine recommandé | Touche la suggestion |
| Web (Safari) | `autocomplete="one-time-code"` | Dernière ligne liée au domaine | Touche la suggestion |
| Web (Chrome sur Android) | API WebOTP | Dernière ligne `@hôte #code` | Confirme l'invite |

Tout cela ne sert que si votre SMS arrive. Sinon, consultez [OTP non reçu](/fr/blog/otp-not-received-troubleshooting/).

## Comment fonctionne l'API Android SMS Retriever ?

Votre application demande à Google Play services d'écouter un seul message, et ce message porte un hash qui identifie votre application. Aucune autorisation supplémentaire n'est nécessaire.

La documentation de Google énumère trois conditions pour le message de vérification. Il doit :

1. ne pas dépasser 140 octets ;
2. contenir un code à usage unique que votre application renvoie à votre serveur pour terminer la vérification ;
3. inclure une chaîne de hash de 11 caractères qui identifie votre application.

Tout le reste du message est libre. Le déroulement est le suivant : l'application lance l'API pendant qu'elle demande le SMS, votre serveur envoie le message, Play services l'oriente vers votre application, qui en extrait le code et le renvoie à votre serveur pour validation. Votre serveur doit aussi vérifier que le code est valide et n'a pas expiré.

### Comment obtenir le hash de 11 caractères ?

Google indique que le hash correspond aux 11 premiers caractères d'un hash encodé en base64. Il est calculé à partir du certificat de signature de votre application, avec les étapes keytool de la documentation de Google. Si Google Play gère la signature de votre application, importez ce certificat pour le calcul. Si vous signez vous-même, utilisez votre keystore de production et l'alias de votre certificat.

Comme le hash dépend du certificat de signature, une version signée avec une autre clé aura un hash différent. Gardez-le en tête quand vous testez des versions de débogage avec des messages de production, et vérifiez le hash de chaque configuration de signature que vous livrez.

### Et si je préfère ne pas gérer de hash ?

Utilisez l'API SMS User Consent. D'après la documentation de Google, l'utilisateur est sollicité avant le partage d'un message, puis le message entier devient disponible pour votre application, qui en extrait le code. Selon la page de Google, le message doit contenir une chaîne alphanumérique de 4 à 10 caractères comportant au moins un chiffre, l'écoute dure cinq minutes, et vous pouvez en option restreindre à un expéditeur. Lancez l'API avant l'arrivée du SMS : les messages reçus plus tôt ne sont pas transmis.

## Comment iOS et iPadOS remplissent-ils un code automatiquement ?

iOS détecte un SMS contenant un code à usage unique et le propose dans les champs qui se déclarent comme champs de code. Apple documente deux étapes de votre côté.

1. Définissez le type de contenu du champ. Dans UIKit, réglez `textContentType` sur `.oneTimeCode`. Dans SwiftUI, utilisez le modificateur `textContentType` avec la même valeur. Pour un site web, ajoutez `autocomplete="one-time-code"` au champ.
2. Facultatif : liez le code à votre domaine. Depuis iOS 14 et macOS Big Sur, Apple permet de formater le SMS pour que la saisie automatique ne propose le code que si le site Safari ou le domaine associé de l'application correspond. Il est ainsi plus difficile de pousser quelqu'un à saisir un code sur un site d'hameçonnage.

Le format documenté par Apple : un texte quelconque d'abord, puis une dernière ligne avec votre domaine précédé de `@`, une espace, et le code précédé de `#`.

```text
Your Example code is 123456.

@example.com #123456
```

Pour une application, ajoutez le domaine lié aux domaines associés de l'application, sinon la saisie automatique ne le proposera pas. Les codes standards sans liaison sont toujours détectés, mais Apple recommande le format lié au domaine.

## Comment fonctionne la saisie automatique d'OTP sur le Web ?

Ajoutez d'abord l'attribut, puis le JavaScript pour les navigateurs qui le prennent en charge.

```html
<input type="text" inputmode="numeric"
       autocomplete="one-time-code" name="otp" />
```

La documentation de Chrome recommande l'attribut pour la compatibilité entre navigateurs, et précise que Safari l'utilise pour suggérer le code d'un SMS correctement formaté, même s'il n'a pas l'API JavaScript WebOTP.

Pour Chrome sur Android, appelez WebOTP avec le transport `sms`. L'API exige une origine sécurisée (HTTPS), et un `AbortController` permet d'annuler la requête en attente si l'utilisateur saisit le code à la main.

```js
if ("OTPCredential" in window) {
  const ac = new AbortController();
  const form = document.querySelector("form");
  const input = document.querySelector("input[autocomplete=one-time-code]");

  form.addEventListener("submit", () => ac.abort());

  navigator.credentials
    .get({ otp: { transport: ["sms"] }, signal: ac.signal })
    .then((otp) => {
      input.value = otp.code;
      form.submit();
    })
    .catch(() => {}); // user dismissed, or no matching SMS
}
```

Le SMS doit suivre le format lié à l'origine décrit dans la spécification WICG et le guide de Chrome : un code de quatre à dix caractères alphanumériques avec au moins un chiffre avant la dernière ligne, puis une dernière ligne qui commence par `@`, l'hôte, une seule espace, puis `#` suivi du code. L'hôte ne doit contenir aucun espace.

## Un seul SMS peut-il fonctionner sur Android, iOS et le Web ?

Souvent oui, car les règles sont compatibles. Placez d'abord le texte lisible, le hash Android sur une ligne au-dessus de la fin, et la ligne liée au domaine en dernier. Cette disposition découle des règles documentées, pas d'une garantie d'un éditeur : testez-la.

```text
Your Example code is 483921. Do not share it.
Ab3dE+9xYz1
@example.com #483921
```

Pourquoi cet ordre : Apple et la spécification Web veulent tous deux le domaine et le code sur la dernière ligne. Google exige le hash de 11 caractères quelque part dans le message mais, dans la page que nous avons consultée, n'en fixe pas la position. L'exemple ci-dessus fait 78 octets en caractères latins simples, bien en deçà de la limite de 140 octets.

Liste de contrôle avant la mise en production :

1. Le code est un jeton unique, bien séparé des autres chiffres du texte.
2. Le domaine de la dernière ligne correspond au site et au domaine associé de l'application.
3. La longueur totale reste dans les 140 octets pour la variante Retriever.
4. Le hash correspond à la clé de signature de la version testée.
5. Test effectué sur un téléphone de chaque plateforme, avec les opérateurs par lesquels vous envoyez réellement.

## Et pour l'arabe et le texte Unicode ?

Gardez le code et les deux éléments lisibles par machine en caractères simples. La limite de Google est en octets, et un SMS Unicode contient bien moins de caractères qu'un SMS GSM-7 : 70 contre 160 dans un seul segment (voir [limites de caractères SMS et Unicode](/fr/blog/sms-character-limits-unicode-arabic/)). Une phrase en arabe consomme donc vite le budget, et un seul caractère hors GSM fait passer tout le message en Unicode.

Approche sûre : le code en chiffres latins, `@domaine #code` en ASCII, et un texte arabe court. Nous n'avons trouvé aucune documentation officielle décrivant la saisie automatique de codes écrits avec d'autres systèmes de chiffres ; nous ne l'abordons donc pas et recommandons de tester avant usage.

## Comment les modèles d'authentification WhatsApp gèrent-ils la saisie automatique ?

Les modèles d'authentification de Meta proposent trois styles de bouton, chacun avec un corps de texte fixe de la forme `<code> is your verification code.`

| Bouton | Ce qu'il fait | Remarques |
|---|---|---|
| Copier le code | L'utilisateur touche pour copier le code, puis le colle dans votre application | Fonctionne sans modifier l'application |
| Saisie automatique one-tap | Sur Android, un bouton ouvre votre application et lui transmet le code | Exige `package_name` et `signature_hash` dans `supported_apps` |
| Zero-tap | Aucun bouton ; le client WhatsApp diffuse le code à votre application | Android uniquement ; vous devez accepter les conditions zero-tap de Meta |

La documentation de Meta précise aussi que, sur iOS 26 et versions ultérieures, les suggestions du clavier offrent la saisie automatique sans intégration, et que les utilisateurs des plateformes sans zero-tap reçoivent un bouton copier le code. Vous pouvez définir une expiration avec `code_expiration_minutes`, et l'API d'aperçu accepte des valeurs de 1 à 90 minutes. Comparez les canaux dans [OTP WhatsApp ou OTP SMS](/fr/blog/whatsapp-otp-vs-sms-otp/).

## Exemple concret : la connexion d'une application de VTC

« Qafila Rides » (fictif) possède une application Android, une application iOS et un site mobile à `qafila.example`.

1. L'application Android lance SMS Retriever quand l'utilisateur touche « Envoyer le code ».
2. Le back-end génère un code à six chiffres, valable quelques minutes, et envoie le message de trois lignes ci-dessus via l'API SMS.
3. Android remet le message à l'application. iOS propose le code au-dessus du clavier. Sur le site mobile, Safari le suggère et Chrome le remplit via WebOTP.
4. Le serveur valide le code une seule fois, rejette la réutilisation et les codes expirés, et limite le nombre de demandes.
5. Si le SMS n'est pas confirmé dans un court délai, le back-end propose un modèle d'authentification WhatsApp comme second chemin.

## Quelles sont les erreurs courantes ?

- **Code qui n'est pas seul.** Des chiffres supplémentaires (téléphone, prix, date) à côté du code perturbent la détection. Un seul code par message.
- **Mauvais hash.** Le hash suit le certificat de signature. Un hash issu d'une clé de débogage ne correspondra pas à une version de production.
- **Domaine non concordant.** `@example.com` doit correspondre au site ou au domaine associé, sinon iOS et WebOTP ne proposeront pas le code.
- **Dernière ligne cassée.** Tout ce qui suit `#code`, une espace manquante ou un espace dans le domaine brise le format.
- **Message trop long ou trop chargé en Unicode,** ce qui dépasse la limite Retriever de 140 octets.
- **Écoute trop tardive.** L'API User Consent ignore les messages reçus avant son démarrage.
- **Prendre la saisie automatique pour de la sécurité.** C'est un confort. Validez toujours côté serveur, faites expirer les codes, limitez les tentatives et surveillez la [fraude par SMS pumping](/fr/blog/sms-pumping-fraud-prevention/).
- **Portée.** Ce guide couvre le comportement documenté au moment de la rédaction. Les règles des plateformes évoluent : vérifiez les sources citées avant la mise en production.

Pour la rédaction des messages et le choix de l'expiration, consultez notre [guide des messages OTP et d'authentification](/fr/blog/otp-authentication-messages-guide/).

## Comment OmniChannels.ai vous aide

OmniChannels.ai envoie des OTP par SMS et WhatsApp via la connectivité opérateur directe de BroadNet : vous maîtrisez donc le texte exact du message dont dépend votre format de saisie automatique. Les modèles WhatsApp couvrent l'authentification par copie du code, one-tap et zero-tap. Le basculement entre canaux, par exemple WhatsApp puis SMS, se configure par cas d'usage, et les statuts de livraison arrivent dans un seul format de webhook. Consultez la [documentation de l'API SMS](/developers/sms/), la [documentation de l'API WhatsApp](/developers/whatsapp/) et la [solution OTP](/fr/solutions/otp-notifications/).
