Przekazywanie stanu w działaniach związanych z e-mailami

Możesz przekazać stan za pomocą adresu URL kontynuowania podczas wysyłania e-maili z działaniami dotyczącymi resetowania hasła lub weryfikowania adresu e-mail użytkownika. Dzięki temu użytkownik może wrócić do aplikacji po wykonaniu działania. Dodatkowo możesz określić, czy link do działania e-mail ma być obsługiwany bezpośrednio w zainstalowanej aplikacji mobilnej, a nie na stronie internetowej.

Jest to szczególnie przydatne w tych typowych sytuacjach:

  • Użytkownik, który obecnie nie jest zalogowany, może próbować uzyskać dostęp do treści, które wymagają od niego zalogowania się. Użytkownik mógł jednak nie pamiętać hasła i rozpocząć proces resetowania hasła. Pod koniec procesu użytkownik oczekuje, że wróci do tej sekcji aplikacji, do której chciał uzyskać dostęp.

  • Aplikacja może oferować dostęp tylko do zweryfikowanych kont. Na przykład newsletter może wymagać od użytkownika zweryfikowania adresu e-mail przed jego zasubskrybowaniem. Użytkownik przechodzi przez proces weryfikacji adresu e-mail i oczekuje, że wróci do aplikacji, aby dokończyć proces subskrypcji.

  • W innych przypadkach użytkownik mógł rozpocząć proces z urządzenia mobilnego i spodziewać się, że po weryfikacji wróci do aplikacji mobilnej, a nie do przeglądarki.

Możliwość przekazywania stanu za pomocą adresu URL kontynuowania to potężna funkcja uwierzytelniania Firebase, która może znacznie zwiększyć wygodę użytkowników.

Przekazywanie stanu/kontynuacji w działaniach e-maili

Aby w bezpieczny sposób przekazywać dalej adres URL, domena tego adresu musi znajdować się na białej liście w konsoli Firebase. W tym celu w sekcji Uwierzytelnianie dodaj tę domenę do listy Autoryzowane domeny na karcie Metoda logowania, jeśli jeszcze jej tam nie ma.

Podczas wysyłania e-maila do resetowania hasła lub e-maila weryfikacyjnego musi być podany instancja ActionCodeSettings. Można go utworzyć za pomocą powiązanej klasy ActionCodeSettings.Builder, która zawiera te metody:

Metoda Opis
setUrl(String url)

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

  • Gdy link jest obsługiwany w widżetach działań internetowych, 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) Określa identyfikator pakietu na iOS. Zostanie podjęta próba otwarcia linku w aplikacji na iOS, jeśli jest ona zainstalowana. Aplikacja na iOS musi być zarejestrowana w konsoli.
setAndroidPackageName(String androidPackageName, boolean installIfNotAvailable, String minimumVersion) Ustawia nazwę pakietu na Androida. Spowoduje to próbę otwarcia linku w aplikacji na Androida, jeśli jest zainstalowana. Jeśli parametr installIfNotAvailable ma wartość true, określa, czy należy zainstalować aplikację na Androida, jeśli urządzenie ją obsługuje, a aplikacja nie jest jeszcze zainstalowana. Jeśli określona jest wartość minimumVersion i jest zainstalowana starsza wersja aplikacji, użytkownik jest kierowany do Sklepu Play, aby ją uaktualnić. Aplikacja na Androida musi być zarejestrowana w konsoli.
setHandleCodeInApp(boolean status) Określa, czy link do działania e-mail zostanie najpierw otwarty w aplikacji mobilnej czy w przeglądarce. Wartość domyślna to false (fałsz). Jeśli zasada ma wartość Prawda, link z kodem działania jest wysyłany jako uniwersalny link lub link do aplikacji na Androida i jest otwierany przez aplikację, jeśli jest zainstalowana. W przeciwnym razie kod zostanie najpierw wysłany do widżetu internetowego, a następnie kliknięcie przycisku Dalej spowoduje przekierowanie do aplikacji, jeśli jest zainstalowana.
setDynamicLinkDomain(String dynamicLinkDomain) Konfiguruje domenę linku dynamicznego (lub subdomenę), która ma być używana w przypadku bieżącego linku, jeśli ma on zostać otwarty za pomocą Linków dynamicznych Firebase. W projekcie można skonfigurować wiele domen linków dynamicznych, dlatego w tym polu można wybrać jedną z nich. Jeśli nie podasz żadnej wartości, domyślnie zostanie użyta pierwsza domena.

Przykład poniżej pokazuje, jak wysłać e-maila weryfikacyjnego, który będzie najpierw otwierany w aplikacji mobilnej jako link dynamiczny Firebase (aplikacja com.example.ios na iOS lub na Androida com.example.android). Precyzyjny link będzie zawierał ciąg dalszy ładunku 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.");
                }
            }
        });

Uwierzytelnianie Firebase używa Linków dynamicznych Firebase do wysyłania linku, który ma otwierać się w aplikacji mobilnej. Aby korzystać z tej funkcji, musisz skonfigurować Linki dynamiczne w konsoli Firebase.

  1. Włącz Linki dynamiczne Firebase:

    1. W konsoli Firebase otwórz sekcję Linki dynamiczne.
    2. Jeśli warunki korzystania z linków dynamicznych nie zostały jeszcze zaakceptowane, a domena linków dynamicznych została utworzona, zrób to teraz.

      Jeśli masz już utworzoną domenę linków dynamicznych, zanotuj ją. Domena linków dynamicznych wygląda zazwyczaj tak:

      example.page.link

      Będzie ona potrzebna podczas konfigurowania aplikacji na Apple lub Androida tak, aby przechwytywała link przychodzący.

  2. Konfigurowanie aplikacji na Androida:

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

    1. Jeśli planujesz obsługiwać te linki w aplikacji na iOS, identyfikator pakietu na iOS należy podać w ustawieniach projektu w konsoli Firebase. Dodatkowo trzeba też podać identyfikator App Store i identyfikator zespołu dewelopera Apple.
    2. Konieczne będzie też skonfigurowanie uniwersalnej domeny linku FDL jako domeny powiązanej w możliwościach aplikacji.
    3. Jeśli zamierzasz rozpowszechniać swoją aplikację na iOS w wersji 8 lub starszej, musisz ustawić identyfikator pakietu na iOS jako schemat niestandardowy dla przychodzących adresów URL.
    4. Więcej informacji na ten temat znajdziesz w instrukcjach odbierania linków dynamicznych na iOS.

Obsługa działań dotyczących poczty e-mail w aplikacji internetowej

Możesz określić, czy link z kodem działania ma być najpierw obsługiwany w aplikacji internetowej, a po pomyślnym ukończeniu przekierowywać do innej strony internetowej lub aplikacji mobilnej, o ile ta aplikacja jest dostępna. Aby to zrobić, wywołaj setHandleCodeInApp(false) w obiekcie ActionCodeSettings.Builder. Chociaż identyfikator pakietu na iOS ani nazwa pakietu na Androida nie są wymagane, podanie tych identyfikatorów pozwoli użytkownikowi na przekierowywanie użytkownika z powrotem do określonej aplikacji po zakończeniu kodu działania związanego z e-mailem.

Użyty tutaj adres internetowy jest adresem skonfigurowanym w sekcji szablonów działań e-mailowych. We wszystkich projektach jest udostępniana usługa domyślna. Więcej informacji o dostosowywaniu modułów obsługi e-maili znajdziesz w artykule o dostosowywaniu modułów obsługi poczty e-mail.

W tym przypadku link w parametrze zapytania continueUrl będzie linkiem FDL, którego ładunek to URL określony w obiekcie ActionCodeSettings. Możesz przechwycić i obsługiwać link przychodzący z aplikacji bez konieczności wykonywania dodatkowych działań, ale zalecamy przeanalizowanie precyzyjnego linku za pomocą biblioteki klienta FDL.

W przypadku działań związanych z e-mailami, takich jak potwierdzanie adresu e-mail, kod działania z parametru zapytania oobCode musi zostać wyodrębniony z precyzyjnego linku, a następnie zastosowany za pomocą funkcji applyActionCode, aby zmiana zaczęła obowiązywać, czyli została potwierdzona własność adresu e-mail.

Obsługa działań związanych z pocztą e-mail w aplikacji mobilnej

Możesz określić, czy link z kodem działania ma być najpierw obsługiwany w aplikacji mobilnej, o ile jest ona zainstalowana. W przypadku aplikacji na Androida możesz też za pomocą wartości logicznej installIfNotAvailable określić, że aplikacja ma zostać zainstalowana, jeśli urządzenie obsługuje tę funkcję i nie jest jeszcze zainstalowana. Jeśli link zostanie kliknięty na urządzeniu, które nie obsługuje aplikacji mobilnej, zostanie on otwarty na stronie internetowej. Aby to zrobić, wywołaj setHandleCodeInApp(true) w obiekcie ActionCodeSettings.Builder. Należy też określić nazwę pakietu aplikacji na Androida lub identyfikator pakietu na iOS.

Zastępczy adres URL używany tutaj, gdy nie ma aplikacji mobilnej, to adres skonfigurowany w sekcji szablonów działań e-mail. We wszystkich projektach jest udostępniana aplikacja domyślna. Więcej informacji o dostosowywaniu modułów obsługi e-maili znajdziesz w artykule o dostosowywaniu modułów obsługi poczty e-mail.

W tym przypadku link do aplikacji mobilnej wysłany do użytkownika będzie linkiem FDL. ładunek to URL kodu działania skonfigurowany w konsoli z parametrami zapytania oobCode, mode, apiKey i continueUrl. Ten ostatni będzie oryginalnym identyfikatorem URL określonym w obiekcie ActionCodeSettings. Możesz przechwycić i obsługiwać linki przychodzące z aplikacji bez konieczności wykonywania dodatkowych działań, ale zalecamy użycie biblioteki klienta FDL do przeanalizowania precyzyjnego linku. Kod działania można zastosować bezpośrednio w aplikacji mobilnej. Działa on podobnie do kodu strony internetowej opisanego w sekcji o dostosowywaniu modułów obsługi poczty e-mail.

W przypadku działań związanych z e-mailami, takich jak potwierdzanie adresu e-mail, kod działania z parametru zapytania oobCode musi zostać wyodrębniony z precyzyjnego linku, a następnie zastosowany za pomocą funkcji applyActionCode, aby zmiana zaczęła obowiązywać, czyli została potwierdzona własność adresu e-mail.