E-posta İşlemlerinde Aktarma Durumu

Şifre sıfırlama işlemleri veya kullanıcının e-posta adresini doğrulama için e-posta işlemleri gönderirken devam URL'si aracılığıyla durumu iletebilirsiniz. Bu sayede kullanıcı, işlem tamamlandıktan sonra uygulamaya geri dönebilir. Ayrıca, e-posta işlem bağlantısının bir web sayfası yerine mobil uygulamadan yüklendiğinde doğrudan mobil uygulamadan mı yoksa web sayfasından mı işleneceğini belirtebilirsiniz.

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

  • Şu anda giriş yapmamış 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ı tetiklemiş olabilir. Kullanıcı, akış sonunda erişmeye çalıştığı uygulama bölümüne geri dönmeyi bekler.

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

  • Diğer durumlarda, kullanıcı akışı mobil cihazından başlatmış olabilir ve doğrulama işleminden sonra tarayıcı yerine mobil uygulamasına geri dönmeyi bekleyebilir.

Devam URL'si aracılığıyla durumu iletme özelliği, Firebase Auth'un sunduğu ve kullanıcı deneyimini önemli ölçüde iyileştirebilecek güçlü bir özelliktir.

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

Devam URL'sinin güvenli bir şekilde iletilebilmesi için URL'nin alanının Firebase konsolunda beyaz listeye eklenmesi gerekir. Bu işlem, Kimlik doğrulama bölümünde yapılır. Alanınız, Giriş yöntemi sekmesinin altındaki Yetkili alanlar listesine eklenir (henüz eklenmemişse).

Şifre sıfırlama e-postası veya doğrulama e-postası gönderirken bir 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 sahip olan bağlantıyı (durum/devam URL'si) belirler:

  • 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ı yüklüyse bir iOS uygulamasında açmayı dener. iOS uygulamasının Console'a kaydedilmesi gerekir.
setAndroidPackageName(String androidPackageName, boolean installIfNotAvailable, String minimumVersion) Android paket adını ayarlar. Bu işlem, bağlantıyı yüklüyse bir Android uygulamasında açmaya çalışır. installIfNotAvailable true olarak ayarlanırsa cihaz tarafından destekleniyorsa ve uygulama henüz yüklü değilse Android uygulamasının yüklenip yüklenmeyeceğini belirtir. minimumVersion belirtilirse ve uygulamanın eski bir sürümü yüklüyse kullanıcı, uygulamayı yükseltmek için Play Store'a yönlendirilir. Android uygulamasının Console'a kaydedilmesi gerekir.
setHandleCodeInApp(boolean status) E-posta işlem bağlantısının önce mobil uygulamada mı yoksa web bağlantısında mı açılacağını belirtir. Varsayılan değer yanlıştır. 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ış durumda kod önce web widget'ına gönderilir ve ardından devam edildiğinde yüklüyse uygulamaya yönlendirilir.
setDynamicLinkDomain(String dynamicLinkDomain) Mevcut bağlantı Firebase Dynamic Links kullanılarak açılacaksa bağlantı için kullanılacak dinamik bağlantı alanını (veya alt alanını) belirler. Proje başına birden fazla dinamik bağlantı alanı yapılandırılabilir. Bu alan, birini açıkça seçmenize olanak tanır. Hiçbiri sağlanmazsa varsayılan olarak ilk alan adı kullanılır.

Aşağıdaki örnekte, önce mobil uygulamada Firebase Dynamic Links (iOS 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ği gösterilmektedir. Derin bağlantı, devam URL'si yükünü https://www.example.com/?email=user@example.com içerir.

Kotlin

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 kullanabilmek için Dynamic Links'in Firebase Konsolu'nda yapılandırılması gerekir.

  1. Firebase Dynamic Links'i etkinleştirin:

    1. Firebase konsolunda Dynamic Links bölümünü açın.
    2. Henüz Dynamic Links şartlarını kabul etmediyseniz ve Dynamic Links alanı oluşturmadıysanız şimdi yapın.

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

      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 Console proje ayarlarında belirtilmesi gerekir. Ayrıca, uygulama sertifikasının SHA-1 ve SHA-256 değerlerinin de sağlanması gerekir.
    2. AndroidManifest.xml dosyanızda derin bağlantının intent filtresini de yapılandırmanız gerekir.
    3. Bu konuda daha fazla bilgi için Android dinamik bağlantıları alma talimatlarını inceleyin.
  3. iOS uygulamalarını yapılandırma:

    1. Bu bağlantıları iOS uygulamanızdan yönetmeyi planlıyorsanız Firebase Console proje ayarlarında iOS paket kimliğinin belirtilmesi gerekir. Ayrıca App Store kimliğinin ve Apple geliştirici ekibi kimliğinin de belirtilmesi gerekir.
    2. Ayrıca, FDL geçiş bağlantısı alanını uygulama özelliklerinde İlişkili Alan olarak yapılandırmanız gerekir.
    3. Uygulamanızı iOS 8 ve önceki sürümlere dağıtmayı planlıyorsanız iOS paket kimliğinizi, gelen URL'ler için özel bir şema olarak ayarlamanız gerekir.
    4. Bu konuda daha fazla bilgi için iOS dinamik bağlantıları alma talimatlarını inceleyin.

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

İşlem kodu bağlantısını önce bir web uygulamasından işlemek isteyip istemediğinizi ve ardından başarılı bir şekilde tamamlandıktan sonra başka bir web sayfasına veya mobil uygulamaya (mobil uygulama mevcutsa) yönlendirmek isteyip istemediğinizi belirtebilirsiniz. Bu işlem, ActionCodeSettings.Builder nesnesinde setHandleCodeInApp(false) çağrılarak yapılır. iOS paket kimliği veya Android paket adı zorunlu olmasa da bu bilgileri sağlamanız, e-posta işlemi kodu tamamlandığında kullanıcının belirtilen uygulamaya geri yönlendirilmesine olanak tanır.

Burada kullanılan web URL'si, e-posta işlem şablonları bölümünde yapılandırılan URL'dir. Tüm projeler için varsayılan bir yapılandırma ayrılır. E-posta işlem işleyicisini özelleştirme hakkında daha fazla bilgi edinmek için e-posta işleyicilerini özelleştirme başlıklı makaleyi inceleyin.

Bu durumda, continueUrl sorgu parametresindeki bağlantı, ActionCodeSettings nesnesinde belirtilen URL olan bir FDL bağlantısı olur. Uygulamanızdan gelen bağlantıyı herhangi bir ek bağımlılık olmadan yakalayı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şlemlerini işlerken, oobCode sorgu parametresindeki işlem kodunun derin bağlantıdan ayrıştırılması ve ardından değişikliğin geçerli olması (yani e-postanın doğrulanması) için applyActionCode aracılığıyla uygulanması gerekir.

Mobil uygulamada e-posta işlemlerini işleme

İşlem kodu bağlantısını, yüklü olması koşuluyla önce mobil uygulamanızda işlemek isteyip istemediğinizi belirtebilirsiniz. Android uygulamalarında, installIfNotAvailable doğru/yanlış değeri aracılığıyla, cihaz uygulamayı destekliyorsa ve uygulama yüklü değilse uygulamanın yükleneceğini de 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ı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şlemi şablonları bölümünde yapılandırılan URL'dir. Tüm projeler için varsayılan bir anahtar ayrılır. E-posta işlem işleyicisini özelleştirme hakkında daha fazla bilgi edinmek için e-posta işleyicilerini özelleştirme başlıklı makaleyi inceleyin.

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ılmış işlem kodu URL'si olan bir FDL bağlantısı olur. İkincisi, ActionCodeSettings nesnesinde belirtilen orijinal URL olur. Uygulamanızdan gelen bağlantıyı herhangi bir ek bağımlılık olmadan yakalayı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şleyicilerini özelleştirme bölümünde açıklanan web akışında işlenmesine benzer şekilde doğrudan bir mobil uygulamadan uygulanabilir.

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