إنشاء روابط إجراءات عبر البريد الإلكتروني

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

حِزم تطوير البرامج (SDK) لعميل Firebase توفير القدرة على إرسال رسائل بريد إلكتروني إلى المستخدمين تحتوي على الروابط التي يمكنهم استخدامها لإعادة تعيين كلمة المرور والتحقق من عنوان البريد الإلكتروني تسجيل الدخول عبر البريد الإلكتروني. ترسل Google هذه الرسائل الإلكترونية المستندة إلى النماذج ولديها إمكانية تخصيص محدودة.

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

ويحقق هذا الإجراء المزايا التالية:

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

إعداد ActionCodeSettings

قبل أن تتمكن من إنشاء رابط إجراء عبر البريد الإلكتروني، قد تحتاج إلى إعداد مثال واحد (ActionCodeSettings)

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

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

لإعداد مثيل ActionCodeSettings، يُرجى تقديم البيانات التالية:

المعلمة النوع الوصف
url السلسلة

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

  • عند معالجة الرابط في أدوات إجراءات الويب، فإن هذا هو الموضع في معلَمة طلب البحث continueUrl.
  • عند التعامل مع الرابط في التطبيق مباشرةً، هذا هو معلَمة طلب البحث "continueUrl" في الرابط لصفحة في التطبيق الرابط الديناميكي.
iOS ({bundleId: string}|غير محدَّدة) لضبط معرّف الحزمة. سيؤدي هذا الإجراء إلى فتح الرابط في تطبيق Apple في حال تم تثبيته. يجب تسجيل التطبيق في Console.
android ({packageName: string, installApp:منطقي|غير محدّدة، الحد الأدنى من الإصدارات: سلسلة|غير محددة}|غير محدّد) لضبط اسم حزمة Android. سيؤدي هذا الإجراء إلى فتح الرابط في تطبيق Android إذا كان مثبتًا. إذا تم تجاوز installApp، سيتم يحدد ما إذا كان سيتم تثبيت تطبيق Android إذا كان الجهاز يتوافق معه التَّطْبِيقْ دَهْ مِشْ مِتْثَبِّتْ بِالْفِعْلْ. إذا تم توفير هذا الحقل بدون packageName، تم حدوث خطأ لتوضيح أنّ يجب توفير packageName بالتزامن مع هذا الحقل. إذا تم تحديد minimumVersion، وتم تحديد إصدار قديم من إذا تم تثبيت التطبيق، يتم نقل المستخدم إلى "متجر Play" لترقية التطبيق. يجب تسجيل تطبيق Android في Console.
handleCodeInApp (منطقي|غير محدّدة) ما إذا كان رابط إجراء البريد الإلكتروني سيتم فتحه في تطبيق للأجهزة الجوّالة أو على الويب أولاً. وتكون القيمة التلقائية false. وعند ضبطها على "صحيح"، يعمل رابط رمز الإجراء سيتم إرساله كرابط عام أو رابط تطبيق Android وسيتم فتحه. بواسطة التطبيق إذا كان مثبّتًا. في الحالة الخاطئة، سيتم إرسال الرمز إلى تطبيق الويب المصغّر أولاً ثم المتابعة، ستتم إعادة التوجيه إلى التطبيق في حال مثبت.
dynamicLinkDomain (سلسلة|غير محدّدة) تضبط نطاق الرابط الديناميكي (أو النطاق الفرعي) لاستخدامه مع الرابط الحالي. إذا كان سيتم فتحه باستخدام روابط Firebase الديناميكية. كديناميكي متعدد يمكن ضبط نطاقات الروابط لكل مشروع، ويوفر هذا الحقل والقدرة على اختيار واحدة بشكل صريح. إذا لم يتم تقديم أي نطاق، سيتم تحديد أقدم نطاق يُستخدم بشكل افتراضي.

يوضح المثال التالي كيفية إرسال رابط التحقق من عنوان البريد الإلكتروني والذي سيفتح في تطبيق للأجهزة الجوّالة أولاً كرابط ديناميكي على Firebase (Apple التطبيق com.example.ios أو تطبيق Android com.example.android حيث سيفتح التطبيق إذا لم يكن مثبتًا من قبل وكان الحد الأدنى للإصدار هو 12). الرابط لصفحة في التطبيق سيحتوي على حمولة عنوان URL للمتابعة https://www.example.com/checkout?cartId=1234 نطاق الرابط الديناميكي المستخدَم coolapp.page.link، والذي يجب إعداده للاستخدام مع Firebase Dynamic الروابط.

Node.js

const actionCodeSettings = {
  // URL you want to redirect back to. The domain (www.example.com) for
  // this URL must be whitelisted in the Firebase Console.
  url: 'https://www.example.com/checkout?cartId=1234',
  // This must be true for email link sign-in.
  handleCodeInApp: true,
  iOS: {
    bundleId: 'com.example.ios',
  },
  android: {
    packageName: 'com.example.android',
    installApp: true,
    minimumVersion: '12',
  },
  // FDL custom domain.
  dynamicLinkDomain: 'coolapp.page.link',
};

جافا

ActionCodeSettings actionCodeSettings = ActionCodeSettings.builder()
    .setUrl("https://www.example.com/checkout?cartId=1234")
    .setHandleCodeInApp(true)
    .setIosBundleId("com.example.ios")
    .setAndroidPackageName("com.example.android")
    .setAndroidInstallApp(true)
    .setAndroidMinimumVersion("12")
    .setDynamicLinkDomain("coolapp.page.link")
    .build();

Python

action_code_settings = auth.ActionCodeSettings(
    url='https://www.example.com/checkout?cartId=1234',
    handle_code_in_app=True,
    ios_bundle_id='com.example.ios',
    android_package_name='com.example.android',
    android_install_app=True,
    android_minimum_version='12',
    dynamic_link_domain='coolapp.page.link',
)

انتقال

actionCodeSettings := &auth.ActionCodeSettings{
	URL:                   "https://www.example.com/checkout?cartId=1234",
	HandleCodeInApp:       true,
	IOSBundleID:           "com.example.ios",
	AndroidPackageName:    "com.example.android",
	AndroidInstallApp:     true,
	AndroidMinimumVersion: "12",
	DynamicLinkDomain:     "coolapp.page.link",
}

#C

var actionCodeSettings = new ActionCodeSettings()
{
    Url = "https://www.example.com/checkout?cartId=1234",
    HandleCodeInApp = true,
    IosBundleId = "com.example.ios",
    AndroidPackageName = "com.example.android",
    AndroidInstallApp = true,
    AndroidMinimumVersion = "12",
    DynamicLinkDomain = "coolapp.page.link",
};

لمزيد من المعلومات، يُرجى مراجعة حالة اجتياز الاختبار في إجراءات البريد الإلكتروني:

لإنشاء رابط إعادة ضبط كلمة المرور، أدخِل عنوان البريد الإلكتروني للمستخدم الحالي و كائن ActionCodeSettings الاختياري. سيتم حل العملية مع الرسالة الإلكترونية رابط اتخاذ إجراء. يجب أن يكون عنوان البريد الإلكتروني المُستخدَم ملكًا لمستخدم حالي.

Node.js

// Admin SDK API to generate the password reset link.
const userEmail = 'user@example.com';
getAuth()
  .generatePasswordResetLink(userEmail, actionCodeSettings)
  .then((link) => {
    // Construct password reset email template, embed the link and send
    // using custom SMTP server.
    return sendCustomPasswordResetEmail(userEmail, displayName, link);
  })
  .catch((error) => {
    // Some error occurred.
  });

جافا

String email = "user@example.com";
try {
  String link = FirebaseAuth.getInstance().generatePasswordResetLink(
      email, actionCodeSettings);
  // Construct email verification template, embed the link and send
  // using custom SMTP server.
  sendCustomEmail(email, displayName, link);
} catch (FirebaseAuthException e) {
  System.out.println("Error generating email link: " + e.getMessage());
}

Python

email = 'user@example.com'
link = auth.generate_password_reset_link(email, action_code_settings)
# Construct password reset email from a template embedding the link, and send
# using a custom SMTP server.
send_custom_email(email, link)

انتقال

email := "user@example.com"
link, err := client.PasswordResetLinkWithSettings(ctx, email, actionCodeSettings)
if err != nil {
	log.Fatalf("error generating email link: %v\n", err)
}

// Construct password reset template, embed the link and send
// using custom SMTP server.
sendCustomEmail(email, displayName, link)

#C

var email = "user@example.com";
var link = await FirebaseAuth.DefaultInstance.GeneratePasswordResetLinkAsync(
    email, actionCodeSettings);
// Construct email verification template, embed the link and send
// using custom SMTP server.
SendCustomEmail(email, displayName, link);

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

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

لإنشاء رابط التحقق من عنوان البريد الإلكتروني، عليك تقديم بيانات المستخدم الحالي التي لم يتم إثبات ملكيتها. البريد الإلكتروني وكائن ActionCodeSettings اختياري. سيتم حل العملية باستخدام رابط الإجراء عبر البريد الإلكتروني. يجب أن يكون عنوان البريد الإلكتروني المُستخدَم ملكًا لمستخدم حالي.

Node.js

// Admin SDK API to generate the email verification link.
const useremail = 'user@example.com';
getAuth()
  .generateEmailVerificationLink(useremail, actionCodeSettings)
  .then((link) => {
    // Construct email verification template, embed the link and send
    // using custom SMTP server.
    return sendCustomVerificationEmail(useremail, displayName, link);
  })
  .catch((error) => {
    // Some error occurred.
  });

جافا

String email = "user@example.com";
try {
  String link = FirebaseAuth.getInstance().generateEmailVerificationLink(
      email, actionCodeSettings);
  // Construct email verification template, embed the link and send
  // using custom SMTP server.
  sendCustomEmail(email, displayName, link);
} catch (FirebaseAuthException e) {
  System.out.println("Error generating email link: " + e.getMessage());
}

Python

email = 'user@example.com'
link = auth.generate_email_verification_link(email, action_code_settings)
# Construct email from a template embedding the link, and send
# using a custom SMTP server.
send_custom_email(email, link)

انتقال

email := "user@example.com"
link, err := client.EmailVerificationLinkWithSettings(ctx, email, actionCodeSettings)
if err != nil {
	log.Fatalf("error generating email link: %v\n", err)
}

// Construct email verification template, embed the link and send
// using custom SMTP server.
sendCustomEmail(email, displayName, link)

#C

var email = "user@example.com";
var link = await FirebaseAuth.DefaultInstance.GenerateEmailVerificationLinkAsync(
    email, actionCodeSettings);
// Construct email verification template, embed the link and send
// using custom SMTP server.
SendCustomEmail(email, displayName, link);

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

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

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

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

على عكس إعادة تعيين كلمة المرور والتحقق من البريد الإلكتروني، لا يؤدي البريد الإلكتروني المستخدم يجب أن تنتمي إلى مستخدم حالي، حيث يمكن استخدام هذه العملية تسجيل مستخدمين جُدد في تطبيقك عبر رابط بريد إلكتروني.

Node.js

// Admin SDK API to generate the sign in with email link.
const useremail = 'user@example.com';
getAuth()
  .generateSignInWithEmailLink(useremail, actionCodeSettings)
  .then((link) => {
    // Construct sign-in with email link template, embed the link and
    // send using custom SMTP server.
    return sendSignInEmail(useremail, displayName, link);
  })
  .catch((error) => {
    // Some error occurred.
  });

جافا

String email = "user@example.com";
try {
  String link = FirebaseAuth.getInstance().generateSignInWithEmailLink(
      email, actionCodeSettings);
  // Construct email verification template, embed the link and send
  // using custom SMTP server.
  sendCustomEmail(email, displayName, link);
} catch (FirebaseAuthException e) {
  System.out.println("Error generating email link: " + e.getMessage());
}

Python

email = 'user@example.com'
link = auth.generate_sign_in_with_email_link(email, action_code_settings)
# Construct email from a template embedding the link, and send
# using a custom SMTP server.
send_custom_email(email, link)

انتقال

email := "user@example.com"
link, err := client.EmailSignInLink(ctx, email, actionCodeSettings)
if err != nil {
	log.Fatalf("error generating email link: %v\n", err)
}

// Construct sign-in with email link template, embed the link and send
// using custom SMTP server.
sendCustomEmail(email, displayName, link)

#C

var email = "user@example.com";
var link = await FirebaseAuth.DefaultInstance.GenerateSignInWithEmailLinkAsync(
    email, actionCodeSettings);
// Construct email verification template, embed the link and send
// using custom SMTP server.
SendCustomEmail(email, displayName, link);

بعد إنشاء الرابط، يمكن إدراجه في عنوان البريد الإلكتروني المخصّص لتسجيل الدخول. ثم يتم إرسالها عبر البريد الإلكتروني إلى المستخدم المقابل باستخدام خادم SMTP مخصص.

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