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

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

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

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

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

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

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

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

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

يجب توفير مثيل FIRActionCodeSettings عند إرسال بريد إلكتروني لإعادة تعيين كلمة المرور أو بريد إلكتروني للتحقق. تأخذ هذه الواجهة المعلمات التالية:

سويفت

معامل يكتب وصف
URL سلسلة

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

  • عندما يتم التعامل مع الرابط في أدوات إجراءات الويب ، يكون هذا هو الرابط لموضع معين في معامِل استعلام continueUrl .
  • عندما يتم التعامل مع الرابط في التطبيق مباشرةً ، فهذه هي معلمة استعلام continueUrl في الرابط العميق للرابط الديناميكي.
iOSBundleID سلسلة يعيّن معرّف الحزمة. سيحاول هذا فتح الرابط في تطبيق Apple إذا كان مثبتًا. يجب تسجيل التطبيق في وحدة التحكم. إذا لم يتم توفير معرّف الحزمة ، فسيتم تعيين قيمة هذا الحقل على معرّف الحزمة للحزمة الرئيسية للتطبيق.
androidPackageName سلسلة يعيّن اسم حزمة Android. سيحاول هذا فتح الرابط في تطبيق android إذا كان مثبتًا.
androidInstallIfNotAvailable منطقي يحدد ما إذا كان سيتم تثبيت تطبيق Android إذا كان الجهاز يدعمه ولم يكن التطبيق مثبتًا بالفعل. إذا تم توفير هذا الحقل بدون اسم packageName ، فسيتم طرح خطأ يوضح أنه يجب توفير اسم الحزمة بالاقتران مع هذا الحقل.
androidMinimumVersion سلسلة الحد الأدنى من إصدار التطبيق المدعوم في هذا التدفق. إذا تم تحديد الإصدار الأدنى ، وتم تثبيت إصدار أقدم من التطبيق ، فسيتم نقل المستخدم إلى متجر Play لترقية التطبيق. يجب تسجيل تطبيق Android في وحدة التحكم.
handleCodeInApp منطقي ما إذا كان سيتم فتح ارتباط إجراء البريد الإلكتروني في تطبيق جوال أو رابط ويب أولاً. الافتراضي هو خطأ. عند التعيين على "صحيح" ، سيتم إرسال رابط رمز الإجراء كرابط عام أو رابط تطبيق Android وسيفتحه التطبيق إذا كان مثبتًا. في الحالة الخاطئة ، سيتم إرسال الرمز إلى عنصر واجهة الويب أولاً ، وبعد ذلك سيتم إعادة التوجيه إلى التطبيق إذا تم تثبيته.
dynamicLinkDomain سلسلة يعيّن نطاق الارتباط الديناميكي (أو النطاق الفرعي) لاستخدامه للرابط الحالي إذا كان سيتم فتحه باستخدام روابط Firebase الديناميكية. نظرًا لأنه يمكن تكوين مجالات ارتباط ديناميكي متعددة لكل مشروع ، يوفر هذا الحقل القدرة على اختيار واحد بشكل صريح. إذا لم يتم توفير أي شيء ، فسيتم استخدام المجال الأول افتراضيًا.

ج موضوعية

معامل يكتب وصف
URL NSString

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

  • عندما يتم التعامل مع الرابط في أدوات إجراءات الويب ، يكون هذا هو الرابط لموضع معين في معامِل استعلام continueUrl .
  • عندما يتم التعامل مع الرابط في التطبيق مباشرةً ، فهذه هي معلمة استعلام continueUrl في الرابط العميق للرابط الديناميكي.
iOSBundleID NSString يعيّن معرّف الحزمة. سيحاول هذا فتح الرابط في تطبيق Apple إذا كان مثبتًا. يجب تسجيل التطبيق في وحدة التحكم.
androidPackageName NSString يعيّن اسم حزمة Android. سيحاول هذا فتح الرابط في تطبيق android إذا كان مثبتًا.
androidInstallIfNotAvailable بول يحدد ما إذا كان سيتم تثبيت تطبيق Android إذا كان الجهاز يدعمه ولم يتم تثبيت التطبيق بالفعل. إذا تم توفير هذا الحقل بدون اسم packageName ، فسيتم طرح خطأ يوضح أنه يجب توفير اسم الحزمة بالاقتران مع هذا الحقل.
androidMinimumVersion NSString الحد الأدنى من إصدار التطبيق المدعوم في هذا التدفق. إذا تم تحديد الإصدار الأدنى ، وتم تثبيت إصدار أقدم من التطبيق ، فسيتم نقل المستخدم إلى متجر Play لترقية التطبيق. يجب تسجيل تطبيق Android في وحدة التحكم.
handleCodeInApp بول ما إذا كان سيتم فتح ارتباط إجراء البريد الإلكتروني في تطبيق جوال أو رابط ويب أولاً. الافتراضي هو خطأ. عند التعيين على "صحيح" ، سيتم إرسال رابط رمز الإجراء كرابط عام أو رابط تطبيق Android وسيفتحه التطبيق إذا كان مثبتًا. في الحالة الخاطئة ، سيتم إرسال الرمز إلى عنصر واجهة الويب أولاً ، وبعد ذلك سيتم إعادة التوجيه إلى التطبيق إذا تم تثبيته.
dynamicLinkDomain NSString يعيّن نطاق الارتباط الديناميكي (أو النطاق الفرعي) لاستخدامه للرابط الحالي إذا كان سيتم فتحه باستخدام روابط Firebase الديناميكية. نظرًا لأنه يمكن تكوين مجالات ارتباط ديناميكي متعددة لكل مشروع ، يوفر هذا الحقل القدرة على اختيار واحد بشكل صريح. إذا لم يتم توفير أي شيء ، فسيتم استخدام المجال الأول افتراضيًا.

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

سويفت


var actionCodeSettings =  ActionCodeSettings.init()
actionCodeSettings.canHandleInApp = true
let user = Auth.auth().currentUser()
actionCodeSettings.URL =
    String(format: "https://www.example.com/?email=%@", user.email)
actionCodeSettings.iOSbundleID = Bundle.main.bundleIdentifier!
actionCodeSettings.setAndroidPakageName("com.example.android",
                                         installIfNotAvailable:true,
                                         minumumVersion:"12")
// When multiple custom dynamic link domains are defined, specify which one to use.
actionCodeSettings.dynamicLinkDomain = "example.page.link"
user.sendEmailVerification(withActionCodeSettings:actionCodeSettings { error in
  if error {
    // Error occurred. Inspect error.code and handle error.
    return
  }
  // Email verification sent.
})

ج موضوعية

 FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init];
 actionCodeSettings.handleCodeInApp = YES;
 FIRUser *user = [FIRAuth auth].currentUser;
 NSString *urlString =
     [NSString stringWithFormat:@"https://www.example.com/?email=%@", user.email];
 actionCodeSettings.URL = [NSURL URLWithString:urlString];
 actionCodeSettings.iOSBundleID = [NSBundle mainBundle].bundleIdentifier;
 // When multiple custom dynamic link domains are defined, specify which one to use.
 actionCodeSettings.dynamicLinkDomain = @"example.page.link";
 [actionCodeSettings setAndroidPackageName:@"com.example.android"
                     installIfNotAvailable:YES
                            minimumVersion:'12'];
 [user sendEmailVerificationWithActionCodeSettings:actionCodeSettings
                                        completion:^(NSError *_Nullable error) {
   if (error) {
     // Error occurred. Inspect error.code and handle error.
     return;
   }
   // Email verification sent.
 }];

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

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

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

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

      example.page.link

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

  2. تكوين تطبيقات Android:

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

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

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

يمكنك تحديد ما إذا كنت تريد التعامل مع ارتباط رمز الإجراء من تطبيق ويب أولاً ثم إعادة التوجيه إلى صفحة ويب أخرى أو تطبيق جوال آخر بعد الانتهاء بنجاح ، بشرط أن يكون تطبيق الهاتف متاحًا. يتم ذلك عن طريق ضبط handleCodeInApp على false في FIRActionCodeSettings (Obj-C) أو ActionCodeSettings (Swift). في حين أن معرّف الحزمة أو اسم حزمة Android غير مطلوبين ، فإن توفيرهما سيسمح للمستخدم بإعادة التوجيه مرة أخرى إلى التطبيق المحدد عند إكمال رمز إجراء البريد الإلكتروني.

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

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

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

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

يمكنك تحديد ما إذا كنت تريد التعامل مع ارتباط رمز الإجراء داخل تطبيق الهاتف المحمول الخاص بك أولاً ، بشرط تثبيته. مع تطبيقات Android ، لديك أيضًا القدرة على التحديد عبر androidInstallIfNotAvailable أنه سيتم تثبيت التطبيق إذا كان الجهاز يدعمه ولم يتم تثبيته بالفعل. إذا تم النقر فوق الارتباط من جهاز لا يدعم تطبيق الهاتف المحمول ، فسيتم فتحه من صفحة ويب بدلاً من ذلك. يتم ذلك عن طريق تعيين handleCodeInApp إلى true في FIRActionCodeSettings (Obj-C) أو ActionCodeSettings (Swift). يجب أيضًا تحديد اسم حزمة Android أو معرّف الحزمة الخاص بتطبيق الهاتف المحمول. عنوان URL الاحتياطي المستخدم هنا ، عندما لا يتوفر تطبيق جوال ، هو الذي تم تكوينه في قسم قوالب إجراءات البريد الإلكتروني. يتم توفير واحد افتراضي لجميع المشاريع. راجع تخصيص معالجات البريد الإلكتروني لمعرفة المزيد حول كيفية تخصيص معالج إجراء البريد الإلكتروني.

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

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