Meneruskan Status dalam Tindakan Email

Anda dapat meneruskan status melalui continue URL saat mengirim tindakan email untuk mereset sandi atau memverifikasi email pengguna. Dengan begitu, pengguna dapat kembali ke aplikasi setelah tindakan selesai. Selain itu, Anda dapat menentukan apakah akan menangani link tindakan email langsung dari aplikasi seluler saat diinstal, bukan dari halaman web.

Hal ini bisa sangat berguna dalam skenario umum berikut:

  • Pengguna, yang tidak sedang login, mungkin mencoba mengakses konten yang mengharuskannya untuk login. Namun, pengguna mungkin lupa sandinya sehingga memicu proses reset sandi. Pada akhir proses, pengguna tersebut ingin kembali ke bagian aplikasi yang semula ingin diakses.

  • Aplikasi mungkin hanya menawarkan akses ke akun terverifikasi. Misalnya, aplikasi newsletter mungkin meminta pengguna untuk memverifikasi email sebelum berlangganan. Pengguna akan melalui alur verifikasi email dan kembali lagi ke aplikasi untuk menyelesaikan proses langganan mereka.

  • Secara umum, saat pengguna memulai reset sandi atau alur verifikasi email pada aplikasi Apple, mereka ingin menyelesaikan alur di dalam aplikasi; dengan kemampuan untuk meneruskan status melalui continue URL, hal ini bisa dilakukan.

Kemampuan dalam meneruskan status melalui continue URL merupakan fitur yang sangat bermanfaat dari Firebase Auth, yang memungkinkan pengguna untuk mendapatkan pengalaman yang jauh lebih baik.

Meneruskan status continue URL dalam tindakan email

Agar bisa meneruskan continue URL dengan aman, domain untuk URL harus diberi akses di Firebase console. Hal ini dilakukan di bagian Authentication dengan menambahkan domain ini ke daftar Authorized domains di bawah tab Sign-in method, jika domain tersebut belum ada di daftar.

Instance FIRActionCodeSettings harus diberikan saat mengirim email reset sandi atau email verifikasi. Antarmuka ini mengambil parameter berikut:

Swift

Parameter Jenis Deskripsi
URL String

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

  • Jika link ditangani di dalam widget tindakan web, ini adalah deep link dalam parameter kueri continueUrl.
  • Saat link ditangani di aplikasi secara langsung, ini adalah parameter kueri continueUrl di deep link dari link Hosting.
iOSBundleID String Menetapkan ID paket iOS untuk membantu Firebase Authentication dalam menentukan apakah harus membuat link khusus web atau link seluler yang terbuka di perangkat Apple
androidPackageName String Menetapkan nama paket Android untuk membantu Firebase Authentication dalam menentukan apakah harus membuat link khusus web atau link seluler yang terbuka di perangkat Android
handleCodeInApp Bool 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 dahulu, kemudian akan dialihkan ke aplikasi jika terinstal.
linkDomain String Jika domain link Hosting kustom ditetapkan untuk suatu project, tentukan domain yang akan digunakan saat link dibuka oleh aplikasi seluler tertentu. Jika tidak, domain default akan dipilih secara otomatis (misalnya, PROJECT_ID.firebaseapp.com).
dynamicLinkDomain String Tidak digunakan lagi. Jangan tentukan parameter ini.

Objective-C

Parameter Jenis Deskripsi
URL NSString

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

  • Jika link ditangani di dalam widget tindakan web, ini adalah deep link dalam parameter kueri continueUrl.
  • Saat link ditangani di aplikasi secara langsung, ini adalah parameter kueri continueUrl di deep link dari link Hosting.
iOSBundleID NSString Menetapkan ID paket iOS untuk membantu Firebase Authentication dalam menentukan apakah harus membuat link khusus web atau link seluler yang terbuka di perangkat Apple atau Android
androidPackageName NSString Menetapkan nama paket Android untuk membantu Firebase Authentication dalam menentukan apakah harus membuat link khusus web atau link seluler yang terbuka di perangkat Android atau Apple
handleCodeInApp BOOL 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.
linkDomain NSString Jika domain link Hosting kustom ditetapkan untuk suatu project, tentukan domain yang akan digunakan saat link dibuka oleh aplikasi seluler yang ditentukan. Jika tidak, domain default akan dipilih secara otomatis (misalnya, PROJECT_ID.firebaseapp.com).
dynamicLinkDomain NSString Tidak digunakan lagi. Jangan tentukan parameter ini.

Contoh berikut menggambarkan cara mengirimkan link verifikasi email yang akan dibuka di aplikasi seluler terlebih dahulu menggunakan domain link Hosting kustom custom-domain.com. Deep link akan berisi payload continue URL https://www.example.com/?email=user@example.com.

Swift

var actionCodeSettings =  ActionCodeSettings.init()
actionCodeSettings.canHandleInApp = true
let user = Auth.auth().currentUser()
actionCodeSettings.URL =
    String(format: "https://www.example.com/?email=%@", user.email)
actionCodeSettings.iOSbundleID = Bundle.main.bundleIdentifier!
actionCodeSettings.setAndroidPakageName("com.example.android")
// Specify a custom Hosting link domain to use. The domain must be
// configured in Firebase Hosting and owned by the project.
actionCodeSettings.linkDomain = "custom-domain.com"
user.sendEmailVerification(withActionCodeSettings:actionCodeSettings { error in
  if error {
    // Error occurred. Inspect error.code and handle error.
    return
  }
  // Email verification sent.
})

Objective-C

 FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init];
 actionCodeSettings.handleCodeInApp = YES;
 FIRUser *user = [FIRAuth auth].currentUser;
 NSString *urlString =
     [NSString stringWithFormat:@"https://www.example.com/?email=%@", user.email];
 actionCodeSettings.URL = [NSURL URLWithString:urlString];
 actionCodeSettings.iOSBundleID = [NSBundle mainBundle].bundleIdentifier;
// Specify a custom Hosting link domain to use. The domain must be
// configured in Firebase Hosting and owned by the project.
 actionCodeSettings.linkDomain = @"custom-domain.com";
 [actionCodeSettings setAndroidPackageName:@"com.example.android"];
 [user sendEmailVerificationWithActionCodeSettings:actionCodeSettings
                                        completion:^(NSError *_Nullable error) {
   if (error) {
     // Error occurred. Inspect error.code and handle error.
     return;
   }
   // Email verification sent.
 }];

Firebase Authentication menggunakan Firebase Hosting saat mengirim link yang dimaksudkan untuk dibuka di aplikasi seluler. Untuk menggunakan fitur ini, link Hosting perlu dikonfigurasi di Firebase console.

  1. Mengonfigurasi aplikasi Apple:

    1. Jika ingin menangani link ini dari aplikasi, Anda harus mengonfigurasi domain link Hosting sebagai Domain Terkait (Associated Domain) dalam kemampuan aplikasi Anda.
    2. Untuk mengetahui informasi selengkapnya, lihat Petunjuk Menerima Hosting links iOS.
  2. Mengonfigurasi aplikasi Android:

    1. Jika ingin menangani link ini dari aplikasi Android, Anda harus menentukan nama paket aplikasi di setelan project Firebase console. Selain itu, SHA-1 dan SHA-256 sertifikat aplikasi harus dimasukkan.
    2. Anda juga harus mengonfigurasi filter intent untuk deep link di file AndroidManifest.xml.
    3. Untuk mengetahui informasi selengkapnya, lihat petunjuk Menerima Hosting links Android.

Menangani tindakan email dalam aplikasi web

Anda dapat menentukan apakah akan menangani link kode tindakan dari aplikasi web terlebih dahulu, kemudian dialihkan ke halaman web atau aplikasi seluler lain setelah berhasil diselesaikan, jika aplikasi seluler tersedia. Hal ini dilakukan dengan menyetel handleCodeInApp menjadi false di objek FIRActionCodeSettings (Obj-C) atau ActionCodeSettings (Swift). Meskipun ID paket atau nama paket Android tidak diperlukan, namun jika diberikan, pengguna dapat dialihkan kembali ke aplikasi yang ditentukan saat penyelesaian kode tindakan email.

URL web yang digunakan di sini adalah yang dikonfigurasi di bagian template tindakan email. URL default disediakan untuk semua project. Baca artikel menyesuaikan pengendali email untuk mempelajari lebih lanjut cara menyesuaikan pengendali tindakan email.

Dalam kasus ini, link dalam parameter kueri continueURL akan menjadi link Hosting yang payload-nya adalah URL sebagaimana ditentukan dalam objek ActionCodeSettings.

Saat menangani tindakan email, seperti verifikasi email, kode tindakan dari parameter kueri oobCode harus diurai dari deep link, lalu diterapkan melalui applyActionCode agar perubahan diterapkan, yaitu email tersebut diverifikasi.

Menangani tindakan email dalam aplikasi seluler

Anda dapat menentukan apakah akan menangani link kode tindakan dalam aplikasi seluler Anda terlebih dahulu jika aplikasi tersebut sudah terinstal. Jika diklik dari perangkat yang tidak mendukung aplikasi seluler tersebut, link akan dibuka dari halaman web. Hal ini dilakukan dengan menyetel handleCodeInApp menjadi true di objek FIRActionCodeSettings (Obj-C) atau ActionCodeSettings (Swift). Nama paket Android atau ID paket dari aplikasi seluler itu juga harus ditentukan. Jika aplikasi seluler tidak tersedia, URL web fallback yang digunakan di sini adalah yang dikonfigurasi di bagian template tindakan email. URL default disediakan untuk semua project. Baca artikel menyesuaikan pengendali email untuk mempelajari lebih lanjut cara menyesuaikan pengendali tindakan email.

Dalam kasus ini, link aplikasi seluler yang dikirimkan kepada pengguna adalah link Hosting yang payload-nya adalah URL kode tindakan yang dikonfigurasi di Console, dengan parameter kueri oobCode, mode, apiKey, dan continueUrl. Parameter kueri yang disebut terakhir adalah URL asli yang ditentukan dalam objek FIRActionCodeSettings (Obj-C) atau ActionCodeSettings (Swift). Kode tindakan dapat diterapkan secara langsung dari aplikasi seluler, mirip dengan ketika ditangani dari alur web yang dijelaskan di bagian menyesuaikan pengendali email.

Saat menangani tindakan email, seperti verifikasi email, kode tindakan dari parameter kueri oobCode harus diurai dari deep link, lalu diterapkan melalui applyActionCode agar perubahan diterapkan, yaitu email tersebut diverifikasi.