Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

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 działań e-mail w celu zresetowania hasła lub weryfikacji adresu e-mail użytkownika. Daje to użytkownikowi możliwość powrotu do aplikacji po zakończeniu akcji. Ponadto można określić, czy łącze do akcji wysyłanej pocztą e-mail ma być obsługiwane bezpośrednio z aplikacji mobilnej, gdy jest ona instalowana, a nie ze 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 się użytkownika. Jednak użytkownik mógł zapomnieć swoje hasło i w związku z tym wyzwolić przepływ 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 adresu e-mail i spodziewa się, że wróci do aplikacji, aby ukończyć subskrypcję.

  • W innych przypadkach użytkownik mógł uruchomić przepływ ze swojego urządzenia mobilnego i oczekiwać, że po weryfikacji powróci do aplikacji mobilnej zamiast do przeglądarki.

Możliwość przekazywania stanu przez adres URL kontynuacji to potężna funkcja oferowana przez Firebase Auth, która może znacznie poprawić wrażenia użytkownika.

Przekazywanie stanu/kontynuacji adresu URL w działaniach e-mail

Aby bezpiecznie przekazywać dalszy adres URL, domena dla tego adresu URL musi być umieszczona na białej liście w konsoli Firebase . Odbywa się to w sekcji Uwierzytelnianie , dodając tę ​​domenę do listy autoryzowanych domen na karcie Metoda logowania , jeśli jeszcze jej tam nie ma.

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

metoda Opis
setUrl(String url)

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

  • Gdy link jest obsługiwany w widżetach akcji internetowej, jest to precyzyjny link w parametrze zapytania continueUrl .
  • Gdy link jest obsługiwany bezpośrednio w aplikacji, jest to parametr zapytania continueUrl w precyzyjnym linku linku dynamicznego.
setIOSBundleId(String iOSBundleId) Ustawia identyfikator pakietu iOS. Spowoduje to próbę otwarcia łącza w aplikacji na iOS, jeśli jest ona zainstalowana. Aplikację iOS należy zarejestrować 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 ona zainstalowana. Jeśli installIfNotAvailable jest ustawiona na 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 zainstalowana jest starsza wersja aplikacji, użytkownik zostanie przeniesiony do Sklepu Play, aby zaktualizować aplikację. Aplikację na Androida należy zarejestrować w Konsoli.
setHandleCodeInApp(boolean status) Czy link do akcji w wiadomości e-mail zostanie najpierw otwarty w aplikacji mobilnej, czy jako link internetowy. Wartość domyślna to fałsz. Po ustawieniu na true link z kodem działania zostanie wysłany jako link uniwersalny lub link do aplikacji na Androida i zostanie otwarty przez aplikację, jeśli jest zainstalowana. W fałszywym przypadku kod zostanie najpierw wysłany do widżetu internetowego, a następnie, gdy kontynuujesz, przekieruje do aplikacji, jeśli jest zainstalowana.
setDynamicLinkDomain(String dynamicLinkDomain) Ustawia domenę łącza dynamicznego (lub subdomenę), która ma być używana dla bieżącego łącza, jeśli ma być otwierane za pomocą Linków dynamicznych Firebase. Ponieważ w jednym projekcie można skonfigurować wiele domen łączy dynamicznych, to pole umożliwia jednoznaczny wybór jednej z nich. Jeśli nie podano żadnej, 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 link dynamiczny Firebase (aplikacja na iOS com.example.ios lub aplikacja na Androida com.example.android ). Precyzyjny link będzie zawierał ładunek dalszego adresu URL https://www.example.com/?email=user@example.com .

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.");
                }
            }
        });

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.")
            }
        }

Firebase Auth używa Firebase Dynamic Links podczas wysyłania linku, który ma zostać otwarty w aplikacji mobilnej. Aby korzystać z tej funkcji, należy skonfigurować Linki dynamiczne w konsoli Firebase.

  1. Włącz Linki dynamiczne Firebase:

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

      Jeśli masz już utworzoną domenę Dynamic Links, zanotuj to. Domena Dynamic Links zazwyczaj wygląda jak w następującym przykładzie:

      example.page.link

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

  2. Konfiguracja aplikacji na Androida:

    1. Jeśli planujesz obsługiwać te łącza z aplikacji na Androida, nazwę pakietu Androida należy określić w ustawieniach projektu Firebase Console. Dodatkowo należy podać SHA-1 i SHA-256 certyfikatu aplikacji.
    2. Musisz także skonfigurować filtr intencji dla precyzyjnego linku w pliku AndroidManifest.xml.
    3. Więcej informacji na ten temat znajdziesz w instrukcjach odbierania linków dynamicznych Androida .
  3. Konfiguracja aplikacji iOS:

    1. Jeśli planujesz obsługiwać te łącza z aplikacji iOS, identyfikator pakietu iOS należy określić w ustawieniach projektu Firebase Console. Ponadto należy określić identyfikator App Store i Apple Developer Team ID.
    2. Będziesz także musiał skonfigurować domenę łącza uniwersalnego FDL jako domenę powiązaną w swoich możliwościach aplikacji.
    3. Jeśli planujesz dystrybucję aplikacji na iOS w wersji 8 i starszych, musisz ustawić identyfikator pakietu iOS jako niestandardowy schemat dla przychodzących adresów URL.
    4. Aby uzyskać więcej informacji na ten temat, zapoznaj się z instrukcjami dotyczącymi odbierania dynamicznych łączy iOS .

Obsługa akcji e-mailowych w aplikacji internetowej

Możesz określić, czy chcesz najpierw obsłużyć łącze z kodem 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 iOS lub nazwa pakietu Android nie są wymagane, ich podanie umożliwi użytkownikowi przekierowanie z powrotem do określonej aplikacji po zakończeniu kodu akcji w wiadomości e-mail.

Użyty tutaj internetowy adres URL jest skonfigurowany w sekcji szablonów akcji e-mail. Domyślny jest udostępniany dla wszystkich projektów. Zapoznaj się z dostosowywaniem programów obsługi poczty e-mail , aby dowiedzieć się więcej o dostosowywaniu obsługi akcji poczty e-mail.

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

Podczas obsługi akcji e-mail, takich jak weryfikacja poczty e-mail, kod akcji z parametru zapytania oobCode musi zostać przeanalizowany z głębokiego linku, a następnie zastosowany przez applyActionCode , aby zmiana zaczęła obowiązywać, tj. adres e-mail został zweryfikowany.

Obsługa akcji e-mailowych w aplikacji mobilnej

Możesz określić, czy chcesz najpierw obsłużyć łącze z kodem akcji w aplikacji mobilnej, pod warunkiem, że jest ono zainstalowane. 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 łącze zostanie kliknięte na urządzeniu, które nie obsługuje aplikacji mobilnej, zostanie ono otwarte ze strony internetowej. Odbywa się to poprzez wywołanie setHandleCodeInApp(true) w obiekcie ActionCodeSettings.Builder . Konieczne będzie również określenie nazwy pakietu aplikacji mobilnej na Androida lub identyfikatora pakietu iOS.

Używany tutaj rezerwowy adres internetowy, gdy żadna aplikacja mobilna nie jest dostępna, jest skonfigurowany w sekcji szablonów akcji e-mail. Domyślny jest udostępniany dla wszystkich projektów. Zapoznaj się z dostosowywaniem programów obsługi poczty e-mail , aby dowiedzieć się więcej o dostosowywaniu obsługi akcji poczty e-mail.

W tym przypadku łącze aplikacji mobilnej wysłane do użytkownika będzie łączem FDL, którego ładunek stanowi 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ć łącze przychodzące z aplikacji bez żadnych dodatkowych zależności, zalecamy użycie biblioteki klienta FDL do przeanalizowania precyzyjnego łącza. Kod akcji można zastosować bezpośrednio z aplikacji mobilnej, podobnie jak jest obsługiwany w przepływie sieci Web opisanym w sekcji dostosowywania programów obsługi poczty e-mail .

Podczas obsługi akcji e-mail, takich jak weryfikacja poczty e-mail, kod akcji z parametru zapytania oobCode musi zostać przeanalizowany z głębokiego linku, a następnie zastosowany przez applyActionCode , aby zmiana zaczęła obowiązywać, tj. adres e-mail został zweryfikowany.