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

Mobil uygulamaların bazen kullanıcılarla etkileşime geçmesi ve 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ğı sunar. Şablon tabanlı bu e-postalar Google tarafından gönderilir ve sınırlı özelleştirmeye sahiptir.

Bunun yerine kendi e-posta şablonlarınızı ve kendi e-posta yayınlama hizmetinizi kullanmak istiyorsanız bu sayfada, yukarıdaki akışlar için işlem bağlantılarını programatik olarak oluşturmak üzere Firebase Admin SDK'sını nasıl kullanacağınız açıklanmaktadır. Bu bağlantıları kullanıcılarınıza gönderdiğiniz e-postalara ekleyebilirsiniz.

Bu durum, şu avantajları sunar:

  • E-posta şablonlarını özelleştirebilirsiniz. Buna yeni stiller ve özel marka öğeleri ekleme, metinleri ve logoları değiştirme, kullanıcılara tam ad yerine adlarıyla hitap etme vb. özellikler dahildir.
  • Bağlama bağlı olarak farklı şablonlar uygulayın. Örneğin, kullanıcı bir bültene abone olmak için e-posta adresini doğruluyorsa e-posta içeriğinde bağlamın sağlanması gerekebilir. E-posta bağlantısı ile oturum açma da buna örnek verilebilir. Bu işlem, aynı kullanıcı tarafından veya başka bir kullanıcı tarafından davet olarak tetiklenebilir. Bağlam, e-postaya dahil edilmelidir.
  • Özelleştirilmiş e-posta şablonlarını yerelleştirme
  • Bağlantıyı güvenli bir sunucu ortamından oluşturma imkanı.
  • Bağlantının mobil uygulama veya tarayıcı üzerinden nasıl açılacağını ve ek durum bilgilerinin nasıl iletileceğini vb. özelleştirme olanağı
  • E-posta işlem 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 olanağı.

ActionCodeSettings'i başlatma

E-posta işlem 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 durum iletmenize olanak tanır. Bu sayede kullanıcı, işlem tamamlandıktan sonra uygulamaya geri dönebilir. Ayrıca, e-posta işleme bağlantısının, yüklü olduğunda doğrudan bir mobil uygulamadan mı yoksa 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 için bazı görevleri gerçekleştirmeniz 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 sahip olan bağlantıyı (durum/devam URL'si) belirler:

  • 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}|undefined) Paket kimliğini ayarlar. Bu işlem, yüklüyse bağlantıyı bir Apple uygulamasında açmaya çalışır. Uygulamanın Console'a kaydedilmiş olması gerekir.
android ({packageName: string, installApp:boolean|undefined, minimumVersion: string|undefined}|undefined) Android paket adını ayarlar. Bu işlem, bağlantıyı yüklüyse bir Android uygulamasında açmayı dener. installApp iletilirse Android uygulamasının, cihaz tarafından destekleniyorsa ve uygulama yüklü değilse yüklenip yüklenmeyeceği belirtilir. Bu alan packageName olmadan sağlanırsa packageName'nin bu alanla birlikte sağlanmasının gerektiğini açıklayan bir hata mesajı gösterilir. minimumVersion belirtilirse ve uygulamanın eski bir sürümü yüklüyse kullanıcı, uygulamayı yükseltmek için Play Store'a yönlendirilir. Android uygulamasının Console'a kaydedilmesi gerekir.
handleCodeInApp (boole|undefined) E-posta işlem bağlantısının önce mobil uygulamada mı yoksa web bağlantısında mı açılacağını belirtir. Varsayılan değer yanlıştır. 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ış durumda kod önce web widget'ına gönderilir ve ardından devam edildiğinde yüklüyse uygulamaya yönlendirilir.
dynamicLinkDomain (dize|undefined) Mevcut bağlantı Firebase Dynamic Links kullanılarak açılacaksa bağlantı için kullanılacak dinamik bağlantı alanını (veya alt alanını) belirler. Proje başına birden fazla dinamik bağlantı alanı yapılandırılabilir. Bu alan, birini açıkça seçmenize olanak tanır. Hiçbiri sağlanmazsa varsayılan olarak en eski alan adı kullanılır.

Aşağıdaki örnekte, önce mobil uygulamada Firebase dinamik bağlantısı olarak açılacak (uygulamanın yüklü olmadığı durumlarda yükleneceği ve minimum sürümün 12 olduğu Apple uygulaması com.example.ios veya Android uygulaması com.example.android) bir e-posta doğrulama bağlantısının nasıl gönderileceği gösterilmektedir. Derin bağlantı, devam URL'si yükü https://www.example.com/checkout?cartId=1234 içerir. Kullanılan dinamik bağlantı alanı coolapp.page.link'tir ve Firebase Dynamic Links ile kullanılmak üzere yapılandırılmalı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',
)

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 Durumu İle İlgili Bilgileri Aktarma başlıklı makaleyi 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 nesnesi sağlayın. İşlem, e-posta işlem bağlantısıyla çözülür. 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)

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 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ıyor ve kendi özel işleyicinizi oluşturmuyorsanız özel e-posta işlem işleyicileri oluşturma başlıklı makaleyi inceleyin.

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 nesnesi sağlayın. İşlem, e-posta işlem bağlantısıyla çözülür. 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)

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

Oluşturulan bağlantı, özel doğrulama e-postasına eklenip ö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 işlem işleyicileri oluşturma başlıklı makaleyi inceleyin.

Kullanıcıların kimliğini e-posta bağlantısı oturum açma özelliğiyle doğrulayabilmek için Firebase projeniz için e-posta bağlantısı oturum açma özelliğini etkinleştirmeniz gerekir.

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

Şifre sıfırlama ve e-posta doğrulamanın aksine, bu işlem e-posta bağlantısı aracılığıyla uygulamanıza yeni kullanıcılar kaydetmek için kullanılabileceğinden, kullanılan e-postanın mevcut bir kullanıcıya ait olması gerekmez.

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

Oluşturulan bağlantı, özel oturum açma e-postasına eklenip ö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ı kimliklerini doğrulama hakkında daha fazla bilgi edinin. Bu sayede, kullanıcı bağlantıyı tıklayıp uygulamaya geri yönlendirildikten sonra oturum açmanın nasıl tamamlanacağı hakkında bilgi verebilirsiniz.