حالة المرور في إجراءات البريد الإلكتروني

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

يمكن أن يكون هذا مفيدًا للغاية في السيناريوهات الشائعة التالية:

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

  • قد يوفر التطبيق إمكانية الوصول إلى الحسابات التي تم التحقق منها فقط. على سبيل المثال، قد تطلب النشرة الإخبارية من المستخدم التحقق من بريده الإلكتروني قبل الاشتراك. سيخضع المستخدم لعملية التحقق من البريد الإلكتروني ويتوقع العودة إلى التطبيق لإكمال اشتراكه.

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

تعد القدرة على تمرير الحالة عبر عنوان URL للمتابعة ميزة قوية توفرها Firebase Auth والتي يمكنها تحسين تجربة المستخدم بشكل كبير.

تمرير الحالة/متابعة عنوان URL في إجراءات البريد الإلكتروني

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

يجب توفير مثيل ActionCodeSettings عند إرسال بريد إلكتروني لإعادة تعيين كلمة المرور أو بريد إلكتروني للتحقق. يمكن إنشاؤه باستخدام فئة ActionCodeSettings.Builder المرتبطة والتي تحتوي على الطرق التالية:

طريقة وصف
setUrl(String url)

يضبط الرابط (عنوان URL للحالة/المتابعة) الذي له معاني مختلفة في سياقات مختلفة:

  • عند معالجة الارتباط في عناصر واجهة مستخدم إجراء الويب، يكون هذا هو الرابط العميق في معلمة الاستعلام continueUrl .
  • عندما تتم معالجة الارتباط في التطبيق مباشرةً، تكون هذه هي معلمة الاستعلام continueUrl في الرابط العميق للارتباط الديناميكي.
setIOSBundleId(String iOSBundleId) يضبط معرف حزمة iOS. سيحاول هذا فتح الرابط في تطبيق iOS إذا كان مثبتًا. يجب تسجيل تطبيق iOS في وحدة التحكم.
setAndroidPackageName(String androidPackageName, boolean installIfNotAvailable, String minimumVersion) يضبط اسم حزمة Android. سيحاول هذا فتح الرابط في تطبيق Android إذا كان مثبتًا. إذا تم تعيين installIfNotAvailable على true ، فإنه يحدد ما إذا كان سيتم تثبيت تطبيق Android إذا كان الجهاز يدعمه ولم يكن التطبيق مثبتًا بالفعل. إذا تم تحديد الإصدار الأدنى، وتم تثبيت إصدار أقدم من التطبيق، فسيتم نقل المستخدم إلى متجر Play لترقية التطبيق. يجب تسجيل تطبيق Android في وحدة التحكم.
setHandleCodeInApp(boolean status) ما إذا كان سيتم فتح رابط إجراء البريد الإلكتروني في تطبيق جوال أو رابط ويب أولاً. الافتراضي هو خطأ. عند التعيين على "صحيح"، سيتم إرسال رابط رمز الإجراء كرابط عالمي أو رابط تطبيق Android وسيتم فتحه بواسطة التطبيق إذا تم تثبيته. في الحالة الخاطئة، سيتم إرسال الرمز إلى أداة الويب أولاً وبعد ذلك ستتم إعادة التوجيه إلى التطبيق إذا كان مثبتًا.
setDynamicLinkDomain(String dynamicLinkDomain) لتعيين مجال الرابط الديناميكي (أو المجال الفرعي) لاستخدامه للارتباط الحالي إذا كان سيتم فتحه باستخدام Firebase Dynamic Links. نظرًا لأنه يمكن تكوين مجالات الارتباط الديناميكي المتعددة لكل مشروع، فإن هذا الحقل يوفر القدرة على اختيار مجال واحد بشكل صريح. إذا لم يتم توفير أي شيء، فسيتم استخدام المجال الأول بشكل افتراضي.

يوضح المثال التالي كيفية إرسال رابط التحقق من البريد الإلكتروني الذي سيتم فتحه في تطبيق جوال أولاً كرابط ديناميكي لـ Firebase (تطبيق iOS com.example.ios أو تطبيق Android com.example.android ). سيحتوي الرابط العميق على حمولة عنوان URL للمتابعة https://www.example.com/?email=user@example.com .

Kotlin+KTX

val auth = Firebase.auth
val user = auth.currentUser!!

val url = "http://www.example.com/verify?uid=" + user.uid
val actionCodeSettings = ActionCodeSettings.newBuilder()
    .setUrl(url)
    .setIOSBundleId("com.example.ios")
    // The default for this is populated with the current android package name.
    .setAndroidPackageName("com.example.android", false, null)
    .build()

user.sendEmailVerification(actionCodeSettings)
    .addOnCompleteListener { task ->
        if (task.isSuccessful) {
            Log.d(TAG, "Email sent.")
        }
    }

Java

FirebaseAuth auth = FirebaseAuth.getInstance();
FirebaseUser user = auth.getCurrentUser();

String url = "http://www.example.com/verify?uid=" + user.getUid();
ActionCodeSettings actionCodeSettings = ActionCodeSettings.newBuilder()
        .setUrl(url)
        .setIOSBundleId("com.example.ios")
        // The default for this is populated with the current android package name.
        .setAndroidPackageName("com.example.android", false, null)
        .build();

user.sendEmailVerification(actionCodeSettings)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "Email sent.");
                }
            }
        });

يستخدم Firebase Auth روابط Firebase الديناميكية عند إرسال رابط يُقصد فتحه في تطبيق الهاتف المحمول. لاستخدام هذه الميزة، يجب تكوين الارتباطات الديناميكية في وحدة تحكم Firebase.

  1. تمكين الروابط الديناميكية لـ Firebase:

    1. في وحدة تحكم Firebase ، افتح قسم الروابط الديناميكية .
    2. إذا لم تكن قد قبلت شروط الارتباطات الديناميكية بعد وقمت بإنشاء مجال الارتباطات الديناميكية، فقم بذلك الآن.

      إذا قمت بالفعل بإنشاء مجال الارتباطات الديناميكية، فلاحظ ذلك. عادةً ما يبدو مجال الارتباطات الديناميكية كالمثال التالي:

      example.page.link

      ستحتاج إلى هذه القيمة عند تكوين تطبيق Apple أو Android الخاص بك لاعتراض الرابط الوارد.

  2. تكوين تطبيقات أندرويد:

    1. إذا كنت تخطط للتعامل مع هذه الروابط من تطبيق Android الخاص بك، فيجب تحديد اسم حزمة Android في إعدادات مشروع Firebase Console. بالإضافة إلى ذلك، يجب تقديم SHA-1 وSHA-256 لشهادة الطلب.
    2. ستحتاج أيضًا إلى تكوين مرشح الغرض للارتباط العميق في ملف AndroidManifest.xml.
    3. لمعرفة المزيد حول هذا الأمر، راجع تلقي تعليمات روابط Android الديناميكية .
  3. تكوين تطبيقات iOS:

    1. إذا كنت تخطط للتعامل مع هذه الروابط من تطبيق iOS الخاص بك، فيجب تحديد معرف حزمة iOS في إعدادات مشروع Firebase Console. بالإضافة إلى ذلك، يجب أيضًا تحديد معرف متجر التطبيقات ومعرف فريق مطوري Apple.
    2. ستحتاج أيضًا إلى تكوين مجال الارتباط العالمي FDL كمجال مرتبط في إمكانيات التطبيق لديك.
    3. إذا كنت تخطط لتوزيع تطبيقك على الإصدار 8 من نظام التشغيل iOS أو أقل، فستحتاج إلى تعيين معرف حزمة iOS الخاص بك كمخطط مخصص لعناوين URL الواردة.
    4. لمعرفة المزيد حول هذا الأمر، راجع تلقي تعليمات الارتباطات الديناميكية لنظام التشغيل iOS .

التعامل مع إجراءات البريد الإلكتروني في تطبيق ويب

يمكنك تحديد ما إذا كنت تريد التعامل مع رابط رمز الإجراء من تطبيق ويب أولاً ثم إعادة التوجيه إلى صفحة ويب أو تطبيق جوال آخر بعد الإكمال الناجح، بشرط أن يكون تطبيق الهاتف المحمول متاحًا. يتم ذلك عن طريق استدعاء setHandleCodeInApp(false) في كائن ActionCodeSettings.Builder . على الرغم من عدم الحاجة إلى معرف حزمة iOS أو اسم حزمة Android، فإن توفيرهما سيسمح للمستخدم بإعادة التوجيه مرة أخرى إلى التطبيق المحدد عند إكمال رمز إجراء البريد الإلكتروني.

عنوان URL للويب المستخدم هنا، هو الذي تم تكوينه في قسم قوالب إجراءات البريد الإلكتروني. يتم توفير واحد افتراضي لجميع المشاريع. ارجع إلى تخصيص معالجات البريد الإلكتروني لمعرفة المزيد حول كيفية تخصيص معالج إجراءات البريد الإلكتروني.

في هذه الحالة، سيكون الارتباط الموجود داخل معلمة الاستعلام continueUrl عبارة عن رابط FDL حمولته هي URL المحدد في كائن ActionCodeSettings . بينما يمكنك اعتراض الرابط الوارد من تطبيقك والتعامل معه دون أي تبعية إضافية، نوصي باستخدام مكتبة عميل FDL لتحليل الرابط العميق لك.

عند التعامل مع إجراءات البريد الإلكتروني مثل التحقق من البريد الإلكتروني، يجب تحليل رمز الإجراء من معلمة استعلام oobCode من الرابط العميق ثم تطبيقه عبر applyActionCode ليصبح التغيير ساري المفعول، أي ليتم التحقق من البريد الإلكتروني.

التعامل مع إجراءات البريد الإلكتروني في تطبيقات الهاتف المحمول

يمكنك تحديد ما إذا كنت تريد التعامل مع رابط رمز الإجراء داخل تطبيق الهاتف المحمول الخاص بك أولاً، بشرط أن يكون مثبتًا. مع تطبيقات Android، لديك أيضًا القدرة على التحديد من خلال القيمة المنطقية installIfNotAvailable التي سيتم تثبيت التطبيق فيها إذا كان الجهاز يدعمه ولم يكن مثبتًا بالفعل. إذا تم النقر على الرابط من جهاز لا يدعم تطبيق الهاتف المحمول، فسيتم فتحه من صفحة ويب بدلاً من ذلك. يتم ذلك عن طريق استدعاء setHandleCodeInApp(true) في كائن ActionCodeSettings.Builder . يجب أيضًا تحديد اسم حزمة Android أو معرف حزمة iOS لتطبيق الهاتف المحمول.

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

في هذه الحالة، سيكون رابط تطبيق الهاتف المحمول المرسل إلى المستخدم عبارة عن رابط FDL حمولته هي عنوان URL لرمز الإجراء، الذي تم تكوينه في وحدة التحكم، مع معلمات الاستعلام oobCode و mode و apiKey و continueUrl . سيكون الأخير هو URL الأصلي المحدد في كائن ActionCodeSettings . بينما يمكنك اعتراض الرابط الوارد من تطبيقك والتعامل معه دون أي تبعية إضافية، نوصي باستخدام مكتبة عميل FDL لتحليل الرابط العميق لك. يمكن تطبيق رمز الإجراء مباشرة من تطبيق الهاتف المحمول بطريقة مشابهة لكيفية التعامل معه من تدفق الويب الموضح في قسم تخصيص معالجات البريد الإلكتروني .

عند التعامل مع إجراءات البريد الإلكتروني مثل التحقق من البريد الإلكتروني، يجب تحليل رمز الإجراء من معلمة استعلام oobCode من الرابط العميق ثم تطبيقه عبر applyActionCode ليصبح التغيير ساري المفعول، أي ليتم التحقق من البريد الإلكتروني.