E-posta İşlemlerinde Durumu Aktarma

Şifre sıfırlama için e-posta işlemleri gönderirken veya bir kullanıcının e-postasını doğrularken durumu devam URL'si ile iletebilirsiniz. Bu sayede kullanıcı, işlem tamamlandıktan sonra uygulamaya geri dönebilir. Buna ek olarak, e-posta işlem bağlantısının bir web sayfası yerine yüklendiğinde doğrudan bir mobil uygulamadan işlenip işlenmeyeceğini belirtebilirsiniz.

Bu, aşağıdaki sık karşılaşılan senaryolarda son derece yararlı olabilir:

  • Oturumu açık olmayan bir kullanıcı, oturum açmasını gerektiren içeriğe erişmeye çalışıyor olabilir. Ancak kullanıcı, şifresini unutmuş olabilir ve bu nedenle şifre sıfırlama akışını tetikleyebilir. Akışın sonunda kullanıcı, uygulamanın erişmeye çalıştığı bölüme geri dönmeyi bekler.

  • Uygulamalar yalnızca doğrulanmış hesaplara erişim sunabilir. Örneğin, bir bültende kullanıcının abone olmadan önce e-posta adresini doğrulaması gerekebilir. Kullanıcı, e-posta doğrulama akışından geçer ve aboneliğini tamamlamak için uygulamaya geri dönmeyi bekler.

  • Diğer durumlarda da kullanıcı, akışı mobil cihazından başlatmış ve doğrulamadan sonra tarayıcı yerine mobil uygulamasına dönmesini bekleyebilir.

Devam URL'si aracılığıyla durum aktarma imkanı, Firebase Auth'un sağladığı ve kullanıcı deneyimini önemli ölçüde iyileştirebilecek güçlü bir özelliktir.

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

Devam eden bir URL'nin güvenli bir şekilde iletilebilmesi için URL alanının Firebase konsolunda Yetkili alan olarak eklenmesi gerekir. Bu işlem, Oturum açma yöntemi sekmesinin altındaki Yetkili alanlar listesine bu alanı ekleyerek Kimlik Doğrulama bölümünde yapılır.

Şifre sıfırlama e-postası veya doğrulama e-postası gönderilirken firebase.auth.ActionCodeSettings örneği sağlanmalıdır. Bu arayüz aşağıdaki parametreleri alır:

Parametre Tür Açıklama
url dize

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

  • 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}|tanımsız) iOS paket kimliğini ayarlar. Bu işlem, bağlantı yüklüyse bir iOS uygulamasında açılmaya çalışır. iOS uygulamasının Console'a kayıtlı olması gerekir.
android ({packageName: string, installApp:boole|undefined, minimumVersion: string|undefined}|undefined) Android paketi adını ayarlar. Bu işlem, bağlantıyı yüklü bir Android uygulamasında açmaya çalışır. installApp başarılı olursa, 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 öğesinin 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ı yeni sürüme geçirmek için Play Store'a yönlendirilir. Android uygulamasının Console'da kayıtlı olması gerekir.
handleCodeInApp (boole|tanımsız) E-posta işlemi bağlantısının önce bir mobil uygulamada mı yoksa bir web bağlantısında mı açılacağı. Varsayılan değer, false (yanlış) değeridir. 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ış bir durumda kod önce web widget'ına gönderilir, ardından Devam'da yüklüyse uygulamaya yönlendirilir.
dynamicLinkDomain (dize|tanımsız) Mevcut bağlantı Firebase Dynamic Links kullanılarak açılacaksa dinamik bağlantı alan adını (veya alt alan adını) ayarlar. Proje başına birden fazla dinamik bağlantı alan adı yapılandırılabileceğinden bu alan açıkça bir alan seçme imkanı sağlar. Herhangi bir alan sağlanmazsa varsayılan olarak ilk alan kullanılır.

Aşağıdaki örnekte, özel dinamik bağlantı alan adı example.page.link kullanılarak önce bir mobil uygulamada Firebase Dinamik Bağlantı olarak açılacak bir e-posta doğrulama bağlantısının nasıl gönderileceği gösterilmektedir (uygulamanın yüklü olmadığı ve minimum sürüm 12 olduğu durumlarda, uygulamanın yükleneceği iOS uygulaması com.example.ios veya Android uygulaması com.example.android). Derin bağlantı, devam URL yükünü https://www.example.com/?email=user@example.com içerir.

var actionCodeSettings = {
  url: 'https://www.example.com/?email=' + firebase.auth().currentUser.email,
  iOS: {
    bundleId: 'com.example.ios'
  },
  android: {
    packageName: 'com.example.android',
    installApp: true,
    minimumVersion: '12'
  },
  handleCodeInApp: true,
  // When multiple custom dynamic link domains are defined, specify which
  // one to use.
  dynamicLinkDomain: "example.page.link"
};
firebase.auth().currentUser.sendEmailVerification(actionCodeSettings)
  .then(function() {
    // Verification email sent.
  })
  .catch(function(error) {
    // Error occurred. Inspect error.code.
  });

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

  1. Firebase Dynamic Links'i 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 alan adı oluşturmadıysanız bunu hemen yapın.

      Daha önce bir Dynamic Links alan oluşturduysanız bunu not edin. Dynamic Links alan adı genellikle aşağıdaki örnek gibi görünür:

      example.page.link

      Apple veya Android uygulamanızı gelen bağlantıya müdahale edecek ş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 işlemeyi planlıyorsanız Firebase konsolu proje ayarlarında Android paket adını belirtmeniz gerekir. Ayrıca, uygulama sertifikasının SHA-1 ve SHA-256'sının sağlanması gerekir.
    2. Ayrıca, AndroidManifest.xml dosyanızdaki derin bağlantı için intent filtresini yapılandırmanız gerekir.
    3. Bu konu hakkında daha fazla bilgi için Android Dynamic Links'i alma talimatlarını inceleyin.
  3. iOS uygulamalarını yapılandırma:

    1. Bu bağlantıları iOS uygulamanızdan işlemeyi planlıyorsanız iOS paket kimliğinin Firebase Konsolu proje ayarlarında belirtilmesi gerekir. App Store Kimliği ve Apple Geliştirici Ekibi Kimliğinin de belirtilmesi gerekir.
    2. Ayrıca, uygulama özelliklerinizde FDL evrensel bağlantı alanını İlişkili alan olarak yapılandırmanız gerekir.
    3. Uygulamanızı iOS 8 ve daha eski sürümlere dağıtmayı planlıyorsanız iOS paket kimliğinizi, gelen URL'ler için özel şema olarak ayarlamanız gerekir.
    4. Bu konu hakkında daha fazla bilgi için iOS Dynamic Links'i alma talimatlarını inceleyin.

Web uygulamasındaki e-posta işlemlerini işleme

İşlem kodu bağlantısını önce bir web uygulamasından işleyip işlemeyi başarıyla tamamladıktan sonra, mobil uygulamanın kullanılabilir olması koşuluyla başka bir web sayfasına veya mobil uygulamaya yönlendirme yapmak isteyip istemediğinizi belirtebilirsiniz. Bu işlem, firebase.auth.ActionCodeSettings nesnesinde handleCodeInApp politikası false değerine ayarlanarak yapılır. iOS paket kimliği veya Android paket adı gerekli olmasa da bu adların sağlanması, kullanıcının e-posta işlem kodu tamamlandığında belirtilen uygulamaya tekrar yönlendirme yapmasına olanak tanır.

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

Bu durumda, continueUrl sorgu parametresindeki bağlantı, yükü ActionCodeSettings nesnesinde belirtilen URL olan bir FDL bağlantısı olur. Herhangi bir ek bağımlılık olmadan uygulamanızdan gelen bağlantıyı ele alıp işleyebilirsiniz ancak derin bağlantıyı sizin için ayrıştırmak üzere FDL istemci kitaplığını kullanmanızı öneririz.

E-posta doğrulaması gibi e-posta işlemleri yapılırken, değişikliğin geçerli olması (ör. e-postanın doğrulanması) için oobCode sorgu parametresindeki işlem kodunun derin bağlantıdan ayrıştırılması ve applyActionCode aracılığıyla uygulanması gerekir.

Mobil uygulamada e-posta işlemlerini yönetme

İşlem kodu bağlantısının yüklü olması koşuluyla önce mobil uygulamanızdaki işlem kodu bağlantısını işlemek isteyip istemediğinizi belirtebilirsiniz. Android uygulamalarında, cihaz destekliyorsa ve yüklü değilse uygulamanın yükleneceğini android.installApp aracılığıyla da belirtebilirsiniz. Bağlantı, mobil uygulamayı desteklemeyen bir cihazdan tıklanırsa bunun yerine bir web sayfasından açılır. Bu işlem, firebase.auth.ActionCodeSettings nesnesinde handleCodeInApp politikası true değerine ayarlanarak yapılır. Mobil uygulamanın Android paket adı veya iOS paket kimliğinin de belirtilmesi gerekir.

Mobil uygulama olmadığında burada kullanılan yedek web URL'si, e-posta işlem şablonları bölümünde yapılandırılır. Tüm projeler için varsayılan bir temel sağlanır. E-posta işlem işleyicisinin nasıl özelleştirileceği hakkında daha fazla bilgi edinmek için e-posta işleyicilerini özelleştirme bölümüne bakın.

Bu durumda, kullanıcıya gönderilen mobil uygulama bağlantısı, yükü oobCode, mode, apiKey ve continueUrl sorgu parametreleriyle Console'da yapılandırılan işlem kodu URL'si olan bir FDL bağlantısı olur. İkinci değer, ActionCodeSettings nesnesinde belirtilen orijinal URL olur. Herhangi bir ek bağımlılık olmadan uygulamanızdan gelen bağlantıyı ele alıp işleyebilirsiniz ancak derin bağlantıyı sizin için ayrıştırmak üzere FDL istemci kitaplığını kullanmanızı öneririz. İşlem kodu, e-posta işleyicileri özelleştirme bölümünde açıklanan web akışında işlenme şekline benzer şekilde doğrudan bir mobil uygulamadan uygulanabilir.

E-posta doğrulaması gibi e-posta işlemleri yapılırken, değişikliğin geçerli olması (ör. e-postanın doğrulanması) için oobCode sorgu parametresindeki işlem kodunun derin bağlantıdan ayrıştırılması ve applyActionCode aracılığıyla uygulanması gerekir.