Para receber o Firebase Dynamic Links que
você criou, inclua o SDK do Dynamic Links no app e chame os métodos
handleUniversalLink:
e dynamicLinkFromCustomSchemeURL:
quando o app for carregado para receber os dados transmitidos no link dinâmico.
Pré-requisitos
Antes de começar, adicione o Firebase ao seu projeto do iOS.
Configurar o Firebase e o SDK do Dynamic Links
Use o Swift Package Manager para instalar e gerenciar as dependências do Firebase.
- No Xcode, com seu projeto do app aberto, navegue até File > Add Packages.
- Quando solicitado, adicione o repositório do SDK do Firebase para as plataformas Apple:
- Escolha a biblioteca do Firebase Dynamic Links.
- Para aproveitar a melhor experiência com o Dynamic Links, recomendamos ativar o Google Analytics no seu projeto e adicionar o SDK do Firebase para Analytics ao seu app. Você pode selecionar a biblioteca com ou sem o recurso de coleta de IDFAs.
- Quando terminar, o Xcode começará a resolução e fará o download das dependências em segundo plano automaticamente.
https://github.com/firebase/firebase-ios-sdk
Agora execute algumas etapas de configuração:
- No Console do Firebase, abra a seção Dynamic Links. Se solicitado, aceite os Termos de Serviço.
-
Verifique se o ID da App Store e o prefixo do ID do app estão especificados nas configurações do aplicativo. Para visualizar e editar as configurações do app, acesse a página Configurações do projeto do Firebase e selecione o app para iOS.
Para confirmar se o projeto do Firebase está configurado corretamente para usar Dynamic Links no app para iOS, abra o URL a seguir:
https://your_dynamic_links_domain/apple-app-site-association
Se o app estiver conectado, o arquivo
apple-app-site-association
conterá uma referência ao prefixo do ID do app e ao ID do pacote do app. Exemplo:{"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["NOT /_/*","/*"]}]}}
Se o campo
details
estiver vazio, verifique novamente se você especificou o prefixo do ID do app. Pode ser que ele não seja igual ao ID da sua equipe. -
Opcional: desative o uso do SDK do Dynamic Links na área de transferência do iOS.
Por padrão, o SDK do Dynamic Links usa a área de transferência para melhorar a confiabilidade dos links diretos pós-instalação. Ao usar a área de transferência, o Firebase Dynamic Links garante que, quando um usuário abrir um link dinâmico, mas precisar instalar o app primeiro, o usuário poderá acessar imediatamente o conteúdo vinculado original ao abrir o app pela primeira vez.
A desvantagem disso é que o uso da área de trabalho aciona uma notificação no iOS 14 e em versões posteriores. Dessa forma, na primeira vez que os usuários abrirem seu app, se a área de transferência tiver um URL, eles verão uma notificação informando que o app acessou a área de transferência, o que pode causar problemas.
Para desativar este comportamento, edite o arquivo
Info.plist
do seu projeto do Xcode e defina a chaveFirebaseDeepLinkPasteboardRetrievalEnabled
comoNO
.
Abrir Dynamic Links no seu app
- Na guia Info do projeto Xcode do seu app, crie um novo tipo de URL a ser usado para Dynamic Links. Defina o campo Identifier como um valor exclusivo e o campo URL scheme para ser seu identificador do pacote, que é o esquema de URL padrão usado pelo Firebase Dynamic Links.
- Na guia Capabilities do projeto Xcode do seu app, ative "Domínios associados" e adicione o seguinte à lista Associated Domains:
applinks:your_dynamic_links_domain
- Para receber Dynamic Links com um
domínio totalmente personalizado,
no arquivo
Info.plist
do projeto Xcode, crie uma chave chamadaFirebaseDynamicLinksCustomDomains
e defina-a para os prefixos de URL dos Dynamic Links do app. Exemplo:FirebaseDynamicLinksCustomDomains https://example.com/promos https://example.com/links/share - Importe o módulo
FirebaseCore
noUIApplicationDelegate
, assim como qualquer outro módulo do Firebase usado pelo delegado do app. Por exemplo, para usar o Cloud Firestore e o Authentication:SwiftUI
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Swift
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Objective-C
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- Configure uma
instância compartilhada do
FirebaseApp
no métodoapplication(_:didFinishLaunchingWithOptions:)
do delegado do app:SwiftUI
// Use Firebase library to configure APIs FirebaseApp.configure()
Swift
// Use Firebase library to configure APIs FirebaseApp.configure()
Objective-C
// Use Firebase library to configure APIs [FIRApp configure];
- Se você estiver usando a SwiftUI, crie um delegado do aplicativo e o anexe
ao struct
App
viaUIApplicationDelegateAdaptor
ouNSApplicationDelegateAdaptor
. Também é necessário desativar o swizzling do delegado do app. Para mais informações, consulte as instruções da SwiftUI.SwiftUI
@main struct YourApp: App { // register app delegate for Firebase setup @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { NavigationView { ContentView() } } } }
- Em seguida, no método
application:continueUserActivity:restorationHandler:
, processe os links recebidos como links universais quando o aplicativo já estiver instalado:Swift
Observação: este produto não está disponível para destinos macOS, Mac Catalyst, tvOS ou watchOS.func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { let handled = DynamicLinks.dynamicLinks() .handleUniversalLink(userActivity.webpageURL!) { dynamiclink, error in // ... } return handled }
Objective-C
Observação: este produto não está disponível para destinos macOS, Mac Catalyst, tvOS ou watchOS.- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler: #if defined(__IPHONE_12_0) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_12_0) (nonnull void (^)(NSArray<id<UIUserActivityRestoring>> *_Nullable))restorationHandler { #else (nonnull void (^)(NSArray *_Nullable))restorationHandler { #endif // __IPHONE_12_0 BOOL handled = [[FIRDynamicLinks dynamicLinks] handleUniversalLink:userActivity.webpageURL completion:^(FIRDynamicLink * _Nullable dynamicLink, NSError * _Nullable error) { // ... }]; return handled; }
- Por fim, no
application:openURL:options:
, processe os links recebidos pelo esquema de URL personalizado do seu app. Esse método é chamado quando o app é aberto pela primeira vez após a instalação.Se o link dinâmico não for encontrado na primeira inicialização do seu app, esse método será chamado com o
url
doDynamicLink
definido comonil
, indicando que o SDK não conseguiu encontrar um link dinâmico pendente.Swift
Observação: este produto não está disponível para destinos macOS, Mac Catalyst, tvOS ou watchOS.@available(iOS 9.0, *) func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any]) -> Bool { return application(app, open: url, sourceApplication: options[UIApplication.OpenURLOptionsKey .sourceApplication] as? String, annotation: "") } func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) { // Handle the deep link. For example, show the deep-linked content or // apply a promotional offer to the user's account. // ... return true } return false }
Objective-C
Observação: este produto não está disponível para destinos macOS, Mac Catalyst, tvOS ou watchOS.- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *, id> *)options { return [self application:app openURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]; } - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url]; if (dynamicLink) { if (dynamicLink.url) { // Handle the deep link. For example, show the deep-linked content, // apply a promotional offer to the user's account or show customized onboarding view. // ... } else { // Dynamic link has empty deep link. This situation will happens if // Firebase Dynamic Links iOS SDK tried to retrieve pending dynamic link, // but pending link is not available for this device/App combination. // At this point you may display default onboarding view. } return YES; } return NO; }