Check out what’s new from Firebase at Google I/O 2022. Learn more

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

Mobil uygulamaların bazen kullanıcılarla etkileşime girmesi ve e-posta göndererek belirli eylemleri gerçekleştirmelerini istemesi gerekir.

Firebase Admin SDK'ları , kullanıcılara parola 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 e-postalar Google tarafından gönderilir ve sınırlı özelleştirilebilirliğe sahiptir.

Bunun yerine kendi e-posta şablonlarınızı ve kendi e-posta dağıtım hizmetinizi kullanmak istiyorsanız, yukarıdaki akışlar için kullanıcılarınıza göndereceğiniz e-postalara ekleyebileceğiniz eylem bağlantılarını programlı olarak oluşturmak için Firebase Admin SDK'sını kullanabilirsiniz.

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

  • E-posta şablonlarını özelleştirin. Bu, yeni stiller ve özel marka ekleme, ifadeleri ve logoları değiştirme, kullanıcılara tam ad yerine adlarıyla hitap etme vb.
  • Bağlama bağlı olarak farklı şablonlar uygulayın. Örneğin, kullanıcı bir haber bültenine 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ı 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şturabilme.
  • Bir 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ştirme yeteneği.
  • E-posta eylemi 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 eylemi bağlantısı oluşturabilmeniz için 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 iletmenize izin verir. Bu aynı zamanda kullanıcıya işlem tamamlandıktan sonra uygulamaya geri dönme olanağı sağlar. Ek olarak, e-posta eylemi bağlantısının yüklendiğinde doğrudan bir mobil uygulamadan mı yoksa bir tarayıcıdan mı ele alınacağını belirtebilirsiniz.

Bir mobil uygulama aracılığıyla 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 eylemleri 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 Açıklama
url sicim

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

  • Bağlantı, web eylemi pencere öğelerinde 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: dize}|tanımsız) Paket kimliğini ayarlar. Bu, yüklüyse bağlantıyı bir Apple uygulamasında açmaya çalışacaktır. Uygulamanın Konsola kaydedilmesi gerekiyor.
android ({packageName: string, installApp:boolean|tanımsız, minimumVersion: string|tanımsız}|tanımsız) Android paket adını ayarlar. Bu, yüklüyse bağlantıyı bir Android uygulamasında açmaya çalışacaktır. installApp iletilirse, cihaz destekliyorsa 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 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ı yükseltmek için Play Store'a götürülür. Android uygulamasının Konsola kaydedilmesi gerekir.
handleCodeInApp (boolean|tanımsız) E-posta eylemi 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. True olarak ayarlandığında, eylem kodu bağlantısı Evrensel Bağlantı veya Android Uygulama Bağlantısı olarak gönderilir ve kuruluysa 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|tanımsız) Firebase Dynamic Links kullanılarak açılacaksa, geçerli bağlantı için kullanılacak dinamik bağlantı etki alanını (veya alt etki alanını) ayarlar. Proje başına birden çok dinamik bağlantı alanı yapılandırılabildiğinden, bu alan açıkça birini seçme olanağı sağlar. Hiçbiri sağlanmazsa, varsayılan olarak en eski alan kullanılır.

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

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

piton

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 konusuna bakın.

Parola sıfırlama bağlantısı oluşturmak için mevcut kullanıcının e-postasını ve isteğe bağlı ActionCodeSettings nesnesini sağlayın. İşlem, e-posta eylemi bağlantısıyla çözülecektir. 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());
}

piton

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 parola 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 parola sıfırlama açılış sayfasını kullanmıyorsanız ve kendi özel işleyicinizi oluşturmuyorsanız, bkz. özel e-posta eylemi işleyicileri oluşturma .

Bir e-posta doğrulama bağlantısı oluşturmak için mevcut kullanıcının doğrulanmamış e-postasını ve isteğe bağlı bir ActionCodeSettings nesnesini sağlayın. İşlem, e-posta eylemi bağlantısıyla çözülecektir. 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());
}

piton

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-posta ile 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 eylemi işleyicileri oluşturma konusuna bakın.

Kullanıcıların e-posta bağlantısı ile oturum açma kimliklerini doğrulamadan önce, Firebase projeniz için e-posta bağlantısı oturum açmayı etkinleştirmeniz gerekir.

Bir oturum açma bağlantısı oluşturmak için kullanıcının e-postasını ve bir ActionCodeSettings nesnesini sağlayın. ActionCodeSettings nesnesi, 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 için gereklidir. İşlem, e-posta eylemi bağlantısıyla çözülecektir.

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

piton

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-posta ile 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ıkladıktan ve uygulamaya yeniden yönlendirildikten sonra oturum açmanın nasıl tamamlanacağı hakkında bilgi sağlamaya yardımcı olacaktır.