E-posta İşlemlerinde Durumu Aktarma

Şifre sıfırlama işlemleri için e-posta işlemleri gönderirken veya bir kullanıcının e-posta adresini doğrularken bir devam URL'si aracılığıyla durum geçirebilirsiniz. Bu, kullanıcının işlem tamamlandıktan sonra uygulamaya geri dönmesini sağlar. Buna ek olarak, e-posta işlem bağlantısının bir web sayfası yerine yüklendiğinde doğrudan bir mobil uygulamadan kullanılıp kullanılmayacağını belirtebilirsiniz.

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

  • Şu anda giriş yapmamış bir kullanıcı, kullanıcının 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ülten, kullanıcının abone olmadan önce e-posta adresini doğrulamasını gerektirebilir. Kullanıcı, e-posta doğrulama akışını gerçekleştirir ve uygulamaya geri dönerek aboneliğini tamamlamayı bekler.

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

Devam URL'si aracılığıyla durum iletme özelliği, Firebase Auth'un sağladığı ve kullanıcı deneyimini önemli ölçüde geliştirebilen güçlü bir özelliktir.

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

Devam eden bir URL'yi güvenli bir şekilde iletmek için URL alanının Firebase konsolunda beyaz listeye eklenmiş olması gerekir. Bu işlem, Kimlik Doğrulama bölümünde, bu alan zaten Oturum açma yöntemi sekmesinde yer alan Yetkili alanlar listesine eklenerek yapılır.

Şifre sıfırlama e-postası veya doğrulama e-postası gönderilirken bir ActionCodeSettings örneğinin sağlanması gerekir. 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ı anlamları olan bağlantıyı (durum/devam URL'si) belirler:

  • Bağlantı, web işlemi widget'larında işlendiğinde continueUrl sorgu parametresindeki derin bağlantı olur.
  • Bağlantı doğrudan uygulamada işlendiğinde, Dinamik Bağlantı'nın derin bağlantısındaki continueUrl sorgu parametresi olur.
setIOSBundleId(String iOSBundleId) iOS paket kimliğini ayarlar. Bu işlem, bağlantıyı yüklüyse bir iOS uygulamasında açmaya çalışır. iOS uygulamasının Console'da kayıtlı olması 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 özelliği true değerine ayarlanırsa, cihazın desteklediği ve uygulama henüz yüklenmemişse Android uygulamasının yüklenip yüklenmeyeceğini belirtir. minimumVersion değeri belirtilirse ve uygulamanın daha eski bir sürümü yüklenirse kullanıcı, uygulamayı yükseltmesi için Play Store'a yönlendirilir. Android uygulamasının Console'da kayıtlı olması 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ğı. Varsayılan, false (yanlış) değeridir. Doğru değerine ayarlanırsa işlem kodu bağlantısı Evrensel Bağlantı 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önlendirir.
setDynamicLinkDomain(String dynamicLinkDomain) Geçerli bağlantı Firebase Dynamic Links kullanılarak açılacaksa bağlantı için kullanılacak dinamik bağlantı alan adını (veya alt alan adını) ayarlar. Proje başına birden çok dinamik bağlantı alanı yapılandırılabileceğinden bu alan, açıkça bir alan seçebilme olanağı tanır. Herhangi bir değer belirtilmezse varsayılan olarak ilk alan kullanılır.

Aşağıdaki örnekte, önce bir mobil uygulamada Firebase Dinamik Bağlantı (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 yükünü içerir https://www.example.com/?email=user@example.com.

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, 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 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. Dynamic Links şartlarını henüz kabul etmediyseniz ve bir Dynamic Links alan adı oluşturmadıysanız bunu hemen yapın.

      Daha önce bir Dynamic Links alan adı oluşturduysanız bunu not edin. Dynamic Links alan adı genellikle aşağıdaki örneğe benzer:

      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 Android paket adının Firebase Konsolu proje ayarlarında belirtilmesi gerekir. Ayrıca, uygulama sertifikasının SHA-1 ve SHA-256'sı sağlanmalıdır.
    2. Ayrıca, AndroidManifest.xml dosyanızdaki derin bağlantı için amaç filtresini yapılandırmanız da gerekir.
    3. Bu konu hakkında daha fazla bilgi için Android Dynamic Links'i alma talimatları bölümüne bakın.
  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. Ek olarak, App Store Kimliği ve Apple Geliştirici Ekibi Kimliği'nin de belirtilmesi gerekir.
    2. Ayrıca, uygulamanızın özelliklerinde FDL evrensel bağlantı alanını İlişkilendirilmiş 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 Dinamik Bağlantılarını alma talimatları bölümüne bakın.

Web uygulamasında e-posta işlemlerini yönetme

Mobil uygulamanın kullanılabilir olması koşuluyla, işlem kodu bağlantısını önce bir web uygulamasından işlemek ve daha sonra, başarıyla tamamlandıktan sonra başka bir web sayfasına veya mobil uygulamaya yönlendirmek isteyip istemediğinizi belirtebilirsiniz. Bu işlem, ActionCodeSettings.Builder nesnesinde setHandleCodeInApp(false) çağrısıyla yapılır. iOS paket kimliği veya Android paket adı gerekli değildir. Ancak bu bilgilerin sağlanması, kullanıcının e-posta işlem kodu tamamlandığında belirtilen uygulamaya geri 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 URL'dir. Tüm projeler için varsayılan bir proje sağlanır. E-posta işlemi 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ı müdahale edip 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 gerçekleştirilirken, değişikliğin geçerli olması için oobCode sorgu parametresine ait 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

Yüklü olması koşuluyla, işlem kodu bağlantısını ilk olarak mobil uygulamanızda kullanmak isteyip istemediğinizi belirtebilirsiniz. Android uygulamalarında, installIfNotAvailable boole'si aracılığıyla, cihazın desteklediği ve yüklü olmayan uygulamaların yükleneceğini de belirtebilirsiniz. Bağlantı, mobil uygulamayı desteklemeyen bir cihazdan tıklandığında bunun yerine bir web sayfasından açılır. Bu işlem, ActionCodeSettings.Builder nesnesinde setHandleCodeInApp(true) çağrısıyla yapılır. Mobil uygulamanın Android paket adı veya iOS paket kimliğinin de belirtilmesi gerekir.

Kullanılabilir mobil uygulama olmadığında burada kullanılan yedek 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 şablon sağlanır. E-posta işlemi 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ı müdahale edip 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ışından işlenme şekline benzer şekilde doğrudan bir mobil uygulamadan uygulanabilir.

E-posta doğrulaması gibi e-posta işlemleri gerçekleştirilirken, değişikliğin geçerli olması için oobCode sorgu parametresine ait işlem kodunun derin bağlantıdan ayrıştırılması ve applyActionCode aracılığıyla uygulanması gerekir.