Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Przekazywanie stanu w działaniach e-mail

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Możesz przekazać stan za pomocą adresu URL kontynuacji podczas wysyłania e-maili z działaniami dotyczącymi resetowania hasła lub weryfikowania adresu e-mail użytkownika. Daje to użytkownikowi możliwość powrotu do aplikacji po zakończeniu akcji. Ponadto możesz określić, czy link 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, która wymaga zalogowania użytkownika. Jednak użytkownik mógł zapomnieć swoje hasło i w związku z tym wyzwolić przepływ resetowania hasła. Na końcu 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 proces weryfikacji adresu e-mail 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 oczekiwać, że po weryfikacji wróci do aplikacji mobilnej zamiast do przeglądarki.

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

Przekazywanie adresu URL stanu/kontynuacji w akcjach e-mail

Aby bezpiecznie przekazać adres URL kontynuacji, domena adresu URL musi być umieszczona na białej liście w konsoli Firebase . Odbywa się to w sekcji Uwierzytelnianie poprzez dodanie tej domeny do listy Autoryzowanych domen 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 czynności internetowych, jest to łącze precyzyjne w parametrze zapytania continueUrl .
  • Gdy łącze jest obsługiwane bezpośrednio w aplikacji, jest to parametr zapytania continueUrl w precyzyjnym łączu łącza dynamicznego.
setIOSBundleId(String iOSBundleId) Ustawia identyfikator pakietu iOS. Spowoduje to próbę otwarcia linku w aplikacji na iOS, jeśli jest zainstalowana. Aplikacja iOS musi być zarejestrowana w konsoli.
setAndroidPackageName(String androidPackageName, boolean installIfNotAvailable, String minimumVersion) Ustawia nazwę pakietu Android. Spowoduje to próbę otwarcia łącza w aplikacji na Androida, jeśli jest zainstalowana. Jeśli właściwość installIfNotAvailable ma wartość true , określa, czy zainstalować aplikację dla systemu Android, 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. Aplikacja na Androida musi być zarejestrowana w konsoli.
setHandleCodeInApp(boolean status) Czy link akcji e-mail zostanie najpierw otwarty w aplikacji mobilnej, czy w linku internetowym. Wartość domyślna to fałsz. W przypadku ustawienia wartości true łącze z kodem akcji zostanie wysłane 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 przekieruje do aplikacji, jeśli jest zainstalowana.
setDynamicLinkDomain(String dynamicLinkDomain) Ustawia domenę (lub subdomenę) łącza dynamicznego, która ma być używana dla bieżącego łącza, jeśli ma zostać otwarte za pomocą łączy dynamicznych Firebase. Ponieważ dla każdego projektu można skonfigurować wiele domen łączy dynamicznych, to pole umożliwia jawny wybór jednej z nich. Jeśli żaden nie zostanie podany, domyślnie używana jest pierwsza domena.

Poniższy przykład ilustruje, jak wysłać link weryfikacyjny e-mail, który otworzy się najpierw w aplikacji mobilnej jako łącze dynamiczne Firebase (aplikacja na iOS com.example.ios lub aplikacja na Androida com.example.android ). Precyzyjny link będzie zawierał ładunek adresu URL kontynuacji 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 używa łączy dynamicznych Firebase podczas wysyłania linku, który ma zostać otwarty w aplikacji mobilnej. Aby korzystać z tej funkcji, linki dynamiczne muszą być skonfigurowane w konsoli Firebase.

  1. Włącz linki dynamiczne Firebase:

    1. W konsoli Firebase otwórz sekcję Linki dynamiczne .
    2. Jeśli jeszcze nie zaakceptowałeś warunków korzystania z łączy dynamicznych i nie utworzyłeś domeny z łączami dynamicznymi, zrób to teraz.

      Jeśli masz już utworzoną domenę z linkami dynamicznymi, zanotuj to. Domena z linkami dynamicznymi zazwyczaj wygląda tak, jak w poniższym przykładzie:

      example.page.link

      Ta wartość będzie potrzebna podczas konfigurowania aplikacji Apple lub Android do przechwytywania łącza przychodzącego.

  2. Konfigurowanie aplikacji na Androida:

    1. Jeśli planujesz obsługiwać te linki z aplikacji na Androida, nazwa pakietu Android musi zostać określona 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 precyzyjnego linku w pliku AndroidManifest.xml.
    3. Więcej informacji na ten temat można znaleźć w instrukcji Odbieranie linków dynamicznych systemu Android .
  3. Konfigurowanie aplikacji iOS:

    1. Jeśli planujesz obsługiwać te linki z poziomu aplikacji na iOS, musisz określić identyfikator pakietu iOS w ustawieniach projektu konsoli Firebase. Ponadto należy również określić identyfikator App Store i Apple Developer Team ID.
    2. Będziesz także musiał skonfigurować domenę łącza uniwersalnego FDL jako domenę stowarzyszoną w swoich możliwościach aplikacji.
    3. Jeśli planujesz rozpowszechniać swoją aplikację w systemie iOS w wersji 8 i starszych, musisz ustawić swój identyfikator pakietu iOS jako niestandardowy schemat dla przychodzących adresów URL.
    4. Aby uzyskać więcej informacji na ten temat, zapoznaj się z instrukcją Odbieranie linków dynamicznych iOS .

Obsługa akcji e-mail w aplikacji internetowej

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

Użyty tutaj internetowy adres URL to adres skonfigurowany w sekcji szablonów akcji e-mail. Domyślny jest udostępniany dla wszystkich projektów. Zapoznaj się z tematem Dostosowywanie programów obsługi wiadomości e-mail , aby dowiedzieć się więcej na temat dostosowywania programu obsługi działań poczty e-mail.

W takim przypadku łącze w parametrze zapytania continueUrl będzie łączem FDL, którego ładunkiem jest URL określony w obiekcie ActionCodeSettings . Chociaż możesz przechwycić i obsłużyć link przychodzący ze swojej aplikacji bez żadnych dodatkowych zależności, zalecamy użycie biblioteki klienta FDL do przeanalizowania precyzyjnego linku.

Podczas obsługi akcji e-mail, takich jak weryfikacja adresu e-mail, kod akcji z parametru zapytania oobCode musi zostać przeanalizowany z precyzyjnego łącza, a następnie zastosowany za pomocą applyActionCode , aby zmiana zaczęła obowiązywać, tj. została zweryfikowana wiadomość e-mail.

Obsługa akcji email w aplikacji mobilnej

Możesz określić, czy chcesz najpierw obsłużyć link kodu akcji w aplikacji mobilnej, o ile jest ona zainstalowana. W przypadku aplikacji na Androida masz również możliwość określenia 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 z urządzenia, które nie obsługuje aplikacji mobilnej, zamiast tego zostanie otwarty ze strony internetowej. Odbywa się to poprzez wywołanie setHandleCodeInApp(true) w obiekcie ActionCodeSettings.Builder . Należy również określić nazwę pakietu aplikacji mobilnej na Androida lub identyfikator pakietu iOS.

Zastępczy internetowy adres URL używany tutaj, gdy nie jest dostępna żadna aplikacja mobilna, to adres skonfigurowany w sekcji szablonów akcji e-mail. Domyślny jest udostępniany dla wszystkich projektów. Zapoznaj się z tematem Dostosowywanie programów obsługi wiadomości e-mail , aby dowiedzieć się więcej na temat dostosowywania programu obsługi działań poczty e-mail.

W tym przypadku łącze aplikacji mobilnej wysłane do użytkownika będzie łączem FDL, którego ładunkiem jest adres URL kodu akcji, skonfigurowany w konsoli, z parametrami zapytania oobCode , mode , apiKey i continueUrl . Ten ostatni będzie oryginalnym URL określonym w obiekcie ActionCodeSettings . Chociaż możesz przechwycić i obsłużyć link przychodzący ze swojej aplikacji bez żadnych dodatkowych zależności, zalecamy użycie biblioteki klienta FDL do przeanalizowania precyzyjnego linku. Kod akcji można zastosować bezpośrednio z aplikacji mobilnej, podobnie jak w przypadku przepływu internetowego opisanego w sekcji dotyczącej dostosowywania obsługi poczty e-mail .

Podczas obsługi akcji e-mail, takich jak weryfikacja adresu e-mail, kod akcji z parametru zapytania oobCode musi zostać przeanalizowany z precyzyjnego łącza, a następnie zastosowany za pomocą applyActionCode , aby zmiana zaczęła obowiązywać, tj. została zweryfikowana wiadomość e-mail.