انتقل إلى المحتوى
OmniChannels.ai
القائمة

الملء التلقائي لرمز OTP: صيغ أندرويد وiOS والويب

كيف يعمل الملء التلقائي لرمز OTP على أندرويد وiOS والويب: هاش SMS Retriever، والرموز المرتبطة بنطاق، وWebOTP، ورسالة واحدة تناسب الثلاثة، وملء واتساب التلقائي.

آخر تحديث 9 دقائق للقراءة

بقلم OmniChannels.ai Editorial Team · مراجعة BroadNet Messaging Solutions Team

التكامل

الإجابة المختصرة

يقوم الملء التلقائي لرمز OTP على ثلاث آليات منفصلة. تستخدم تطبيقات أندرويد واجهة SMS Retriever API التي تحتاج إلى هاش للتطبيق من 11 حرفًا في رسالة لا تتجاوز 140 بايت، أو واجهة SMS User Consent API التي لا تحتاج هاش. يقترح iOS الرموز من الرسالة نفسها، وتنتهي الرموز المرتبطة بنطاق بسطر مثل @example.com #123456. أما المواقع فتستخدم autocomplete="one-time-code" وواجهة WebOTP، وكلتاهما تقرأ السطر الأخير نفسه.

في هذه الصفحة
  1. كيف يعمل الملء التلقائي لرمز OTP على كل منصة؟
  2. كيف تعمل SMS Retriever API في أندرويد؟
  3. كيف يملأ iOS وiPadOS الرمز تلقائيًا؟
  4. كيف يعمل الملء التلقائي لرمز OTP في الويب؟
  5. هل تعمل رسالة واحدة على أندرويد وiOS والويب؟
  6. ماذا عن النص العربي وUnicode؟
  7. كيف تتعامل قوالب المصادقة في واتساب مع الملء التلقائي؟
  8. مثال تطبيقي: تسجيل الدخول إلى تطبيق لطلب السيارات
  9. ما الأخطاء الشائعة؟
  10. كيف تساعدك OmniChannels.ai

أهم النقاط

  • في أندرويد واجهتان: SMS Retriever (رسالة لا تتجاوز 140 بايت فيها رمز لمرة واحدة وهاش تطبيق من 11 حرفًا) وSMS User Consent (يوافق المستخدم على مشاركة رسالة واحدة).
  • في iOS اضبط الحقل على نوع المحتوى one-time-code؛ وتنتهي الرموز المرتبطة بنطاق بسطر أخير من @domain ثم مسافة ثم #code، وهي مدعومة منذ iOS 14.
  • في الويب أضف autocomplete="one-time-code" إلى حقل الإدخال، واستدعِ navigator.credentials.get بوسيلة نقل sms لمتصفح Chrome على أندرويد؛ أما Safari فيعتمد على السمة.
  • يمكن لرسالة واحدة أن تلبّي الثلاثة إذا وُضع هاش التطبيق فوق سطر أخير هو @domain #code، لكن اختبرها على أجهزة ومشغّلين حقيقيين.
  • تقدّم قوالب المصادقة في واتساب أزرار نسخ الرمز وبلمسة واحدة وبلا لمس؛ والخيار بلا لمس لأندرويد فقط.

هذا الدليل موجّه للمطورين وأصحاب المنتجات الذين يريدون أن يُملأ رمز التحقق تلقائيًا على أندرويد وiPhone والويب. يشرح ما تطلبه كل منصة من الرسالة، وكيف تكتب رسالة واحدة تخدم المنصات الثلاث، وكيف تتعامل قوالب المصادقة في واتساب مع الملء التلقائي، وما الذي يتعطل عادةً.

كيف يعمل الملء التلقائي لرمز OTP على كل منصة؟

تقرأ كل منصة الرسالة بطريقة مختلفة، فلا يوجد مفتاح واحد يفعّل كل شيء. يحتاج أندرويد إلى هاش للتطبيق أو إلى موافقة المستخدم، ويكتشف iOS الرموز بنفسه، وتقرأ المتصفحات سطرًا أخيرًا منسقًا.

المنصة الآلية ما تحتاجه الرسالة إجراء المستخدم
تطبيق أندرويد SMS Retriever API 140 بايت كحد أقصى، ورمز لمرة واحدة، وهاش تطبيق من 11 حرفًا لا شيء
تطبيق أندرويد SMS User Consent API رسالة تحتوي رمزًا لمرة واحدة يوافق على مشاركة رسالة واحدة
تطبيق iOS وiPadOS Security code AutoFill رمز يستطيع iOS اكتشافه؛ يُنصح بالصيغة المرتبطة بنطاق يلمس الاقتراح
الويب (Safari) autocomplete="one-time-code" سطر أخير مرتبط بنطاق يلمس الاقتراح
الويب (Chrome على أندرويد) WebOTP API السطر الأخير @host #code يؤكد النافذة

كل ذلك لا يفيد إلا إذا وصلت الرسالة. وإن لم تصل فراجع عدم وصول رمز OTP.

كيف تعمل SMS Retriever API في أندرويد؟

يطلب تطبيقك من خدمات Google Play الاستماع إلى رسالة واحدة، وتحمل الرسالة هاشًا يعرّف تطبيقك. لا يلزم إذن إضافي للتطبيق.

تذكر وثائق Google ثلاثة شروط لرسالة التحقق. يجب أن تكون الرسالة:

  1. لا تزيد على 140 بايت؛
  2. تحتوي رمزًا لمرة واحدة يعيده تطبيقك إلى خادمك لإتمام التحقق؛
  3. تتضمن سلسلة هاش من 11 حرفًا تعرّف تطبيقك.

وكل ما سوى ذلك متروك لك. تسير العملية هكذا: يشغّل التطبيق الواجهة أثناء طلبه الرسالة، ويرسل خادمك الرسالة، وتوجّهها خدمات Play إلى تطبيقك، فيستخرج التطبيق الرمز ويعيده إلى خادمك للتحقق منه. وينبغي أن يتأكد خادمك أيضًا أن الرمز صالح ولم تنتهِ مدته.

كيف أحصل على الهاش المكوّن من 11 حرفًا؟

تقول Google إن الهاش هو أول 11 حرفًا من هاش مشفّر بـ base64. ويُحسب من شهادة توقيع تطبيقك باتباع خطوات keytool في وثائق Google. إذا كانت Google Play تدير توقيع تطبيقك فاستورد تلك الشهادة للحساب. وإذا كنت توقّع بنفسك فاستخدم مخزن المفاتيح الإنتاجي واسم الشهادة المستعار.

وبما أن الهاش يعتمد على شهادة التوقيع، فإن إصدارًا موقّعًا بمفتاح آخر سيكون هاشه مختلفًا. احسب لذلك حسابًا عند اختبار إصدارات التطوير مع رسائل الإنتاج، وتأكد من الهاش لكل إعداد توقيع تطلقه.

وماذا لو لم أرد إدارة هاش؟

استخدم SMS User Consent API. تقول وثائق Google إن المستخدم يُسأل قبل مشاركة الرسالة، ثم تصبح الرسالة كاملة متاحة لتطبيقك فيستخرج منها الرمز. وبحسب صفحة Google يجب أن تحتوي الرسالة سلسلة أبجدية رقمية من 4 إلى 10 أحرف فيها رقم واحد على الأقل، ومدة الاستماع خمس دقائق، ويمكنك اختياريًا حصرها بمرسل معيّن. ابدأ الواجهة قبل وصول الرسالة: فالرسائل التي وصلت قبل ذلك لا تُمرَّر.

كيف يملأ iOS وiPadOS الرمز تلقائيًا؟

يكتشف iOS الرسالة التي تحتوي رمزًا لمرة واحدة ويعرضه في الحقول التي تعرّف نفسها بأنها حقول رموز. وتوثّق Apple خطوتين عليك.

  1. اضبط نوع محتوى الحقل. في UIKit اضبط textContentType على .oneTimeCode. وفي SwiftUI استخدم المعدّل textContentType بالقيمة نفسها. وللموقع اضبط autocomplete="one-time-code" على حقل الإدخال.
  2. اربط الرمز بنطاقك اختياريًا. منذ iOS 14 وmacOS Big Sur تتيح Apple تنسيق الرسالة بحيث يقترح AutoFill الرمز فقط عندما يطابق موقع Safari أو النطاق المرتبط بالتطبيق. وهذا يصعّب خداع شخص ليدخل الرمز في موقع تصيّد.

والصيغة كما توثّقها Apple: أي نص أولًا، ثم سطر أخير فيه نطاقك مسبوقًا بـ @، ثم مسافة، ثم الرمز مسبوقًا بـ #.

Your Example code is 123456.

@example.com #123456

في التطبيق أضف النطاق المرتبط إلى النطاقات المرتبطة بالتطبيق (associated domains)، وإلا فلن يقترح AutoFill الرمز. تظل الرموز العادية غير المرتبطة بنطاق قابلة للاكتشاف، لكن Apple توصي بالصيغة المرتبطة بنطاق.

كيف يعمل الملء التلقائي لرمز OTP في الويب؟

أضف السمة أولًا، ثم كود JavaScript للمتصفحات التي تدعمه.

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

توصي وثائق Chrome بالسمة لتحقيق التوافق بين المتصفحات، وتقول إن Safari يستخدمها لاقتراح الرمز من رسالة منسقة بشكل صحيح رغم أنه يفتقر إلى واجهة WebOTP في JavaScript.

وفي Chrome على أندرويد استدعِ WebOTP بوسيلة النقل sms. تحتاج الواجهة إلى أصل آمن (HTTPS)، ويتيح AbortController إلغاء الطلب المعلّق إذا كتب المستخدم الرمز بيده.

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
}

يجب أن تتبع الرسالة الصيغة المرتبطة بالأصل في مواصفة WICG ودليل Chrome: رمز من أربعة إلى عشرة أحرف أبجدية رقمية فيه رقم واحد على الأقل قبل السطر الأخير، ثم سطر أخير يبدأ بـ @ ثم المضيف ثم مسافة واحدة ثم # والرمز. ويجب ألا يحتوي المضيف على أي مسافة.

هل تعمل رسالة واحدة على أندرويد وiOS والويب؟

غالبًا نعم، لأن القواعد متوافقة. ضع النص المقروء أولًا، وهاش أندرويد في سطر فوق النهاية، والسطر المرتبط بالنطاق أخيرًا. هذا التنسيق مبني على القواعد الموثّقة وليس ضمانًا من أي جهة، فاختبره.

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

سبب هذا الترتيب: تريد Apple ومواصفة الويب النطاق والرمز في السطر الأخير. وتشترط Google وجود الهاش المكوّن من 11 حرفًا في مكان ما من الرسالة، لكنها في الصفحة التي راجعناها لا تحدد موضعه. المثال أعلاه 78 بايت بأحرف لاتينية عادية، أي ضمن حد الـ 140 بايت بمسافة مريحة.

قائمة تحقق قبل الإطلاق:

  1. الرمز وحدة واحدة، ومفصول بوضوح عن أي أرقام أخرى في النص.
  2. النطاق في السطر الأخير يطابق الموقع والنطاق المرتبط بالتطبيق.
  3. الطول الكلي ضمن 140 بايت في صيغة Retriever.
  4. الهاش يطابق مفتاح توقيع الإصدار قيد الاختبار.
  5. الاختبار على جهاز من كل منصة، وعبر المشغّلين الذين ترسل عبرهم فعلًا.

ماذا عن النص العربي وUnicode؟

أبقِ الرمز والجزأين المقروءين آليًا بسيطين. حد Google بالبايتات، والرسالة بترميز Unicode تتسع لأحرف أقل بكثير من GSM-7: 70 مقابل 160 في الجزء الواحد (راجع حدود أحرف الرسائل النصية وUnicode). لذلك تستهلك الجملة العربية الميزانية بسرعة، وحرف واحد خارج GSM-7 يحوّل الرسالة كلها إلى Unicode.

النهج الآمن: اترك الرمز بأرقام لاتينية، واترك @domain #code بحروف ASCII، واجعل الصياغة العربية قصيرة. لم نجد وثائق رسمية تصف الملء التلقائي لرموز مكتوبة بأنظمة أرقام أخرى، فلا نتناول ذلك ونوصي بالاختبار قبل الاستخدام.

كيف تتعامل قوالب المصادقة في واتساب مع الملء التلقائي؟

تأتي قوالب المصادقة من Meta بثلاثة أنماط من الأزرار، لكل منها نص أساسي ثابت بصيغة <code> is your verification code.

الزر ما يفعله ملاحظات
نسخ الرمز يلمس المستخدم لنسخ الرمز ثم يلصقه في تطبيقك يعمل دون تغيير التطبيق
الملء التلقائي بلمسة واحدة في أندرويد يفتح الزر تطبيقك ويسلّمه الرمز يحتاج package_name وsignature_hash في supported_apps
بلا لمس لا زر؛ يبث عميل واتساب الرمز إلى تطبيقك أندرويد فقط؛ ويجب قبول شروط Meta للخيار بلا لمس

وتذكر وثائق Meta أيضًا أنه في iOS 26 وما بعده توفر اقتراحات لوحة المفاتيح الملء التلقائي دون أي تكامل، وأن المستخدمين على المنصات التي لا تدعم الخيار بلا لمس يتلقون زر نسخ الرمز. يمكنك ضبط مدة الصلاحية بـ code_expiration_minutes، وتقبل واجهة المعاينة قيمًا من 1 إلى 90 دقيقة. قارن القناتين في OTP واتساب مقابل OTP عبر SMS.

مثال تطبيقي: تسجيل الدخول إلى تطبيق لطلب السيارات

يملك "Qafila Rides" (مثال افتراضي) تطبيق أندرويد وتطبيق iOS وموقعًا للجوال على qafila.example.

  1. يشغّل تطبيق أندرويد SMS Retriever عندما يلمس المستخدم "إرسال الرمز".
  2. ينشئ الخادم رمزًا من ستة أرقام صالحًا لبضع دقائق، ويرسل الرسالة ذات الأسطر الثلاثة أعلاه عبر SMS API.
  3. يسلّم أندرويد الرسالة إلى التطبيق. ويعرض iOS الرمز فوق لوحة المفاتيح. وفي موقع الجوال يقترحه Safari ويملؤه Chrome عبر WebOTP.
  4. يتحقق الخادم من الرمز مرة واحدة، ويرفض إعادة استخدامه والرموز المنتهية، ويحدّ من معدل الطلبات.
  5. إذا لم يتأكد وصول الرسالة النصية خلال مهلة قصيرة، يعرض الخادم قالب مصادقة في واتساب مسارًا ثانيًا.

ما الأخطاء الشائعة؟

  • رمز غير منفرد. أرقام إضافية (هاتف أو سعر أو تاريخ) بجانب الرمز تربك الاكتشاف. استخدم رمزًا واحدًا لكل رسالة.
  • هاش خاطئ. يتبع الهاش شهادة التوقيع. وهاش من مفتاح تطوير لن يطابق إصدار الإنتاج.
  • عدم تطابق النطاق. يجب أن يطابق @example.com الموقع أو النطاق المرتبط، وإلا لن يعرض iOS وWebOTP الرمز.
  • سطر أخير مكسور. أي شيء بعد #code، أو مسافة ناقصة، أو فراغ داخل النطاق يكسر الصيغة.
  • رسالة طويلة جدًا أو كثيرة Unicode، فتتجاوز حد 140 بايت في Retriever.
  • الاستماع المتأخر. تتجاهل User Consent API الرسائل التي وصلت قبل بدئها.
  • اعتبار الملء التلقائي أمانًا. هو وسيلة راحة. تحقق من الرمز في الخادم، وأنهِ صلاحية الرموز، وحدّ المحاولات، وراقب احتيال SMS pumping.
  • النطاق. يغطي هذا الدليل السلوك الموثّق وقت الكتابة. قواعد المنصات تتغير، فراجع المصادر المرفقة قبل الإطلاق.

لصياغة الرسالة واختيار مدة الصلاحية راجع دليل رسائل OTP والمصادقة.

كيف تساعدك OmniChannels.ai

ترسل OmniChannels.ai رموز OTP عبر SMS وواتساب بالاتصال المباشر بالمشغّلين لدى BroadNet، فتتحكم في نص الرسالة الدقيق الذي تعتمد عليه صيغة الملء التلقائي. وتغطي قوالب واتساب المصادقة بنسخ الرمز وبلمسة واحدة وبلا لمس. ويُضبط التحويل بين القنوات، مثل واتساب ثم SMS، لكل حالة استخدام، وتصل حالات التسليم بصيغة webhook واحدة. راجع وثائق SMS API ووثائق WhatsApp API وحل OTP.

الأسئلة الشائعة

ما صيغة رسالة SMS Retriever API؟

تقول وثائق Google إن الرسالة يجب ألا تزيد على 140 بايت، وأن تحتوي رمزًا لمرة واحدة يعيده تطبيقك إلى خادمك، وأن تتضمن هاشًا من 11 حرفًا يعرّف تطبيقك. وما عدا ذلك فمحتوى الرسالة من اختيارك. يتيح الهاش لخدمات Google Play توجيه الرسالة إلى التطبيق الصحيح دون أذونات إضافية.

هل أحتاج هاش التطبيق مع SMS User Consent API؟

لا تصف نظرة Google العامة على SMS User Consent API هاشًا للتطبيق. بدلًا من ذلك يرى المستخدم نافذة ويختار هل يشارك الرسالة مع تطبيقك. يجب أن يبدأ تطبيقك الاستماع قبل وصول الرسالة، ثم يستخرج الرمز من نص الرسالة بنفسه.

ما رمز SMS المرتبط بنطاق في iOS؟

هو رسالة يربط سطرها الأخير الرمز بنطاقك: النطاق مسبوقًا بـ @ ثم مسافة ثم الرمز مسبوقًا بـ #. وتوثّقه Apple لنظام iOS 14 وما بعده. لا يقترح AutoFill الرمز إلا إذا طابق الموقع المفتوح في Safari، أو نطاق مرتبط بالتطبيق، النطاق المذكور في الرسالة.

كيف تقرأ WebOTP الرسالة؟

تستدعي الصفحة navigator.credentials.get مع الخيار otp ووسيلة النقل sms. وعندما تصل رسالة سطرها الأخير @host #code ويطابق المضيف أصل الصفحة، يطلب المتصفح تأكيد المستخدم ثم يعيد الرمز. تحتاج الواجهة إلى HTTPS، والمتصفح الموثّق هو Chrome على أندرويد.

لماذا لا يُملأ رمز OTP تلقائيًا؟

الأسباب المعتادة: رمز لا يمكن تمييزه بوضوح، أو هاش خاطئ أو مفقود في أندرويد، أو سطر أخير لا يتبع صيغة @domain #code، أو نطاق لا يطابق الصفحة، أو نص يدفع الرسالة فوق حد البايتات. افحص كل سبب وفق قواعد الصيغة، ثم اختبر على جهاز حقيقي.

هل يدعم واتساب الملء التلقائي لرمز OTP؟

نعم. تدعم قوالب المصادقة من Meta زر نسخ الرمز وزر الملء التلقائي بلمسة واحدة وخيار بلا لمس. يحتاج الخياران الأخيران إلى اسم حزمة تطبيق أندرويد وهاش التوقيع. الخيار بلا لمس مدعوم في أندرويد فقط، ويتلقى المستخدمون على المنصات الأخرى زر نسخ الرمز.

المصادر

  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