Przekazywanie stanu w działaniach e-mail

Możesz przekazać stan poprzez adres URL kontynuacji podczas wysyłania akcji e-mail w celu zresetowania hasła lub weryfikacji adresu e-mail użytkownika. Dzięki temu użytkownik może wrócić do aplikacji po zakończeniu akcji. Ponadto możesz określić, czy link do akcji e-mail ma być obsługiwany bezpośrednio z aplikacji mobilnej, gdy jest ona zainstalowana zamiast strony internetowej.

Może to być niezwykle przydatne w następujących typowych scenariuszach:

  • Użytkownik, który nie jest aktualnie zalogowany, może próbować uzyskać dostęp do zawartości wymagającej zalogowania. Użytkownik mógł jednak zapomnieć swojego hasła i w związku z tym uruchomić proces resetowania hasła. Pod koniec przepływu użytkownik spodziewa się wrócić do sekcji aplikacji, do której próbował uzyskać dostęp.

  • Aplikacja może oferować dostęp tylko do zweryfikowanych kont. Na przykład biuletyn może wymagać od użytkownika weryfikacji adresu e-mail przed subskrypcją. Użytkownik przejdzie przez proces weryfikacji e-mailem i spodziewa się wrócić do aplikacji, aby dokończyć subskrypcję.

  • W innych przypadkach użytkownik mógł rozpocząć przepływ ze swojego urządzenia mobilnego i po weryfikacji spodziewać się powrotu do aplikacji mobilnej zamiast do przeglądarki.

Możliwość przekazywania stanu za pośrednictwem adresu URL kontynuacji to potężna funkcja udostępniana przez Firebase Auth, która może znacznie poprawić komfort użytkownika.

Przekazywanie adresu URL stanu/kontynuowania w akcjach e-mailowych

Aby bezpiecznie przekazać adres URL kontynuacji, domena tego adresu URL będzie musiała zostać dodana do białej listy w konsoli Firebase . Dokonuje się tego w sekcji Uwierzytelnianie poprzez dodanie tej domeny do listy Domen autoryzowanych w zakładce Metoda logowania, jeśli jeszcze jej tam nie ma.

Podczas wysyłania wiadomości e-mail dotyczącej resetowania hasła lub wiadomości weryfikacyjnej należy podać instancję ActionCodeSettings . Można go utworzyć za pomocą powiązanej klasy ActionCodeSettings.Builder , która zawiera następujące metody:

metoda Opis
setUrl(String url)

Ustawia link (adres URL stanu/kontynuacji), który ma różne znaczenia w różnych kontekstach:

  • Gdy łącze jest obsługiwane w widżetach akcji sieciowych, jest to łącze głębokie w parametrze continueUrl .
  • Gdy łącze jest obsługiwane bezpośrednio w aplikacji, jest to parametr continueUrl w głębokim łączu łącza dynamicznego.
setIOSBundleId(String iOSBundleId) Ustawia identyfikator pakietu iOS. Spowoduje to próbę otwarcia łącza w aplikacji na iOS, jeśli jest zainstalowana. Aplikacja na iOS musi być zarejestrowana w Konsoli.
setAndroidPackageName(String androidPackageName, boolean installIfNotAvailable, String minimumVersion) Ustawia nazwę pakietu Androida. Spowoduje to próbę otwarcia łącza w aplikacji na Androida, jeśli jest zainstalowana. Jeśli installIfNotAvailable jest ustawione na true , określa, czy zainstalować aplikację na Androida, jeśli urządzenie ją obsługuje, a aplikacja nie jest jeszcze zainstalowana. Jeśli określono minimalną wersję i zainstalowano starszą wersję aplikacji, użytkownik zostanie przeniesiony do Sklepu Play w celu uaktualnienia aplikacji. Aplikację na Androida należy zarejestrować w Konsoli.
setHandleCodeInApp(boolean status) Określa, czy link do akcji e-mail zostanie najpierw otwarty w aplikacji mobilnej, czy w łączu internetowym. Wartość domyślna to fałsz. Jeśli ma wartość true, link do kodu akcji zostanie wysłany jako łącze uniwersalne lub łącze do aplikacji na Androida i zostanie otwarte przez aplikację, jeśli jest zainstalowana. W fałszywym przypadku kod zostanie najpierw wysłany do widżetu internetowego, a następnie kontynuowanie przekieruje do aplikacji, jeśli jest zainstalowana.
setDynamicLinkDomain(String dynamicLinkDomain) Ustawia domenę (lub subdomenę) łącza dynamicznego, która będzie używana dla bieżącego łącza, jeśli ma ono zostać otwarte przy użyciu łączy dynamicznych Firebase. Ponieważ w jednym projekcie można skonfigurować wiele domen łączy dynamicznych, to pole umożliwia wyraźny wybór jednej. Jeśli nie podano żadnej, domyślnie używana jest pierwsza domena.

Poniższy przykład ilustruje sposób wysłania linku weryfikacyjnego za pomocą adresu e-mail, który najpierw otworzy się w aplikacji mobilnej jako link dynamiczny Firebase (aplikacja na iOS com.example.ios lub aplikacja na Androida com.example.android ). Głęboki link będzie zawierał ładunek adresu URL 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 korzysta z Firebase Dynamic Links podczas wysyłania linku, który ma zostać otwarty w aplikacji mobilnej. Aby móc korzystać z tej funkcji, należy skonfigurować łącza dynamiczne w konsoli Firebase.

  1. Włącz łącza dynamiczne Firebase:

    1. W konsoli Firebase otwórz sekcję Linki dynamiczne .
    2. Jeśli jeszcze nie zaakceptowałeś warunków Linków Dynamicznych i nie utworzyłeś domeny Dynamic Links, zrób to teraz.

      Jeśli masz już domenę Dynamic Links, zanotuj ją. Domena Linków Dynamicznych zazwyczaj wygląda jak w poniższym przykładzie:

      example.page.link

      Ta wartość będzie Ci potrzebna podczas konfigurowania aplikacji na urządzenia Apple lub Android w celu przechwytywania łącza przychodzącego.

  2. Konfiguracja aplikacji na Androida:

    1. Jeśli planujesz obsługiwać te łącza z aplikacji na Androida, nazwę pakietu Android należy określić w ustawieniach projektu konsoli Firebase. Ponadto należy podać SHA-1 i SHA-256 certyfikatu aplikacji.
    2. Będziesz także musiał skonfigurować filtr intencji dla głębokiego linku w pliku AndroidManifest.xml.
    3. Więcej informacji na ten temat znajdziesz w instrukcji odbierania łączy dynamicznych Androida .
  3. Konfigurowanie aplikacji na iOS:

    1. Jeśli planujesz obsługiwać te łącza z aplikacji na iOS, identyfikator pakietu iOS musi zostać określony w ustawieniach projektu konsoli Firebase. Ponadto należy podać identyfikator App Store i identyfikator zespołu programistów Apple.
    2. Będziesz także musiał skonfigurować domenę łącza uniwersalnego FDL jako domenę skojarzoną w możliwościach swojej aplikacji.
    3. Jeśli planujesz rozpowszechniać swoją aplikację na iOS w wersji 8 i starszej, musisz ustawić identyfikator pakietu iOS jako niestandardowy schemat dla przychodzących adresów URL.
    4. Więcej informacji na ten temat można znaleźć w instrukcji odbierania łączy dynamicznych w systemie iOS .

Obsługa akcji e-mailowych w aplikacji webowej

Możesz określić, czy chcesz najpierw obsłużyć link do kodu akcji z aplikacji internetowej, a następnie po pomyślnym zakończeniu przekierować do innej strony internetowej lub aplikacji mobilnej, o ile aplikacja mobilna jest dostępna. Odbywa się to poprzez wywołanie setHandleCodeInApp(false) w obiekcie ActionCodeSettings.Builder . Chociaż identyfikator pakietu iOS ani nazwa pakietu Android nie są wymagane, podanie ich umożliwi użytkownikowi przekierowanie z powrotem do określonej aplikacji po ukończeniu kodu akcji e-mail.

Używany tutaj adres internetowy jest adresem skonfigurowanym w sekcji szablonów akcji e-mail. Domyślny jest udostępniany dla wszystkich projektów. Więcej informacji na temat dostosowywania obsługi akcji e-mail można znaleźć w artykule Dostosowywanie programów obsługi poczty e-mail.

W tym przypadku łącze w parametrze continueUrl będzie łączem FDL, którego ładunkiem jest URL określony w obiekcie ActionCodeSettings . Chociaż możesz przechwytywać i obsługiwać link przychodzący z aplikacji bez żadnych dodatkowych zależności, zalecamy użycie biblioteki klienta FDL do przeanalizowania głębokiego linku.

Podczas obsługi akcji e-mailowych, takich jak weryfikacja adresu e-mail, kod akcji z parametru zapytania oobCode musi zostać przeanalizowany z głębokiego linku, a następnie zastosowany za pomocą applyActionCode , aby zmiana odniosła skutek, tj. e-mail został zweryfikowany.

Obsługa akcji e-mailowych w aplikacji mobilnej

Możesz określić, czy chcesz najpierw obsługiwać link do kodu akcji w swojej aplikacji mobilnej, pod warunkiem, że jest ona zainstalowana. W przypadku aplikacji na Androida możesz także określić za pomocą wartości logicznej installIfNotAvailable , że aplikacja ma zostać zainstalowana, jeśli urządzenie ją obsługuje i nie jest jeszcze zainstalowana. Jeśli link zostanie kliknięty na urządzeniu, które nie obsługuje aplikacji mobilnej, zostanie on otwarty ze strony internetowej. Odbywa się to poprzez wywołanie setHandleCodeInApp(true) w obiekcie ActionCodeSettings.Builder . Należy również podać nazwę pakietu aplikacji mobilnej na Androida lub identyfikator pakietu na iOS.

Zastępczy adres URL używany tutaj, gdy nie jest dostępna żadna aplikacja mobilna, to ten skonfigurowany w sekcji szablonów akcji e-mail. Domyślny jest udostępniany dla wszystkich projektów. Więcej informacji na temat dostosowywania obsługi akcji e-mail można znaleźć w artykule Dostosowywanie programów obsługi poczty e-mail.

W tym przypadku łącze do aplikacji mobilnej wysyłane do użytkownika będzie łączem FDL, którego ładunkiem będzie adres URL kodu akcji skonfigurowany w Konsoli z parametrami zapytania oobCode , mode , apiKey continueUrl . Ten ostatni będzie oryginalnym URL określonym w obiekcie ActionCodeSettings . Chociaż możesz przechwytywać i obsługiwać link przychodzący z aplikacji bez żadnych dodatkowych zależności, zalecamy użycie biblioteki klienta FDL do przeanalizowania głębokiego linku. Kod akcji można zastosować bezpośrednio z aplikacji mobilnej, podobnie jak jest to obsługiwane w przepływie sieciowym opisanym w sekcji dostosowywanie programów obsługi poczty e-mail .

Podczas obsługi akcji e-mailowych, takich jak weryfikacja adresu e-mail, kod akcji z parametru zapytania oobCode musi zostać przeanalizowany z głębokiego linku, a następnie zastosowany za pomocą applyActionCode , aby zmiana odniosła skutek, tj. e-mail został zweryfikowany.