Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

การสร้างลิงก์การดำเนินการอีเมล

แอพมือถือบางครั้งจำเป็นต้องโต้ตอบกับผู้ใช้และแจ้งให้พวกเขาดำเนินการบางอย่างโดยการส่งอีเมล

Firebase ธุรการ SDKs ให้ความสามารถในการส่งอีเมลของผู้ใช้มีการเชื่อมโยงพวกเขาสามารถใช้สำหรับการรีเซ็ตรหัสผ่านการตรวจสอบที่อยู่อีเมลและอีเมลที่ใช้ในการเข้าระบบ อีเมลเหล่านี้ส่งโดย Google และมีข้อจำกัดในการปรับแต่ง

หากคุณต้องการใช้เทมเพลตอีเมลและบริการส่งอีเมลของคุณเองแทน คุณสามารถใช้ Firebase Admin SDK เพื่อสร้างลิงก์การดำเนินการตามโปรแกรมสำหรับขั้นตอนข้างต้น ซึ่งคุณรวมไว้ในอีเมลถึงผู้ใช้ได้

นี้มาพร้อมกับประโยชน์ดังต่อไปนี้:

  • ปรับแต่งเทมเพลตอีเมล ซึ่งรวมถึงความสามารถในการเพิ่มสไตล์ใหม่ๆ และการสร้างแบรนด์แบบกำหนดเอง เปลี่ยนคำและโลโก้ ระบุผู้ใช้ด้วยชื่อแทนชื่อเต็ม และอื่นๆ
  • ใช้เทมเพลตที่แตกต่างกันขึ้นอยู่กับบริบท ตัวอย่างเช่น หากผู้ใช้กำลังยืนยันอีเมลเพื่อสมัครรับจดหมายข่าว อาจต้องระบุบริบทในเนื้อหาอีเมล อีกตัวอย่างหนึ่งคือการลงชื่อเข้าใช้ลิงก์อีเมล: ในสถานการณ์หนึ่ง ผู้ใช้รายเดียวกันอาจทริกเกอร์สิ่งนี้ หรือเป็นการเชิญโดยผู้ใช้รายอื่น บริบทจะต้องรวมอยู่ในอีเมล
  • แปลเทมเพลตอีเมลที่กำหนดเอง
  • ความสามารถในการสร้างลิงค์จากสภาพแวดล้อมเซิร์ฟเวอร์ที่ปลอดภัย
  • ความสามารถในการปรับแต่งวิธีการเปิดลิงก์ ผ่านแอพมือถือหรือเบราว์เซอร์ และวิธีส่งผ่านข้อมูลสถานะเพิ่มเติม ฯลฯ
  • ความสามารถในการปรับแต่งโดเมนลิงก์แบบไดนามิกที่ใช้สำหรับโฟลว์แอปบนอุปกรณ์เคลื่อนที่เมื่อสร้างลิงก์การดำเนินการอีเมล และแม้กระทั่งระบุโดเมนลิงก์แบบไดนามิกที่แตกต่างกันตามบริบทหรือแอปบนอุปกรณ์เคลื่อนที่

เริ่มต้น ActionCodeSettings

ก่อนที่คุณจะสามารถสร้างการเชื่อมโยงการกระทำอีเมลคุณอาจต้องเริ่มต้น ActionCodeSettings อินสแตนซ์

ActionCodeSettings ช่วยให้คุณสามารถที่จะผ่านรัฐเพิ่มเติมผ่าน URL ซึ่งสามารถเข้าถึงได้อย่างต่อเนื่องหลังจากที่ผู้ใช้คลิกลิงก์อีเมล นอกจากนี้ยังช่วยให้ผู้ใช้สามารถกลับไปที่แอปได้หลังจากดำเนินการเสร็จสิ้น นอกจากนี้ คุณสามารถระบุว่าจะจัดการลิงก์การดำเนินการอีเมลโดยตรงจากแอปพลิเคชันมือถือเมื่อติดตั้งหรือจากเบราว์เซอร์

สำหรับลิงก์ที่ตั้งใจจะเปิดผ่านแอปบนอุปกรณ์เคลื่อนที่ คุณจะต้องเปิดใช้ลิงก์แบบไดนามิกของ Firebase และดำเนินการบางอย่างเพื่อตรวจหาลิงก์เหล่านี้จากแอปบนอุปกรณ์เคลื่อนที่ของคุณ อ้างถึงคำแนะนำเกี่ยวกับวิธีการ กำหนดค่า Firebase แบบไดนามิกลิงค์ สำหรับการกระทำของอีเมล

ในการเริ่มต้น ActionCodeSettings เช่นให้ข้อมูลต่อไปนี้:

พารามิเตอร์ พิมพ์ คำอธิบาย
url สตริง

ตั้งค่าลิงก์ (สถานะ/URL ต่อ) ซึ่งมีความหมายต่างกันในบริบทที่แตกต่างกัน:

  • เมื่อเชื่อมโยงมีการจัดการในเครื่องมือการกระทำเว็บนี้คือการเชื่อมโยงลึกลงไปใน continueUrl พารามิเตอร์การค้นหา
  • เมื่อการเชื่อมโยงจะถูกจัดการในการตรวจสอบโดยตรงนี้เป็น continueUrl พารามิเตอร์แบบสอบถามในการเชื่อมโยงความลึกของการเชื่อมโยงแบบไดนามิก
iOS ({bundleId: string}|undefined) ตั้งค่า ID ชุด iOS การดำเนินการนี้จะพยายามเปิดลิงก์ในแอป iOS หากติดตั้งไว้ แอป iOS จะต้องลงทะเบียนในคอนโซล
android ({packageName: string, installApp:boolean|undefined, minimumVersion: string|undefined}|undefined) ตั้งชื่อแพ็คเกจ Android การดำเนินการนี้จะพยายามเปิดลิงก์ในแอป Android หากติดตั้งไว้ หาก installApp ถูกส่งจะระบุว่าจะติดตั้งแอป Android หากอุปกรณ์สนับสนุนและ app ที่ไม่ได้ติดตั้ง ถ้าข้อมูลนี้มีให้โดยไม่ต้อง packageName ข้อผิดพลาดจะถูกโยนทิ้งอธิบายว่า packageName จะต้องให้ร่วมกับข้อมูลนี้ หาก minimumVersion มีการระบุและรุ่นเก่าของ app ที่ติดตั้งผู้ใช้จะถูกนำตัวไปที่ Play สโตร์เพื่ออัพเกรดแอป แอป Android จะต้องลงทะเบียนในคอนโซล
handleCodeInApp (บูลีน|ไม่ได้กำหนด) ลิงก์การดำเนินการอีเมลจะเปิดในแอปบนอุปกรณ์เคลื่อนที่หรือลิงก์ของเว็บก่อน ค่าเริ่มต้นเป็นเท็จ เมื่อตั้งค่าเป็น "จริง" ลิงก์รหัสการดำเนินการจะถูกส่งเป็นลิงก์สากลหรือลิงก์แอป Android และแอปจะเปิดขึ้นหากติดตั้งไว้ ในกรณีที่เป็นเท็จ รหัสจะถูกส่งไปยังวิดเจ็ตเว็บก่อน จากนั้นดำเนินการต่อจะเปลี่ยนเส้นทางไปยังแอปหากติดตั้งไว้
dynamicLinkDomain (สตริง|ไม่ได้กำหนด) ตั้งค่าโดเมนลิงก์แบบไดนามิก (หรือโดเมนย่อย) เพื่อใช้สำหรับลิงก์ปัจจุบัน หากจะเปิดโดยใช้ลิงก์แบบไดนามิกของ Firebase เนื่องจากสามารถกำหนดค่าโดเมนลิงก์แบบไดนามิกได้หลายรายการต่อโปรเจ็กต์ ฟิลด์นี้จึงมีตัวเลือกให้เลือกอย่างชัดแจ้ง หากไม่มีการระบุ โดเมนที่เก่าที่สุดจะถูกใช้โดยค่าเริ่มต้น

ตัวอย่างต่อไปนี้แสดงให้เห็นถึงวิธีการที่จะส่งลิงก์ยืนยันอีเมลที่จะเปิดใน app มือถือครั้งแรกในฐานะ Firebase เชื่อมโยงแบบไดนามิก (แอป iOS com.example.ios หรือแอป Android com.example.android ที่ app ที่จะติดตั้งถ้าไม่ได้ติดตั้งเรียบร้อยแล้ว รุ่นขั้นต่ำคือ 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',
};

Java

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

ค#

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

Java

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)

ค#

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

Java

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)

ค#

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 usremail = 'user@example.com';
getAuth()
  .generateSignInWithEmailLink(usremail, actionCodeSettings)
  .then((link) => {
    // Construct sign-in with email link template, embed the link and
    // send using custom SMTP server.
    return sendSignInEmail(usremail, displayName, link);
  })
  .catch((error) => {
    // Some error occurred.
  });

Java

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)

ค#

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 ใช้การเชื่อมโยงอีเมล ซึ่งจะช่วยให้ข้อมูลเกี่ยวกับวิธีการลงชื่อเข้าใช้ให้เสร็จสมบูรณ์หลังจากที่ผู้ใช้คลิกลิงก์และถูกเปลี่ยนเส้นทางกลับไปที่แอป