Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

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

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

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

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

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

يأتي هذا مع الفوائد التالية:

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

تهيئة ActionCodeSettings

قبل أن تتمكن من إنشاء ارتباط إجراء بريد إلكتروني ، قد تحتاج إلى تهيئة مثيل ActionCodeSettings .

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

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

لتهيئة مثيل ActionCodeSettings ، قم بتوفير البيانات التالية:

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

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

  • عندما يتم التعامل مع الارتباط في أدوات إجراءات الويب ، يكون هذا هو الرابط لموضع معين في معامِل استعلام continueUrl Url.
  • عندما يتم التعامل مع الرابط في التطبيق مباشرةً ، فهذه هي معلمة استعلام continueUrl في الرابط العميق للرابط الديناميكي.
iOS ({bundleId: string} | غير محدد) يعيّن معرّف الحزمة. سيحاول هذا فتح الرابط في تطبيق Apple إذا كان مثبتًا. يجب تسجيل التطبيق في وحدة التحكم.
android ({packageName: string، installApp: منطقية | غير محدد ، الحد الأدنى للإصدار: string | undefined} | غير محدد) يعيّن اسم حزمة Android. سيحاول هذا فتح الرابط في تطبيق Android إذا كان مثبتًا. إذا تم تمرير installApp ، فإنه يحدد ما إذا كان سيتم تثبيت تطبيق Android إذا كان الجهاز يدعمه ولم يكن التطبيق مثبتًا بالفعل. إذا تم توفير هذا الحقل بدون اسم packageName ، فسيتم طرح خطأ يوضح أنه يجب توفير اسم packageName بالاقتران مع هذا الحقل. إذا تم تحديد الإصدار minimumVersion ، وتم تثبيت إصدار أقدم من التطبيق ، فسيتم نقل المستخدم إلى متجر Play لترقية التطبيق. يجب تسجيل تطبيق Android في وحدة التحكم.
handleCodeInApp (قيمة منطقية | غير محدد) ما إذا كان سيتم فتح ارتباط إجراء البريد الإلكتروني في تطبيق جوال أو رابط ويب أولاً. الافتراضي هو خطأ. عند التعيين على "صحيح" ، سيتم إرسال رابط رمز الإجراء كرابط عام أو رابط تطبيق 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 الديناميكية.

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();

بايثون

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",
}

سي #

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());
}

بايثون

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)

سي #

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());
}

بايثون

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)

سي #

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());
}

بايثون

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)

سي #

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 باستخدام روابط البريد الإلكتروني . سيساعد هذا في توفير معلومات حول كيفية إكمال تسجيل الدخول بعد أن ينقر المستخدم على الرابط وإعادة توجيهه مرة أخرى إلى التطبيق.