E-posta İşlemi Bağlantıları Oluşturma

Mobil uygulamaların bazen kullanıcılarla etkileşim kurması ve onlardan, e-posta göndererek belirli işlemleri yapmalarını istemesi gerekir.

Firebase İstemci SDK'ları kullanıcılara şifre sıfırlama, e-posta adresi doğrulama ve e-posta tabanlı oturum açma için kullanabilecekleri bağlantıları içeren e-postalar gönderme olanağı sağlar. Bu şablon tabanlı e-postalar Google tarafından gönderilir ve sınırlı özelleştirilebilir.

Bunun yerine kendi e-posta şablonlarınızı ve kendi e-posta teslim hizmetinizi kullanmak istiyorsanız bu sayfada, yukarıdaki akışlar için işlem bağlantılarını programlı bir şekilde oluşturmak amacıyla Firebase Admin SDK'sının nasıl kullanılacağı açıklanmaktadır.

Bunun aşağıdaki avantajları vardır:

  • E-posta şablonlarını özelleştirin. Bu, yeni stiller ve özel marka öğeleri ekleme, ifadeleri ve logoları değiştirme, kullanıcılara tam ad yerine adlarıyla hitap etme vb. özellikleri içerir.
  • Bağlama göre farklı şablonlar uygulayabilirsiniz. Örneğin, kullanıcı bir bültene abone olmak için e-posta adresini doğrularsa e-posta içeriğinde bağlamın sağlanması gerekebilir. Başka bir örnek de e-postayla oturum açmadır: Bir senaryoda bu, aynı kullanıcı tarafından veya başka bir kullanıcı tarafından davet olarak tetiklenebilir. Bağlamın e-postaya eklenmesi gerekir.
  • Özelleştirilmiş e-posta şablonlarını yerelleştirin.
  • Güvenli bir sunucu ortamından bağlantı oluşturabilme özelliği.
  • Mobil uygulama veya tarayıcı aracılığıyla bağlantının nasıl açılacağını ve ek durum bilgilerinin nasıl iletileceğini vb. özelleştirebilme olanağı.
  • E-posta işlem bağlantısı oluşturulurken mobil uygulama akışları için kullanılan dinamik bağlantı alan adını özelleştirme ve hatta bağlama veya mobil uygulamaya bağlı olarak farklı bir dinamik bağlantı alan adı belirtme olanağı.

ActionCodeSettings'i başlatma

E-posta işlem bağlantısı oluşturmadan önce bir ActionCodeSettings örneğini ilk kullanıma hazırlamanız gerekebilir.

ActionCodeSettings, kullanıcı e-posta bağlantısını tıkladıktan sonra erişilebilen bir devam URL'si aracılığıyla ek durum iletmenize olanak tanır. Bu sayede kullanıcı, işlem tamamlandıktan sonra uygulamaya geri dönebilir. Ayrıca, e-posta işlem bağlantısının, yüklendiğinde doğrudan bir mobil uygulamadan mı yoksa bir tarayıcıdan mı işleneceğini belirtebilirsiniz.

Mobil uygulama üzerinden açılması amaçlanan bağlantılar için Firebase Dynamic Links'i etkinleştirmeniz ve bu bağlantıları mobil uygulamanızdan algılamak üzere bazı işlemler yapmanız gerekir. E-posta işlemleri için Firebase Dynamic Links'i yapılandırma talimatlarına bakın.

Bir ActionCodeSettings örneğini başlatmak için aşağıdaki verileri sağlayın:

Parametre Tür Açıklama
url dize

Farklı bağlamlarda farklı anlamlara gelen bağlantıyı (durum/devam URL'si) ayarlar:

  • Bağlantı, web işlemi widget'larında işlendiğinde bu, continueUrl sorgu parametresindeki derin bağlantıdır.
  • Bağlantı doğrudan uygulamada işlendiğinde bu, Dinamik Bağlantının derin bağlantısındaki continueUrl sorgu parametresidir.
iOS ({bundleId: string}|tanımsız) Paket kimliğini ayarlar. Bu işlem, bağlantıyı yüklü bir Apple uygulamasında açmaya çalışır. Uygulamanın Console'a kayıtlı olması gerekir.
android ({packageName: string, installApp:boole|undefined, minimumVersion: string|undefined}|undefined) Android paketi adını ayarlar. Bu işlem, bağlantıyı yüklü bir Android uygulamasında açmaya çalışır. installApp başarılı olursa cihaz tarafından destekleniyorsa ve uygulama zaten yüklü değilse Android uygulamasının yüklenip yüklenmeyeceğini belirtir. Bu alan, packageName olmadan sağlanırsa packageName öğesinin bu alanla birlikte sağlanması gerektiğini açıklayan bir hata verilir. minimumVersion belirtilirse ve uygulamanın daha eski bir sürümü yüklenirse kullanıcı uygulamayı yeni sürüme geçirmek için Play Store'a yönlendirilir. Android uygulamasının Console'da kayıtlı olması gerekir.
handleCodeInApp (boole|tanımsız) E-posta işlemi bağlantısının önce bir mobil uygulamada mı yoksa bir web bağlantısında mı açılacağı. Varsayılan değer, false (yanlış) değeridir. Doğru değerine ayarlandığında işlem kodu bağlantısı, Geçiş Bağlantısı veya Android Uygulama Bağlantısı olarak gönderilir ve yüklüyse uygulama tarafından açılır. Yanlış bir durumda kod önce web widget'ına gönderilir, ardından Devam'da yüklüyse uygulamaya yönlendirilir.
dynamicLinkDomain (dize|tanımsız) Mevcut bağlantı Firebase Dynamic Links kullanılarak açılacaksa dinamik bağlantı alan adını (veya alt alan adını) ayarlar. Proje başına birden fazla dinamik bağlantı alan adı yapılandırılabileceğinden bu alan açıkça bir alan seçme imkanı sağlar. Herhangi bir alan sağlanmazsa varsayılan olarak en eski alan kullanılır.

Aşağıdaki örnekte, önce bir mobil uygulamada Firebase Dynamic Link olarak açılacak e-posta doğrulama bağlantısının nasıl gönderileceği gösterilmektedir (Apple uygulaması com.example.ios veya com.example.android Android uygulaması; yüklü değilse bu uygulama yüklenecektir; minimum sürüm 12'dir). Derin bağlantı, https://www.example.com/checkout?cartId=1234 devam URL yükünü içerir. Kullanılan dinamik bağlantı alan adı coolapp.page.link (Firebase Dynamic Links ile kullanılmak üzere yapılandırılması gerekir).

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

Daha fazla bilgi için E-posta İşlemlerinde İletim Durumu bölümünü inceleyin.

Şifre sıfırlama bağlantısı oluşturmak için mevcut kullanıcının e-posta adresini ve isteğe bağlı bir ActionCodeSettings nesnesini sağlayın. İşlem, e-posta işlem bağlantısıyla çözülür. Kullanılan e-posta adresi mevcut bir kullanıcıya ait olmalıdır.

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

Bağlantı, oluşturulduktan sonra özel şifre sıfırlama e-postasına eklenebilir ve özel bir SMTP sunucusu kullanılarak ilgili kullanıcıya e-postayla gönderilebilir.

Varsayılan şifre sıfırlama açılış sayfasını kullanmıyorsanız ve kendi özel işleyicinizi oluşturmuyorsanız özel e-posta işlem işleyicileri oluşturma bölümüne bakın.

E-posta doğrulama bağlantısı oluşturmak için mevcut kullanıcının doğrulanmamış e-posta adresini ve isteğe bağlı bir ActionCodeSettings nesnesini sağlayın. Bu işlem, e-posta işlem bağlantısıyla çözülür. Kullanılan e-posta adresi mevcut bir kullanıcıya ait olmalıdır.

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

Bağlantı oluşturulduktan sonra özel doğrulama e-postasına eklenebilir ve özel bir SMTP sunucusu kullanılarak ilgili kullanıcıya e-postayla gönderilebilir.

Varsayılan e-posta doğrulaması açılış sayfasını kullanmıyorsanız ve kendi özel işleyicinizi oluşturuyorsanız özel e-posta işlem işleyicileri oluşturma bölümüne bakın.

E-posta bağlantısıyla oturum açarak kullanıcıların kimliğini doğrulayabilmeniz için önce Firebase projenizde e-posta bağlantısıyla oturum açmayı etkinleştirmeniz gerekir.

Oturum açma bağlantısı oluşturmak için kullanıcının e-posta adresini ve bir ActionCodeSettings nesnesini sağlayın. Bu durumda, oturum açma işlemini tamamlamak için bağlantı tıklandıktan sonra kullanıcının nereye döndürüleceği hakkında bilgi sağlamak amacıyla ActionCodeSettings nesnesi gerekir. Bu işlem, e-posta işlem bağlantısıyla çözülecektir.

Şifre sıfırlama ve e-posta doğrulamasından farklı olarak, kullanılan e-postanın mevcut bir kullanıcıya ait olması gerekmez. Çünkü bu işlem, uygulamanıza e-posta bağlantısı yoluyla yeni kullanıcılar kaydetmek için kullanılabilir.

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

Bağlantı oluşturulduktan sonra özel oturum açma e-postasına eklenebilir ve özel bir SMTP sunucusu kullanılarak ilgili kullanıcıya e-postayla gönderilebilir.

Firebase ile e-posta bağlantılarını kullanarak kullanıcıların kimliğini doğrulama hakkında daha fazla bilgi edinin. Bu, kullanıcı bağlantıyı tıklayıp uygulamaya tekrar yönlendirildikten sonra oturum açma işlemini nasıl tamamlayacağınızla ilgili bilgi sağlamaya yardımcı olur.