Membuat Link Tindakan Email

Aplikasi seluler terkadang perlu berinteraksi dengan pengguna, dan meminta pengguna untuk melakukan tindakan tertentu dengan mengirim email.

Firebase Client SDK memberi Anda kemampuan untuk mengirim email yang berisi link untuk reset sandi, verifikasi alamat email, dan login dengan email kepada pengguna. Email berbasis template ini dikirim oleh Google dan memiliki kemampuan penyesuaian yang terbatas.

Jika Anda ingin menggunakan template email dan layanan pengiriman email milik sendiri, halaman ini menjelaskan cara menggunakan Firebase Admin SDK guna menghasilkan link tindakan secara terprogram untuk alur di atas, yang dapat disertakan dalam email untuk pengguna Anda.

Firebase Admin SDK memiliki beberapa manfaat:

  • Menyesuaikan template email. Penyesuaian ini termasuk kemampuan untuk menambahkan gaya baru dan branding khusus, mengubah susunan kata dan logo, menyapa pengguna dengan nama depan bukan dengan nama lengkap, dan sebagainya.
  • Menerapkan berbagai template sesuai konteks. Misalnya, jika pengguna memverifikasi emailnya untuk berlangganan newsletter, mungkin perlu disediakan konteks dalam isi email. Contoh lainnya adalah login dengan link email, yang dapat dipicu oleh pengguna yang sama atau undangan oleh pengguna lain. Konteks harus disertakan dalam email.
  • Melokalkan template email yang disesuaikan.
  • Kemampuan untuk menghasilkan link dari lingkungan server yang aman.
  • Kemampuan untuk menyesuaikan cara membuka link, melalui aplikasi seluler atau browser, dan cara meneruskan informasi status tambahan, dll.
  • Kemampuan untuk menyesuaikan domain link dinamis yang digunakan untuk alur aplikasi seluler saat membuat link tindakan email, dan bahkan menentukan domain link dinamis yang berbeda, tergantung pada konteks atau aplikasi seluler.

Melakukan inisialisasi ActionCodeSettings

Sebelum dapat membuat link tindakan email, Anda mungkin perlu melakukan inisialisasi instance ActionCodeSettings.

Dengan ActionCodeSettings, Anda dapat meneruskan status tambahan melalui continue URL, yang dapat diakses setelah pengguna mengklik link email. Dengan begitu, pengguna dapat kembali ke aplikasi setelah tindakan selesai. Selain itu, Anda bisa menentukan apakah akan menangani link tindakan email langsung dari aplikasi seluler saat diinstal, atau dari browser.

Untuk link yang dimaksudkan agar dibuka melalui aplikasi seluler, Anda harus mengaktifkan Firebase Dynamic Links dan melakukan beberapa tugas untuk mendeteksi link ini dari aplikasi seluler Anda. Baca petunjuk tentang cara mengonfigurasi Firebase Dynamic Links untuk tindakan email.

Untuk melakukan inisialisasi instance ActionCodeSettings, berikan data berikut:

Parameter Jenis Deskripsi
url string

Menetapkan link (status/continue URL) yang memiliki arti berbeda tergantung konteksnya:

  • Jika link ditangani di dalam widget tindakan web, ini adalah deep link dalam parameter kueri continueUrl.
  • Jika link langsung diproses di aplikasi, ini adalah parameter kueri continueUrl di deep link dari Dynamic Link.
iOS ({bundleId: string}|undefined) Menetapkan ID paket. Link akan dicoba dibuka dalam aplikasi Apple jika aplikasi tersebut sudah terinstal. Aplikasi harus terdaftar di Console.
android ({packageName: string, installApp:boolean|undefined, minimumVersion: string|undefined}|undefined) Menetapkan nama paket Android. Link akan dicoba dibuka dalam aplikasi Android jika aplikasi tersebut sudah terinstal. Jika installApp diteruskan, ini akan menentukan apakah aplikasi Android akan diinstal jika perangkatnya mendukung dan aplikasi tersebut belum terinstal. Jika kolom ini diisi tanpa packageName, akan muncul error yang menjelaskan bahwa packageName untuk kolom ini harus diisikan. Jika minimumVersion ditentukan, dan aplikasi versi yang lebih lama sudah diinstal, pengguna akan diarahkan ke Play Store untuk mengupgrade aplikasi tersebut. Aplikasi Android harus terdaftar di Console.
handleCodeInApp (boolean|undefined) Apakah link tindakan email akan dibuka di aplikasi seluler atau link web terlebih dahulu. Secara default, nilainya adalah false. Saat disetel ke true, link kode tindakan akan dikirim sebagai Link Universal atau Link Aplikasi Android dan akan dibuka oleh aplikasi jika sudah terinstal. Jika disetel ke false, kode akan dikirim ke widget web terlebih dulu, kemudian akan dialihkan ke aplikasi jika terinstal.
dynamicLinkDomain (string|undefined) Menetapkan domain (atau subdomain) link dinamis untuk digunakan link saat ini, jika domain link itu dibuka menggunakan Firebase Dynamic Links. Karena satu project dapat memiliki konfigurasi beberapa domain link dinamis, kolom ini memberi kemampuan untuk secara eksplisit memilih satu domain. Jika tidak ada yang disediakan, domain yang paling lama akan digunakan secara default.

Contoh berikut menggambarkan cara mengirimkan link verifikasi email yang akan dibuka di aplikasi seluler terlebih dahulu sebagai Firebase Dynamic Link (aplikasi Apple com.example.ios atau aplikasi Android com.example.android tempat aplikasi akan diinstal jika belum, dengan versi minimum 12). Deep link akan berisi payload continue URL https://www.example.com/checkout?cartId=1234. Domain link dinamis yang digunakan adalah coolapp.page.link, yang harus dikonfigurasi untuk digunakan dengan Firebase Dynamic Links.

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',
)

Go

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

Untuk mempelajari lebih lanjut, baca bagian Meneruskan Status dalam Tindakan Email.

Untuk membuat link reset sandi, berikan email pengguna yang ada dan objek ActionCodeSettings opsional. Operasi ini akan menghasilkan link tindakan email. Email yang digunakan harus merupakan milik pengguna yang ada.

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)

Go

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

Setelah dibuat, link tersebut dapat disertakan di dalam email reset sandi khusus, kemudian dikirim melalui email kepada pengguna terkait menggunakan server SMTP khusus.

Jika Anda tidak menggunakan halaman landing reset sandi default dan membuat pengendali khusus Anda sendiri, lihat cara membuat pengendali tindakan email khusus.

Untuk membuat link verifikasi email, berikan email pengguna yang belum diverifikasi dan objek ActionCodeSettings opsional. Operasi ini akan menghasilkan link tindakan email. Email yang digunakan harus merupakan milik pengguna yang ada.

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)

Go

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

Setelah dibuat, link tersebut dapat disertakan di dalam email verifikasi khusus, kemudian dikirim melalui email kepada pengguna terkait menggunakan server SMTP khusus.

Jika Anda tidak menggunakan halaman landing verifikasi email default dan membuat pengendali khusus Anda sendiri, lihat cara membuat pengendali tindakan email khusus.

Sebelum dapat mengautentikasi pengguna yang login dengan link email, Anda harus mengaktifkan login dengan link email untuk project Firebase Anda.

Untuk membuat link login, berikan email pengguna dan objek ActionCodeSettings. Dalam hal ini, objek ActionCodeSettings wajib ada untuk memberikan informasi halaman apa yang akan terbuka setelah pengguna mengklik link untuk penyelesaian proses login. Operasi ini akan menghasilkan link tindakan email.

Tidak seperti reset sandi dan verifikasi email, email yang digunakan tidak harus milik pengguna yang sudah ada, karena operasi ini dapat digunakan untuk mendaftarkan pengguna baru ke aplikasi Anda melalui link email.

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

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)

Go

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

Setelah dibuat, link tersebut dapat disertakan di dalam email login khusus, kemudian dikirim melalui email kepada pengguna terkait menggunakan server SMTP khusus.

Pelajari lebih lanjut cara mengautentikasi pengguna dengan Firebase menggunakan link email. Hal ini akan membantu memberikan informasi tentang cara menyelesaikan proses login, setelah pengguna mengklik link dan dialihkan kembali ke aplikasi.