Lewati ke konten
OmniChannels.ai

Autofill OTP SMS: Format untuk Android, iOS, dan Web

Cara kerja autofill OTP di Android, iOS, dan web: hash SMS Retriever, kode terikat domain, WebOTP, satu format pesan untuk ketiganya, dan autofill WhatsApp.

Diperbarui 9 menit baca

Oleh OmniChannels.ai Editorial Team · Ditinjau oleh BroadNet Messaging Solutions Team

Integrasi

Jawaban singkat

Autofill OTP dibangun dari tiga mekanisme terpisah. Aplikasi Android memakai SMS Retriever API, yang memerlukan app hash 11 karakter dalam pesan maksimal 140 byte, atau SMS User Consent API yang tidak memerlukan hash. iOS menawarkan kode dari SMS itu sendiri, dan kode terikat domain diakhiri baris seperti @example.com #123456. Situs web memakai autocomplete="one-time-code" dan WebOTP API, yang membaca baris terakhir yang sama.

Di halaman ini
  1. Bagaimana autofill OTP bekerja di setiap platform?
  2. Bagaimana SMS Retriever API Android bekerja?
  3. Bagaimana iOS dan iPadOS mengisi kode otomatis?
  4. Bagaimana autofill OTP bekerja di web?
  5. Bisakah satu SMS bekerja di Android, iOS, dan web?
  6. Bagaimana dengan teks Arab dan Unicode?
  7. Bagaimana template autentikasi WhatsApp menangani autofill?
  8. Contoh kasus: login aplikasi ride-hailing
  9. Apa kesalahan yang umum terjadi?
  10. Bagaimana OmniChannels.ai membantu

Poin penting

  • Android punya dua API: SMS Retriever (pesan maksimal 140 byte berisi kode sekali pakai dan app hash 11 karakter) dan SMS User Consent (pengguna menyetujui berbagi satu pesan).
  • Di iOS, atur kolom dengan tipe konten one-time-code; kode terikat domain diakhiri baris terakhir berisi @domain, spasi, dan #kode, didukung mulai iOS 14.
  • Di web, tambahkan autocomplete="one-time-code" pada input dan panggil navigator.credentials.get dengan transport sms untuk Chrome di Android; Safari memakai atribut tersebut.
  • Satu pesan bisa memenuhi ketiganya jika app hash berada di atas baris terakhir @domain #kode, tetapi uji di perangkat dan operator yang sebenarnya.
  • Template autentikasi WhatsApp menyediakan tombol salin kode, satu ketuk, dan nol ketuk; nol ketuk hanya untuk Android.

Panduan ini untuk developer dan product owner yang ingin kode verifikasi terisi sendiri di Android, iPhone, dan web. Panduan ini menjelaskan apa yang dibutuhkan setiap platform dari SMS, cara menulis satu pesan yang melayani ketiganya, bagaimana template autentikasi WhatsApp menangani autofill, dan apa yang biasanya bermasalah.

Bagaimana autofill OTP bekerja di setiap platform?

Setiap platform membaca SMS dengan cara berbeda, jadi tidak ada satu sakelar tunggal. Android memerlukan app hash atau persetujuan pengguna, iOS mendeteksi kode sendiri, dan browser membaca baris terakhir yang diformat.

Platform Mekanisme Yang dibutuhkan SMS Tindakan pengguna
Aplikasi Android SMS Retriever API Maksimal 140 byte, kode sekali pakai, dan app hash 11 karakter Tidak ada
Aplikasi Android SMS User Consent API Pesan berisi kode sekali pakai Menyetujui berbagi satu pesan
Aplikasi iOS dan iPadOS AutoFill kode keamanan Kode yang dapat dideteksi iOS; format terikat domain disarankan Mengetuk saran
Web (Safari) autocomplete="one-time-code" Baris terakhir terikat domain Mengetuk saran
Web (Chrome di Android) WebOTP API Baris terakhir @host #code Mengonfirmasi permintaan

Semuanya hanya berguna jika SMS Anda sampai. Jika tidak, lihat OTP tidak diterima.

Bagaimana SMS Retriever API Android bekerja?

Aplikasi Anda meminta Google Play services untuk mendengarkan satu pesan, dan pesan itu membawa hash yang mengidentifikasi aplikasi Anda. Tidak diperlukan izin aplikasi tambahan.

Dokumentasi Google mencantumkan tiga persyaratan untuk pesan verifikasi. Pesan harus:

  1. tidak lebih dari 140 byte;
  2. berisi kode sekali pakai yang dikirim kembali aplikasi Anda ke server untuk menyelesaikan verifikasi;
  3. menyertakan string hash 11 karakter yang mengidentifikasi aplikasi Anda.

Hal lain dalam pesan terserah Anda. Alurnya: aplikasi memulai API saat meminta SMS, server Anda mengirim pesan, Play services mengarahkannya ke aplikasi, lalu aplikasi mengambil kode dan mengirimkannya ke server untuk divalidasi. Server Anda juga harus memeriksa bahwa kode valid dan belum kedaluwarsa.

Bagaimana cara mendapatkan hash 11 karakter?

Menurut Google, hash adalah 11 karakter pertama dari hash yang dikodekan base64. Hash dihitung dari sertifikat penandatanganan aplikasi Anda, dengan langkah keytool di dokumentasi Google. Jika Google Play mengelola penandatanganan aplikasi Anda, impor sertifikat itu untuk perhitungan. Jika Anda menandatangani sendiri, gunakan keystore produksi dan alias sertifikat Anda.

Karena hash bergantung pada sertifikat penandatanganan, build yang ditandatangani dengan kunci lain akan memiliki hash berbeda. Perhitungkan hal ini saat menguji build debug dengan pesan produksi, dan pastikan hash untuk setiap konfigurasi penandatanganan yang Anda rilis.

Bagaimana jika saya tidak ingin mengelola hash?

Gunakan SMS User Consent API. Dokumentasi Google menyebutkan pengguna ditanya sebelum pesan dibagikan, lalu seluruh pesan tersedia bagi aplikasi Anda yang mengurai kodenya. Menurut halaman Google, pesan harus berisi string alfanumerik 4-10 karakter dengan sedikitnya satu angka, listener berlaku lima menit, dan Anda dapat membatasi pengirim secara opsional. Mulai API sebelum SMS tiba: pesan yang diterima sebelumnya tidak diteruskan.

Bagaimana iOS dan iPadOS mengisi kode otomatis?

iOS mendeteksi SMS yang berisi kode sekali pakai dan menawarkannya di kolom yang menyatakan diri sebagai kolom kode. Apple mendokumentasikan dua langkah untuk Anda.

  1. Atur tipe konten kolom. Di UIKit, atur textContentType ke .oneTimeCode. Di SwiftUI, gunakan modifier textContentType dengan nilai yang sama. Untuk situs web, atur autocomplete="one-time-code" pada input.
  2. Secara opsional, ikat kode ke domain Anda. Mulai iOS 14 dan macOS Big Sur, Apple memungkinkan Anda memformat SMS agar AutoFill hanya menyarankan kode jika situs di Safari atau associated domain aplikasi cocok. Ini mempersulit upaya menipu seseorang agar memasukkan kode di situs phishing.

Formatnya, seperti didokumentasikan Apple: teks apa pun lebih dulu, lalu baris terakhir berisi domain Anda berawalan @, spasi, dan kode berawalan #.

Your Example code is 123456.

@example.com #123456

Untuk aplikasi, tambahkan domain terikat ke associated domains aplikasi, atau AutoFill tidak akan menyarankannya. Kode standar tanpa pengikatan tetap terdeteksi, tetapi Apple menyarankan format terikat domain.

Bagaimana autofill OTP bekerja di web?

Tambahkan atributnya dulu, lalu JavaScript untuk browser yang mendukungnya.

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

Dokumentasi Chrome menyarankan atribut ini demi kompatibilitas lintas browser, dan menyebutkan Safari memakainya untuk menyarankan kode dari SMS yang diformat dengan benar meskipun tidak memiliki JavaScript API WebOTP.

Untuk Chrome di Android, panggil WebOTP dengan transport sms. API ini memerlukan origin aman (HTTPS), dan AbortController memungkinkan Anda membatalkan permintaan yang tertunda jika pengguna mengetik kode sendiri.

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
}

SMS harus mengikuti format terikat origin dalam spesifikasi WICG dan panduan Chrome: kode empat sampai sepuluh karakter alfanumerik dengan sedikitnya satu angka sebelum baris terakhir, lalu baris terakhir yang diawali @, host, satu spasi, dan # diikuti kode. Host tidak boleh mengandung spasi.

Bisakah satu SMS bekerja di Android, iOS, dan web?

Sering bisa, karena aturannya kompatibel. Letakkan teks yang mudah dibaca lebih dulu, hash Android di baris di atas bagian akhir, dan baris terikat domain paling akhir. Susunan ini dibuat dari aturan yang terdokumentasi, bukan jaminan vendor, jadi ujilah.

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

Alasan urutan ini: Apple dan spesifikasi web sama-sama menginginkan domain dan kode di baris terakhir. Google mewajibkan hash 11 karakter di suatu tempat dalam pesan, tetapi pada halaman yang kami periksa tidak menetapkan posisinya. Contoh di atas berukuran 78 byte dalam karakter Latin biasa, jauh di dalam batas 140 byte.

Daftar periksa sebelum rilis:

  1. Kode berupa satu token, terpisah jelas dari angka lain dalam teks.
  2. Domain di baris terakhir cocok dengan situs dan associated domain aplikasi.
  3. Panjang total dalam 140 byte untuk varian Retriever.
  4. Hash cocok dengan kunci penandatanganan build yang diuji.
  5. Diuji di ponsel dari setiap platform, pada operator yang benar-benar Anda gunakan untuk mengirim.

Bagaimana dengan teks Arab dan Unicode?

Pertahankan kode dan dua bagian yang dapat dibaca mesin dalam teks polos. Batas Google dalam byte, dan SMS Unicode memuat jauh lebih sedikit karakter daripada GSM-7: 70 berbanding 160 dalam satu segmen (lihat batas karakter SMS dan Unicode). Kalimat Arab cepat menghabiskan jatah itu, dan satu karakter non-GSM saja mengubah seluruh pesan menjadi Unicode.

Pendekatan aman: tulis kode dengan angka Latin, pertahankan @domain #code dalam ASCII, dan buat teks Arab tetap singkat. Kami tidak menemukan dokumentasi resmi tentang autofill kode yang ditulis dengan sistem angka lain, jadi kami tidak membahasnya dan menyarankan pengujian sebelum dipakai.

Bagaimana template autentikasi WhatsApp menangani autofill?

Template autentikasi Meta hadir dengan tiga gaya tombol, masing-masing dengan teks isi tetap berbentuk <code> is your verification code.

Tombol Fungsinya Catatan
Salin kode Pengguna mengetuk untuk menyalin kode, lalu menempelkannya di aplikasi Anda Berfungsi tanpa perubahan aplikasi
Autofill satu ketuk Di Android, tombol membuka aplikasi Anda dan mengirimkan kode Memerlukan package_name dan signature_hash di supported_apps
Nol ketuk Tanpa tombol; klien WhatsApp menyiarkan kode ke aplikasi Anda Hanya Android; Anda harus menerima ketentuan nol ketuk Meta

Dokumentasi Meta juga mencatat bahwa di iOS 26 ke atas, saran keyboard menyediakan autofill tanpa integrasi, dan pengguna di platform tanpa nol ketuk menerima tombol salin kode. Anda dapat mengatur masa berlaku dengan code_expiration_minutes, dan API pratinjau menerima nilai 1 sampai 90 menit. Bandingkan kedua kanal di OTP WhatsApp vs OTP SMS.

Contoh kasus: login aplikasi ride-hailing

"Qafila Rides" (fiktif) memiliki aplikasi Android, aplikasi iOS, dan situs mobile di qafila.example.

  1. Aplikasi Android memulai SMS Retriever saat pengguna mengetuk "Kirim kode".
  2. Backend membuat kode enam digit yang berlaku beberapa menit, lalu mengirim pesan tiga baris di atas lewat SMS API.
  3. Android menyerahkan pesan ke aplikasi. iOS menawarkan kode di atas keyboard. Di situs mobile, Safari menyarankannya dan Chrome mengisinya lewat WebOTP.
  4. Server memvalidasi kode sekali saja, menolak pemakaian ulang dan kode kedaluwarsa, serta membatasi laju permintaan.
  5. Jika SMS tidak terkonfirmasi dalam batas waktu singkat, backend menawarkan template autentikasi WhatsApp sebagai jalur kedua.

Apa kesalahan yang umum terjadi?

  • Kode tidak berdiri sendiri. Angka tambahan (telepon, harga, tanggal) di samping kode mengacaukan deteksi. Gunakan satu kode per pesan.
  • Hash salah. Hash mengikuti sertifikat penandatanganan. Hash dari kunci debug tidak cocok dengan build produksi.
  • Domain tidak cocok. @example.com harus cocok dengan situs atau associated domain, jika tidak iOS dan WebOTP tidak akan menawarkan kode.
  • Baris terakhir rusak. Apa pun setelah #code, spasi yang hilang, atau spasi di dalam domain merusak format.
  • Pesan terlalu panjang atau banyak Unicode, sehingga melebihi batas 140 byte Retriever.
  • Mendengarkan terlambat. User Consent API mengabaikan pesan yang diterima sebelum API dimulai.
  • Menjadikan autofill sebagai keamanan. Autofill hanyalah kemudahan. Tetap validasi di sisi server, kedaluwarsakan kode, batasi percobaan, dan waspadai penipuan SMS pumping.
  • Cakupan. Panduan ini membahas perilaku yang terdokumentasi saat penulisan. Aturan platform berubah, jadi periksa sumber yang ditautkan sebelum rilis.

Untuk pilihan kata pesan dan masa berlaku, lihat panduan pesan OTP dan autentikasi.

Bagaimana OmniChannels.ai membantu

OmniChannels.ai mengirim OTP lewat SMS dan WhatsApp melalui konektivitas operator langsung milik BroadNet, sehingga Anda dapat mengontrol teks pesan persis yang menjadi dasar format autofill Anda. Template WhatsApp mencakup autentikasi salin kode, satu ketuk, dan nol ketuk. Fallback antarkanal, misalnya WhatsApp lalu SMS, dikonfigurasi per kasus penggunaan, dan status pengiriman tiba dalam satu format webhook. Lihat dokumentasi SMS API, dokumentasi WhatsApp API, dan solusi OTP.

Pertanyaan yang sering diajukan

Apa format pesan SMS Retriever API?

Dokumentasi Google menyebutkan pesan tidak boleh lebih dari 140 byte, berisi kode sekali pakai yang dikirim kembali aplikasi Anda ke server, dan menyertakan hash 11 karakter yang mengidentifikasi aplikasi Anda. Selebihnya isi pesan terserah Anda. Hash membuat Google Play services dapat mengarahkan pesan ke aplikasi yang tepat tanpa izin tambahan.

Apakah saya perlu app hash untuk SMS User Consent API?

Ikhtisar SMS User Consent API dari Google tidak menjelaskan app hash. Sebagai gantinya, pengguna melihat permintaan dan memilih apakah akan membagikan pesan ke aplikasi Anda. Aplikasi harus mulai mendengarkan sebelum SMS tiba, lalu mengambil kode dari teks pesan itu sendiri.

Apa itu kode SMS terikat domain di iOS?

Itu SMS yang baris terakhirnya mengikat kode ke domain Anda: domain berawalan @, spasi, lalu kode berawalan #. Apple mendokumentasikannya untuk iOS 14 ke atas. AutoFill hanya menyarankan kode jika situs di Safari, atau associated domain aplikasi, cocok dengan domain di pesan.

Bagaimana WebOTP membaca SMS?

Halaman memanggil navigator.credentials.get dengan opsi otp dan transport sms. Saat pesan masuk dengan baris terakhir @host #kode dan host cocok dengan origin halaman, browser meminta konfirmasi pengguna lalu mengembalikan kodenya. Diperlukan HTTPS, dan browser yang didokumentasikan adalah Chrome di Android.

Mengapa OTP saya tidak terisi otomatis?

Penyebab umumnya: kode tidak terlihat jelas sebagai kode, app hash di Android salah atau tidak ada, baris terakhir tidak mengikuti format @domain #kode, domain tidak cocok dengan halaman, atau teks membuat pesan melewati batas byte. Periksa satu per satu terhadap aturan format, lalu uji dengan ponsel sungguhan.

Apakah WhatsApp mendukung autofill OTP?

Ya. Template autentikasi Meta mendukung tombol salin kode, tombol autofill satu ketuk, dan opsi nol ketuk. Satu ketuk dan nol ketuk memerlukan nama paket Android dan hash tanda tangan Anda. Nol ketuk hanya didukung di Android; pengguna di platform lain menerima tombol salin kode.

Sumber

  1. SMS Retriever API: perform SMS verification — Google for Developers
  2. SMS User Consent API: request a one-time code — Google for Developers
  3. Enabling AutoFill for domain-bound SMS codes — Apple Developer
  4. Verify phone numbers on the web with the WebOTP API — Chrome for Developers
  5. WebOTP API — WICG specification
  6. Authentication templates — WhatsApp Business Platform, Meta for Developers