E-posta Eylemlerinde Geçiş Durumu

Parola sıfırlamaları 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 eylem tamamlandıktan sonra uygulamaya geri dönme olanağı sağlar. Ayrıca, e-posta eylem bağlantısının, bir web sayfası yerine yüklendiğinde doğrudan bir mobil uygulamadan mı yönetileceğini belirtebilirsiniz.

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

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

  • 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çecek ve aboneliğini tamamlamak için uygulamaya geri dönmeyi bekleyecektir.

  • Genel olarak bir kullanıcı, bir Apple uygulamasında parola sıfırlama veya e-posta doğrulama akışını başlattığında, uygulamanın içindeki akışı tamamlamayı bekler; Devam URL'si yoluyla durum aktarma yeteneği bunu mümkün kılar.

Bir devam URL'si yoluyla durumu aktarma yeteneğine sahip olmak, Firebase Auth'un sağladığı ve kullanıcı deneyimini önemli ölçüde artırabilen güçlü bir özelliktir.

E-posta işlemlerinde durum/devam URL'sini geçirme

Devam eden bir URL'yi güvenli bir şekilde iletmek için, URL'ye ait alan adının Firebase konsolunda beyaz listeye alınması gerekir. Bu, Kimlik Doğrulama bölümünde, bu alan adı zaten mevcut değilse, Oturum açma yöntemi sekmesi altındaki Yetkili alanlar listesine eklenerek gerçekleştirilir.

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

Süratli

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.
iOSBundleID Sicim Paket kimliğini ayarlar. Bu, yüklüyse bağlantıyı bir Apple uygulamasında açmayı deneyecektir. 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, yüklüyse bağlantıyı bir Android uygulamasında açmaya çalışacaktır.
androidInstallIfNotAvailable Bool Cihaz destekliyorsa ve uygulama önceden yüklü değilse Android uygulamasının yüklenip yüklenmeyeceğini belirtir. Bu alan packageName olmadan sağlanırsa, packageName'in bu alanla birlikte sağlanması gerektiğini açıklayan bir hata atılır.
androidMinimumVersion Sicim Bu akışta desteklenen uygulamanın minimum sürümü. 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 Bool 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 Sicim 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 ilk alan adı kullanılır.

Amaç-C

Parametre Tip Tanım
URL NSString

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.
iOSBundleID NSString Paket kimliğini ayarlar. Bu, yüklüyse bağlantıyı bir Apple uygulamasında açmayı deneyecektir. Uygulamanın Konsola kaydedilmesi gerekiyor.
androidPackageName NSString Android paket adını ayarlar. Bu, yüklüyse bağlantıyı bir Android uygulamasında açmaya çalışacaktır.
androidInstallIfNotAvailable BOOL 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'in bu alanla birlikte sağlanması gerektiğini açıklayan bir hata atılır.
androidMinimumVersion NSString Bu akışta desteklenen uygulamanın minimum sürümü. 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 BOOL 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 NSString 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 ilk alan adı kullanılır.

Aşağıdaki örnek, özel dinamik bağlantı alanı example.page.link (iOS uygulaması com.example.ios veya Android uygulaması com.example.android Henüz yüklü değilse uygulamanın yükleneceği com.example.android ve minimum sürüm 12 ). Derin bağlantı, https://www.example.com/?email=user@example.com devam URL'si yükünü 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,
                                         minimumVersion:"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ıyı gönderirken Firebase Dinamik Bağlantılarını kullanır. Bu özelliği kullanabilmek için Firebase Konsolunda Dinamik Bağlantıların yapılandırılması gerekir.

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

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

      Zaten bir Dinamik Bağlantılar alanı oluşturduysanız bunu not edin. Dinamik Bağlantılar 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 olacaktır.

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

    1. Bu bağlantıları Android uygulamanızdan yönetmeyi planlıyorsanız Android paket 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 amaç filtresini de 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 yönetmeyi planlıyorsanız paket kimliğinin Firebase Konsolu proje ayarlarında belirtilmesi gerekir. Ayrıca App Store ID ve Apple Developer Team ID'nin de belirtilmesi gerekiyor.
    2. Ayrıca uygulama yeteneklerinizde FDL evrensel bağlantı etki alanını İlişkili Etki Alanı olarak yapılandırmanız gerekecektir.
    3. Uygulamanızı iOS 8 ve daha eski sürümlere dağıtmayı planlıyorsanız paket kimliğinizi, gelen URL'ler için özel bir şema olarak ayarlamanız gerekecektir.
    4. Bu konuda daha fazla bilgi için Apple platformlarının Dinamik Bağlantılarını Alma talimatlarına bakın.

Bir web uygulamasında e-posta eylemlerini yönetme

Mobil uygulamanın mevcut olması koşuluyla, eylem kodu bağlantısını önce bir web uygulamasından işlemek ve 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. Paket kimliği veya Android paket adı gerekli olmasa da bunların sağlanması, kullanıcının e-posta eylem kodunu tamamladığında belirtilen uygulamaya geri yönlendirmesine olanak tanır.

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

Bu durumda, continueURL sorgu parametresi içindeki bağlantı, yükü ActionCodeSettings nesnesinde belirtilen URL olan bir FDL bağlantısı olacaktır. Uygulamanızdan gelen bağlantıyı herhangi bir ek bağımlılık olmadan yakalayıp yönetebilseniz 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 işlemlerini gerçekleştirirken, değişikliğin etkili 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.

Mobil uygulamada e-posta işlemlerini yönetme

Eylem kodu bağlantısını, yüklü olması şartıyla öncelikle mobil uygulamanız içinde işlemek isteyip istemediğinizi belirtebilirsiniz. Android uygulamalarında, androidInstallIfNotAvailable aracılığıyla, cihazın desteklemesi ve halihazırda yüklü olmaması durumunda uygulamanın yükleneceğini belirtme olanağına da sahipsiniz. Bağlantıya 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 öğesinin true değerine ayarlanmasıyla yapılır. Mobil uygulamanın Android paket adının veya paket kimliğinin de belirtilmesi gerekecektir. Mobil uygulama mevcut olmadığında burada kullanılan yedek web URL'si, e-posta eylem şablonları bölümünde yapılandırılan URL'dir. Tüm projeler için varsayılan bir tane sağlanır. E-posta eylem işleyicisinin nasıl özelleştirileceği hakkında daha fazla bilgi edinmek için e-posta işleyicilerini özelleştirme konusuna bakın.

Bu durumda, kullanıcıya gönderilen mobil uygulama bağlantısı, yükü Konsolda oobCode , mode , apiKey ve continueUrl sorgu parametreleriyle yapılandırılan 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ıyı herhangi bir ek bağımlılık olmadan yakalayıp yönetebilseniz 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şleyicilerinin özelleştirilmesi bölümünde açıklanan web akışında nasıl işlendiğine benzer şekilde doğrudan bir mobil uygulamadan uygulanabilir.

E-posta doğrulaması gibi e-posta işlemlerini gerçekleştirirken, değişikliğin etkili 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.