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 aplikacja do biuletynu może wymagać od użytkownika zweryfikowania adresu e-mail przed subskrypcją. Użytkownik przejdzie przez proces weryfikacji e-mailem i spodziewa się powrotu do aplikacji w celu dokończenia subskrypcji.

  • Ogólnie rzecz biorąc, gdy użytkownik rozpoczyna proces resetowania hasła lub weryfikacji adresu e-mail w aplikacji Apple, oczekuje, że zakończy ten proces w aplikacji; umożliwia to możliwość przekazywania stanu poprzez adres URL kontynuacji.

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ę FIRActionCodeSettings . Interfejs ten przyjmuje następujące parametry:

Szybki

Parametr Typ Opis
URL Strunowy

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.
iOSBundleID Strunowy Ustawia identyfikator pakietu. Spowoduje to próbę otwarcia łącza w aplikacji Apple, jeśli jest zainstalowana. Aplikację należy zarejestrować w Konsoli. Jeśli nie podano identyfikatora pakietu, wartość tego pola jest ustawiana na identyfikator pakietu głównego pakietu aplikacji.
androidPackageName Strunowy Ustawia nazwę pakietu Androida. Spowoduje to próbę otwarcia łącza w aplikacji na Androida, jeśli jest zainstalowana.
androidInstallIfNotAvailable Bool Określa, czy zainstalować aplikację na Androida, jeśli urządzenie ją obsługuje, a aplikacja nie jest jeszcze zainstalowana. Jeśli to pole zostanie podane bez nazwy pakietu, zostanie zgłoszony błąd wyjaśniający, że nazwę pakietu należy podać w połączeniu z tym polem.
androidMinimumVersion Strunowy Minimalna wersja aplikacji obsługiwana w tym przepływie. 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.
handleCodeInApp Bool 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.
dynamicLinkDomain Strunowy 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.

Cel C

Parametr Typ Opis
URL NSString

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.
iOSBundleID NSString Ustawia identyfikator pakietu. Spowoduje to próbę otwarcia łącza w aplikacji Apple, jeśli jest zainstalowana. Aplikację należy zarejestrować w Konsoli.
androidPackageName NSString Ustawia nazwę pakietu Androida. Spowoduje to próbę otwarcia łącza w aplikacji na Androida, jeśli jest zainstalowana.
androidInstallIfNotAvailable BOOL określa, czy zainstalować aplikację na Androida, jeśli urządzenie ją obsługuje, a aplikacja nie jest jeszcze zainstalowana. Jeśli to pole zostanie podane bez nazwy pakietu, zostanie zgłoszony błąd wyjaśniający, że nazwę pakietu należy podać w połączeniu z tym polem.
androidMinimumVersion NSString Minimalna wersja aplikacji obsługiwana w tym przepływie. 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.
handleCodeInApp BOOL 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.
dynamicLinkDomain NSString 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, przy użyciu niestandardowej domeny linku dynamicznego example.page.link (aplikacja na iOS com.example.ios lub aplikacja na Androida com.example.android , na którym aplikacja zostanie zainstalowana, jeśli nie została jeszcze zainstalowana, a minimalna wersja to 12 ). Głęboki link będzie zawierał ładunek adresu URL https://www.example.com/?email=user@example.com .

Szybki


var actionCodeSettings =  ActionCodeSettings.init()
actionCodeSettings.canHandleInApp = true
let user = Auth.auth().currentUser()
actionCodeSettings.URL =
    String(format: "https://www.example.com/?email=%@", user.email)
actionCodeSettings.iOSbundleID = Bundle.main.bundleIdentifier!
actionCodeSettings.setAndroidPakageName("com.example.android",
                                         installIfNotAvailable:true,
                                         minimumVersion:"12")
// When multiple custom dynamic link domains are defined, specify which one to use.
actionCodeSettings.dynamicLinkDomain = "example.page.link"
user.sendEmailVerification(withActionCodeSettings:actionCodeSettings { error in
  if error {
    // Error occurred. Inspect error.code and handle error.
    return
  }
  // Email verification sent.
})

Cel C

 FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init];
 actionCodeSettings.handleCodeInApp = YES;
 FIRUser *user = [FIRAuth auth].currentUser;
 NSString *urlString =
     [NSString stringWithFormat:@"https://www.example.com/?email=%@", user.email];
 actionCodeSettings.URL = [NSURL URLWithString:urlString];
 actionCodeSettings.iOSBundleID = [NSBundle mainBundle].bundleIdentifier;
 // When multiple custom dynamic link domains are defined, specify which one to use.
 actionCodeSettings.dynamicLinkDomain = @"example.page.link";
 [actionCodeSettings setAndroidPackageName:@"com.example.android"
                     installIfNotAvailable:YES
                            minimumVersion:'12'];
 [user sendEmailVerificationWithActionCodeSettings:actionCodeSettings
                                        completion:^(NSError *_Nullable error) {
   if (error) {
     // Error occurred. Inspect error.code and handle error.
     return;
   }
   // Email verification 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 to. 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 Apple:

    1. Jeśli planujesz obsługiwać te łącza ze swojej aplikacji, identyfikator pakietu 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 jako niestandardowy schemat dla przychodzących adresów URL.
    4. Więcej informacji na ten temat można znaleźć w instrukcji odbierania łączy dynamicznych na platformach Apple .

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 ustawienie handleCodeInApp na false w obiekcie FIRActionCodeSettings (Obj-C) lub ActionCodeSettings (Swift). Chociaż identyfikator pakietu 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. Aby dowiedzieć się więcej na temat dostosowywania procedury obsługi akcji e-mail, zapoznaj się z artykułem Dostosowywanie programów obsługi poczty e-mail.

W tym przypadku łącze w parametrze zapytania 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ą androidInstallIfNotAvailable , ż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 ustawienie handleCodeInApp na true w obiekcie FIRActionCodeSettings (Obj-C) lub ActionCodeSettings (Swift). Należy również określić nazwę pakietu aplikacji mobilnej na Androida lub identyfikator pakietu. Zastępczy adres URL używany w tym miejscu, 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. 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 FIRActionCodeSettings (Obj-C) lub ActionCodeSettings (Swift). 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.