E-posta Eylem Bağlantıları Oluşturma

Mobil uygulamaların bazen kullanıcılarla etkileşime girmesi ve e-posta göndererek onlardan belirli eylemleri gerçekleştirmelerini 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 özelleştirilebilirliği sınırlıdır.

Bunun yerine kendi e-posta şablonlarınızı ve kendi e-posta dağıtım hizmetinizi kullanmak istiyorsanız, bu sayfada, kullanıcılarınıza göndereceğiniz e-postalara ekleyebileceğiniz yukarıdaki akışlar için eylem bağlantılarını programlı bir şekilde oluşturmak üzere Firebase Admin SDK'nın nasıl kullanılacağı açıklanmaktadır.

Bu, aşağıdaki avantajlarla birlikte gelir:

  • E-posta şablonlarını özelleştirin. Bu, yeni stiller ve özel markalama ekleme, ifadeleri ve logoları değiştirme, kullanıcılara tam ad yerine adlarıyla hitap etme vb. özellikleri içerir.
  • Bağlama bağlı olarak farklı şablonlar uygulayın. Örneğin, kullanıcı bir bültene abone olmak için e-postasını doğruluyorsa, e-posta içeriğinde bağlamın sağlanması gerekebilir. Başka bir örnek, e-posta bağlantısıyla oturum açmadır: bir senaryoda bu, aynı kullanıcı tarafından veya başka bir kullanıcı tarafından davet olarak tetiklenebilir. İçeriğin e-postaya dahil edilmesi gerekir.
  • Özelleştirilmiş e-posta şablonlarını yerelleştirin.
  • Bağlantıyı güvenli bir sunucu ortamından oluşturma yeteneği.
  • Bağlantının bir mobil uygulama veya tarayıcı aracılığıyla nasıl açılacağını ve ek durum bilgilerinin vb. nasıl iletileceğini özelleştirme yeteneği.
  • E-posta eylem bağlantısını oluştururken mobil uygulama akışları için kullanılan dinamik bağlantı alanını özelleştirme ve hatta bağlama veya mobil uygulamaya bağlı olarak farklı bir dinamik bağlantı alanı belirtme yeteneği.

ActionCodeSettings'i Başlat

Bir e-posta eylem bağlantısı oluşturmadan önce bir ActionCodeSettings örneğini başlatmanı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 durumu aktarmanıza olanak tanır. Bu aynı zamanda kullanıcıya eylem tamamlandıktan sonra uygulamaya geri dönme olanağı da sağlar. Ayrıca, e-posta eylem bağlantısının yüklendiğinde doğrudan bir mobil uygulamadan mı yoksa bir tarayıcıdan mı yönetileceğini belirtebilirsiniz.

Mobil uygulama aracılığıyla açılması amaçlanan bağlantılar için Firebase Dinamik Bağlantılarını etkinleştirmeniz ve bu bağlantıları mobil uygulamanızdan tespit etmek için bazı görevleri gerçekleştirmeniz gerekir. E-posta işlemleri için Firebase Dinamik Bağlantılarının nasıl yapılandırılacağına ilişkin talimatlara bakın.

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

Parametre Tip Tanım
url sicim

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

  • Bağlantı web eylemi 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, yüklüyse bağlantıyı bir Apple uygulamasında açmayı deneyecektir. Uygulamanın Konsola kaydedilmesi gerekiyor.
android ({packageName: string, installApp:boolean|untanımsız, minimumVersion: string|untanımsız}|tanımsız) Android paket adını ayarlar. Bu, yüklüyse bağlantıyı bir Android uygulamasında açmayı deneyecektir. installApp iletilirse, cihazın desteklemesi ve uygulamanın önceden yüklü olmaması durumunda Android uygulamasının yüklenip yüklenmeyeceğini belirtir. Bu alan packageName olmadan sağlanırsa, packageName bu alanla birlikte sağlanması gerektiğini açıklayan bir hata atılır. minimumVersion belirtilirse ve uygulamanın daha eski bir sürümü yüklüyse kullanıcı, uygulamayı yükseltmesi için Play Store'a yönlendirilir. Android uygulamasının Konsola kaydedilmesi gerekiyor.
handleCodeInApp (boolean|tanımsız) E-posta işlem bağlantısının önce bir mobil uygulamada mı yoksa bir web bağlantısında mı açılacağı. Varsayılan yanlıştır. Doğru olarak ayarlandığında eylem kodu bağlantısı Evrensel Bağlantı veya Android Uygulama Bağlantısı olarak gönderilecek ve yüklenmişse uygulama tarafından açılacaktır. Yanlış durumda, kod önce web widget'ına gönderilecek ve ardından devamında, yüklüyse uygulamaya yönlendirilecektir.
dynamicLinkDomain (dize|tanımsız) Geçerli bağlantının Firebase Dynamic Links kullanılarak açılması durumunda kullanılacak dinamik bağlantı alanını (veya alt alan adını) ayarlar. Proje başına birden fazla dinamik bağlantı alanı yapılandırılabildiğinden, bu alan açıkça bir tanesini seçme olanağı sağlar. Hiçbiri sağlanmazsa varsayılan olarak en eski alan adı kullanılır.

Aşağıdaki örnek, bir mobil uygulamada ilk olarak Firebase Dynamic Link (Apple app com.example.ios veya Android app com.example.android olarak açılacak bir e-posta doğrulama bağlantısının nasıl gönderileceğini gösterir; burada uygulama henüz yüklü değilse yüklenecektir ve minimum sürüm 12'dir). Derin bağlantı, https://www.example.com/checkout?cartId=1234 devam URL'si yükünü içerecektir. Kullanılan dinamik bağlantı alanı, Firebase Dynamic Links ile kullanılmak üzere yapılandırılması gereken coolapp.page.link alanıdır.

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

Gitmek

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 edinmek için E-posta Eylemlerinde Geçiş Durumu'na bakın.

Parola 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 eylem bağlantısıyla çözümlenecektir. Kullanılan e-posta 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)

Gitmek

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 ardından ö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 eylem işleyicileri oluşturma konusuna bakın.

Bir 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. İşlem, e-posta eylem bağlantısıyla çözümlenecektir. Kullanılan e-posta 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)

Gitmek

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 ardından özel bir SMTP sunucusu kullanılarak ilgili kullanıcıya e-postayla gönderilebilir.

Varsayılan e-posta doğrulama açılış sayfasını kullanmıyorsanız ve kendi özel işleyicinizi oluşturmuyorsanız, özel e-posta eylem işleyicileri oluşturma konusuna bakın.

Kullanıcıların kimliklerini e-posta bağlantısıyla oturum açmayla doğrulayabilmeniz için, Firebase projeniz için 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 ActionCodeSettings nesnesinin, oturum açma işleminin tamamlanması için bağlantı tıklatıldıktan sonra kullanıcının nereye döndürüleceği hakkında bilgi sağlaması gerekir. İşlem, e-posta eylem bağlantısıyla çözümlenecektir.

Parola sıfırlama ve e-posta doğrulamanın aksine, kullanılan e-postanın mutlaka mevcut bir kullanıcıya ait olması gerekmez; çünkü bu işlem, yeni kullanıcıları e-posta bağlantısı aracılığıyla uygulamanıza 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)

Gitmek

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 ardından özel bir SMTP sunucusu kullanılarak ilgili kullanıcıya e-postayla gönderilebilir.

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