Buka konsol

Membuat Link Tindakan Email

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

SDK klien Firebase memberikan Anda kemampuan untuk mengirim email yang berisi link untuk penyetelan ulang sandi, verifikasi alamat email, dan login dengan email kepada pengguna. Email ini dikirim oleh Google dan memiliki kemampuan penyesuaian yang terbatas.

Jika ingin menggunakan template email Anda sendiri dan layanan pengiriman email Anda sendiri, Anda dapat menggunakan Firebase Admin SDK guna menghasilkan link tindakan secara terprogram untuk alur di atas, yang dapat Anda sertakan dalam email kepada 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, tergantung pada 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 inisialiasi ActionCodeSettings

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

ActionCodeSettings dapat Anda gunakan untuk 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-data berikut:

Parameter Jenis Deskripsi
url string

Menetapkan link (status/continue URL) yang memiliki arti berbeda dalam konteks lain:

  • Saat link ditangani di widget tindakan web, ini berupa deep link dalam parameter kueri continueUrl.
  • Saat link ditangani di aplikasi secara langsung, ini adalah parameter kueri continueUrl di deep link dalam Dynamic Link.
iOS ({bundleId: string}|undefined) Menetapkan ID paket iOS. Link di aplikasi iOS akan coba dibuka jika terinstal. Aplikasi iOS harus terdaftar di Console.
android ({packageName: string, installApp:boolean|undefined, minimumVersion: string|undefined}|undefined) Menetapkan nama paket Android. Link di aplikasi android akan coba dibuka jika 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 memasukkan packageName, akan muncul error yang menjelaskan bahwa packageName untuk kolom ini harus diisikan. Jika minimumVersion ditetapkan dan versi aplikasi yang lebih lama terinstal, pengguna akan diarahkan ke Play Store untuk mengupgrade aplikasi tersebut. Aplikasi Android harus terdaftar di Console.
handleCodeInApp (boolean|belum ditentukan) Baik link tindakan email akan dibuka di aplikasi seluler atau link web terlebih dulu, Defaultnya adalah SALAH. Saat disetel ke BENAR, link kode tindakan akan dikirim sebagai Universal Link atau Android App Link dan akan dibuka oleh aplikasi jika diinstal. Jika disetel ke SALAH, kode akan dikirim ke widget web terlebih dulu, kemudian akan dialihkan ke aplikasi jika terinstal.
dynamicLinkDomain (string|belum ditentukan) 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 beberapa konfigurasi 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 mengirim link verifikasi email yang akan dibuka di aplikasi seluler terlebih dahulu sebagai Firebase Dynamic Link (aplikasi iOS com.example.ios atau aplikasi Android com.example.android tempat aplikasi akan diinstal jika belum, dan versi minimumnya adalah versi 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",
}

Untuk mempelajari lebih lanjut, lihat Meneruskan Status dalam Tindakan Email.

Untuk membuat link penyetelan ulang 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';
admin.auth().generatePasswordResetLink(userEmail, actionCodeSettings)
  .then((link) => {
    // Construct password reset email template, embed the link and send
    // using custom SMTP server.
    return sendCustomPasswordResetEmail(email, 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.
  sendCustomPasswordResetEmail(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)

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

Jika Anda tidak menggunakan halaman landing penyetelan ulang 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 password reset link.
const email = 'user@example.com';
admin.auth().generatePasswordResetLink(email, actionCodeSettings)
  .then((link) => {
    // Construct password reset email template, embed the link and send
    // using custom SMTP server.
    return sendCustomPasswordResetEmail(email, displayName, link);
  })
  .catch((error) => {
    // Some error occurred.
  });

// Admin SDK API to generate the email verification link.
const useremail = 'user@example.com';
admin.auth().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.
  sendCustomPasswordResetEmail(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)

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 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 ke project Firebase Anda.

Untuk membuat link untuk 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 penyetelan ulang 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 usremail = 'user@example.com';
admin.auth().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.
  sendCustomPasswordResetEmail(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)

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.