E-posta Eylemlerinde Geçiş Durumu

Parola sıfırlama için e-posta eylemleri gönderirken veya bir kullanıcının e-postasını doğrularken, durumu bir devam URL'si aracılığıyla iletebilirsiniz. Bu, kullanıcıya işlem tamamlandıktan sonra uygulamaya geri dönme olanağı sağlar. Ayrıca, bir web sayfası yerine yüklendiğinde e-posta eylemi bağlantısının doğrudan bir mobil uygulamadan işlenip işlenmediğini belirleyebilirsiniz.

Bu, aşağıdaki yaygın senaryolarda son derece yararlı olabilir:

  • Şu anda oturum açmamış bir kullanıcı, kullanıcının oturum açmasını gerektiren içeriğe erişmeye çalışıyor olabilir. Ancak, kullanıcı parolasını unutmuş olabilir ve bu nedenle parola sıfırlama akışını tetikleyebilir. Akışın sonunda kullanıcı, uygulamanın erişmeye çalıştığı bölüme geri dönmeyi umuyor.

  • Bir uygulama yalnızca doğrulanmış hesaplara erişim sunabilir. Örneğin, bir haber bülteni uygulaması, kullanıcının abone olmadan önce e-postasını doğrulamasını gerektirebilir. Kullanıcı, e-posta doğrulama akışından geçer ve aboneliğini tamamlamak için uygulamaya geri dönmesini bekler.

  • Genel olarak, bir kullanıcı bir Apple uygulamasında parola sıfırlama veya e-posta doğrulama akışı başlattığında, uygulama içindeki akışı tamamlamayı bekler; durumu devam URL'si aracılığıyla iletme yeteneği bunu mümkün kılar.

Durumu bir devam URL'si aracılığıyla iletme yeteneğine sahip olmak, Firebase Auth'un sağladığı ve kullanıcı deneyimini önemli ölçüde iyileştirebilen güçlü bir özelliktir.

E-posta işlemlerinde durum/devam URL'sini iletme

Bir devam URL'sini güvenli bir şekilde iletmek için, URL'nin alan adının Firebase konsolunda beyaz listeye alınması gerekir. Bu, Kimlik Doğrulama bölümünde, bu etki alanı henüz orada değilse, Oturum açma yöntemi sekmesi altındaki Yetkili etki alanları listesine eklenerek yapılır.

Parola sıfırlama e-postası veya doğrulama e-postası gönderilirken bir FIRActionCodeSettings örneğinin sağlanması gerekir. Bu arayüz aşağıdaki parametreleri alır:

Süratli

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.
iOSBundleID Sicim 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. Paket Kimliği sağlanmazsa, bu alanın değeri Uygulamanın ana paketinin paket kimliğine ayarlanır.
androidPackageName Sicim Android paket adını ayarlar. Bu, kuruluysa, bağlantıyı bir android uygulamasında açmaya çalışacaktır.
androidInstallIfNotAvailable bool Cihaz destekliyorsa ve uygulama zaten yüklü değilse Android uygulamasının yüklenip yüklenmeyeceğini belirtir. Bu alan paketAdı olmadan sağlanırsa, paketAdı'nın bu alanla birlikte sağlanması gerektiğini açıklayan bir hata verilir.
androidMinimumVersion Sicim Bu akışta desteklenen uygulamanın minimum sürümü. 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 bool 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 Sicim 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 ilk etki alanı kullanılır.

Amaç-C

Parametre Tip Açıklama
URL NSString

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.
iOSBundleID NSString 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.
androidPackageName NSString Android paket adını ayarlar. Bu, kuruluysa, bağlantıyı bir android uygulamasında açmaya çalışacaktır.
androidInstallIfNotAvailable BOOL cihaz destekliyorsa ve uygulama zaten yüklü değilse Android uygulamasının yüklenip yüklenmeyeceğini belirtir. Bu alan paketAdı olmadan sağlanırsa, paketAdı'nın bu alanla birlikte sağlanması gerektiğini açıklayan bir hata verilir.
androidMinimumVersion NSString Bu akışta desteklenen uygulamanın minimum sürümü. 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 BOOL 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 NSString 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 ilk etki alanı kullanılır.

Aşağıdaki örnek, özel dinamik bağlantı etki alanı example.page.link (iOS uygulaması com.example.ios veya Android uygulaması com.example.android , önceden yüklenmemişse uygulamanın yükleneceği yer ve minimum sürüm 12 ). Derin bağlantı, devam URL yükünü https://www.example.com/?email=user@example.com içerecektir.

Süratli


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",
                                         installIfNotAvailable:true,
                                         minumumVersion:"12")
// When multiple custom dynamic link domains are defined, specify which one to use.
actionCodeSettings.dynamicLinkDomain = "example.page.link"
user.sendEmailVerification(withActionCodeSettings:actionCodeSettings { error in
  if error {
    // Error occurred. Inspect error.code and handle error.
    return
  }
  // Email verification sent.
})

Amaç-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;
 // When multiple custom dynamic link domains are defined, specify which one to use.
 actionCodeSettings.dynamicLinkDomain = @"example.page.link";
 [actionCodeSettings setAndroidPackageName:@"com.example.android"
                     installIfNotAvailable:YES
                            minimumVersion:'12'];
 [user sendEmailVerificationWithActionCodeSettings:actionCodeSettings
                                        completion:^(NSError *_Nullable error) {
   if (error) {
     // Error occurred. Inspect error.code and handle error.
     return;
   }
   // Email verification sent.
 }];

Firebase Auth, bir mobil uygulamada açılması amaçlanan bir bağlantı gönderirken Firebase Dynamic Links'i kullanır. Bu özelliği kullanmak için Firebase Konsolunda Dinamik Bağlantıların yapılandırılması gerekir.

  1. Firebase Dinamik Bağlantılarını Etkinleştirin:

    1. Firebase konsolunda , Dinamik Bağlantılar bölümünü açın.
    2. Henüz Dynamic Links şartlarını kabul etmediyseniz ve bir Dynamic Links etki alanı oluşturduysanız, bunu şimdi yapın.

      Zaten bir Dinamik Bağlantılar alanı oluşturduysanız, bunu not alın. Bir Dynamic Links etki alanı genellikle aşağıdaki örneğe benzer:

      example.page.link

      Apple veya Android uygulamanızı gelen bağlantıyı kesecek şekilde yapılandırırken bu değere ihtiyacınız olacak.

  2. Android uygulamalarını yapılandırma:

    1. Bu bağlantıları Android uygulamanızdan ele almayı planlıyorsanız, Android paketi adının Firebase Konsolu proje ayarlarında belirtilmesi gerekir. Ayrıca başvuru sertifikasının SHA-1 ve SHA-256'sının sağlanması gerekmektedir.
    2. Ayrıca AndroidManifest.xml dosyanızdaki derin bağlantı için niyet filtresini yapılandırmanız gerekecektir.
    3. Bununla ilgili daha fazla bilgi için Android Dinamik Bağlantılarını Alma talimatlarına bakın.
  3. Apple uygulamalarını yapılandırma:

    1. Bu bağlantıları uygulamanızdan ele almayı planlıyorsanız, paket kimliğinin Firebase Konsolu proje ayarlarında belirtilmesi gerekir. Ayrıca App Store ID ve Apple Developer Team ID de belirtilmelidir.
    2. Ayrıca FDL evrensel bağlantı etki alanını, uygulama yeteneklerinizde İlişkili Etki Alanı olarak yapılandırmanız gerekecektir.
    3. Uygulamanızı iOS 8 ve altı sürümlerine dağıtmayı planlıyorsanız, paket kimliğinizi gelen URL'ler için özel bir şema olarak ayarlamanız gerekir.
    4. Bununla ilgili daha fazla bilgi için Apple platformları Dinamik Bağlantıları alma talimatlarına bakın.

Bir web uygulamasında e-posta eylemlerini işleme

Mobil uygulamanın kullanılabilir olması koşuluyla, önce bir web uygulamasından eylem kodu bağlantısını ele almak ve ardından başarılı bir şekilde tamamlandıktan sonra başka bir web sayfasına veya mobil uygulamaya yönlendirmek isteyip istemediğinizi belirtebilirsiniz. Bu, FIRActionCodeSettings (Obj-C) veya ActionCodeSettings (Swift) nesnesinde handleCodeInApp öğesini false olarak ayarlayarak yapılır. Bir paket kimliği veya Android paket adı gerekli olmasa da, bunların sağlanması, kullanıcının e-posta işlem kodu tamamlandığında belirtilen uygulamaya yeniden yönlendirme yapmasına olanak tanır.

Burada kullanılan web URL'si, e-posta eylem şablonları bölümünde yapılandırılandır. Tüm projeler için varsayılan bir tane sağlanır. E-posta eylemi işleyicisinin nasıl özelleştirileceği hakkında daha fazla bilgi edinmek için e-posta işleyicilerini özelleştirmeye bakın.

Bu durumda, continueURL sorgu parametresindeki bağlantı, yükü ActionCodeSettings nesnesinde belirtilen URL olan bir FDL bağlantısı olacaktır. Uygulamanızdan gelen bağlantıya herhangi bir ek bağımlılık olmadan müdahale edip işleyebilseniz de, derin bağlantıyı sizin için ayrıştırmak için FDL istemci kitaplığını kullanmanızı öneririz.

E-posta doğrulaması gibi e-posta eylemlerini işlerken, değişikliğin geçerli olması, yani e-postanın doğrulanması için oobCode sorgu parametresindeki eylem kodunun derin bağlantıdan ayrıştırılması ve ardından applyActionCode aracılığıyla uygulanması gerekir.

Bir mobil uygulamada e-posta işlemlerini işleme

Eylem kodu bağlantısını, yüklü olması koşuluyla, öncelikle mobil uygulamanızda işlemek isteyip istemediğinizi belirtebilirsiniz. Android uygulamaları ile ayrıca androidInstallIfNotAvailable aracılığıyla, uygulamanın cihaz destekliyorsa ve halihazırda kurulu değilse kurulacağını belirtme olanağına da sahipsiniz. Bağlantı, mobil uygulamayı desteklemeyen bir cihazdan tıklanırsa, bunun yerine bir web sayfasından açılır. Bu, FIRActionCodeSettings (Obj-C) veya ActionCodeSettings (Swift) nesnesinde handleCodeInApp öğesini true olarak ayarlayarak yapılır. Mobil uygulamanın Android paket adının veya paket kimliğinin de belirtilmesi gerekir. Mobil uygulama olmadığında burada kullanılan yedek web URL'si, e-posta eylem şablonları bölümünde yapılandırılandır. Tüm projeler için varsayılan bir tane sağlanır. E-posta eylemi işleyicisinin nasıl özelleştirileceği hakkında daha fazla bilgi edinmek için e-posta işleyicilerini özelleştirmeye bakın.

Bu durumda, kullanıcıya gönderilen mobil uygulama bağlantısı, oobCode , mode , apiKey ve continueUrl sorgu parametreleriyle Konsolda yapılandırılan, yükü eylem kodu URL'si olan bir FDL bağlantısı olacaktır. İkincisi, FIRActionCodeSettings (Obj-C) veya ActionCodeSettings (Swift) nesnesinde belirtilen orijinal URL olacaktır. Uygulamanızdan gelen bağlantıya herhangi bir ek bağımlılık olmadan müdahale edip işleyebilseniz de, derin bağlantıyı sizin için ayrıştırmak için FDL istemci kitaplığını kullanmanızı öneririz. Eylem kodu, e-posta işleyicilerini özelleştirme bölümünde açıklanan web akışından nasıl işlendiğine benzer şekilde doğrudan bir mobil uygulamadan uygulanabilir.

E-posta doğrulaması gibi e-posta eylemlerini işlerken, değişikliğin geçerli olması, yani e-postanın doğrulanması için oobCode sorgu parametresindeki eylem kodunun derin bağlantıdan ayrıştırılması ve ardından applyActionCode aracılığıyla uygulanması gerekir.