E-posta İşlemlerinde Aktarma Durumu

Ş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, ilgili URL'nin alanının Firebase konsolunda beyaz listeye 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önderirken ActionCodeSettings örneği sağlanmalıdır. Aşağıdaki yöntemleri içeren ilişkili ActionCodeSettings.Builder sınıfıyla oluşturulabilir:

Yöntem Açıklama
setUrl(String url)

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.
setIOSBundleId(String iOSBundleId) 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.
setAndroidPackageName(String androidPackageName, boolean installIfNotAvailable, String minimumVersion) Android paketi adını ayarlar. Bu işlem, bağlantıyı yüklü bir Android uygulamasında açmaya çalışır. installIfNotAvailable, true değerine ayarlanırsa Android uygulamasının desteklemesi ve uygulama yüklü değilse Android uygulamasının yüklenip yüklenmeyeceğini belirtir. minimumVersion belirtilmişse ve uygulamanın daha eski bir sürümü yüklüyse 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.
setHandleCodeInApp(boolean status) 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.
setDynamicLinkDomain(String dynamicLinkDomain) 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, önce mobil uygulamada Firebase Dynamic Link (iOS uygulaması com.example.ios veya Android uygulaması com.example.android) olarak açılacak e-posta doğrulama bağlantısının nasıl gönderileceği gösterilmektedir. Derin bağlantı, devam URL yükünü https://www.example.com/?email=user@example.com içerecektir.

Kotlin+KTX

val auth = Firebase.auth
val user = auth.currentUser!!

val url = "http://www.example.com/verify?uid=" + user.uid
val actionCodeSettings = ActionCodeSettings.newBuilder()
    .setUrl(url)
    .setIOSBundleId("com.example.ios")
    // The default for this is populated with the current android package name.
    .setAndroidPackageName("com.example.android", false, null)
    .build()

user.sendEmailVerification(actionCodeSettings)
    .addOnCompleteListener { task ->
        if (task.isSuccessful) {
            Log.d(TAG, "Email sent.")
        }
    }

Java

FirebaseAuth auth = FirebaseAuth.getInstance();
FirebaseUser user = auth.getCurrentUser();

String url = "http://www.example.com/verify?uid=" + user.getUid();
ActionCodeSettings actionCodeSettings = ActionCodeSettings.newBuilder()
        .setUrl(url)
        .setIOSBundleId("com.example.ios")
        // The default for this is populated with the current android package name.
        .setAndroidPackageName("com.example.android", false, null)
        .build();

user.sendEmailVerification(actionCodeSettings)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "Email sent.");
                }
            }
        });

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ızda 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, ActionCodeSettings.Builder nesnesinde setHandleCodeInApp(false) çağrısı yapılarak 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 henüz yüklü değilse uygulamanın yükleneceğini installIfNotAvailable boole değeri aracılığıyla belirtebilirsiniz. Bağlantı, mobil uygulamayı desteklemeyen bir cihazdan tıklanırsa bunun yerine bir web sayfasından açılır. Bu işlem, ActionCodeSettings.Builder nesnesinde setHandleCodeInApp(true) çağrısı yapılarak 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.