Para receber os Firebase Dynamic Links que você criou , você deve incluir o SDK do Dynamic Links em seu aplicativo e chamar o método FirebaseDynamicLinks.getDynamicLink()
quando seu aplicativo for carregado para obter os dados transmitidos no Dynamic Link.
Configure o Firebase e o SDK do Dynamic Links
Instale e inicialize os SDKs do Firebase para Flutter , caso ainda não tenha feito isso.
No diretório raiz do seu projeto Flutter, execute o seguinte comando para instalar o plugin Dynamic Links:
flutter pub add firebase_dynamic_links
Se você estiver criando um aplicativo Android, abra a página Configurações do projeto no console do Firebase e certifique-se de ter especificado sua chave de assinatura SHA-1. Se você usa App Links, especifique também sua chave SHA-256.
Integração de plataforma
Conclua as etapas de integração de plataforma a seguir para as plataformas para as quais você está criando seu aplicativo.
Android
No Android, você deve adicionar um novo filtro de intent para capturar links diretos do seu domínio, pois o Dynamic Link irá redirecionar para o seu domínio se o seu aplicativo estiver instalado. Isso é necessário para que seu aplicativo receba os dados do Dynamic Link depois de ser instalado/atualizado na Play Store e tocar no botão Continuar. Em AndroidManifest.xml
:
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data
android:host="example.com"
android:scheme="https"/>
</intent-filter>
Quando os usuários abrem um link dinâmico com um link direto para o esquema e host especificados, seu aplicativo iniciará a atividade com esse filtro de intent para processar o link.
A próxima etapa é garantir que a impressão digital SHA-256 do certificado de assinatura esteja registrada no console do Firebase para o aplicativo. Você pode encontrar mais detalhes sobre como recuperar sua impressão digital SHA-256 na página Autenticando seu cliente .
Plataformas Apple
Crie uma conta de desenvolvedor Apple, caso ainda não tenha uma.
Na página Configurações do projeto do console do Firebase, certifique-se de que seu aplicativo iOS esteja configurado corretamente com seu ID da App Store e ID da equipe.
No site Apple Developer, crie um perfil de provisionamento para seu aplicativo com o recurso Domínio Associado habilitado.
No Xcode, faça o seguinte:
Abra seu aplicativo no cabeçalho TARGETS .
Na página Assinatura e recursos, certifique-se de que sua equipe esteja registrada e que seu perfil de provisionamento esteja definido.
Na página Assinatura e recursos, habilite Domínios associados e adicione o seguinte à lista Domínios associados (substitua o exemplo pelo seu domínio):
applinks:example.page.link
Na página Informações, adicione um tipo de URL ao seu projeto. Defina o campo Esquemas de URL como o ID do pacote do seu aplicativo. (O identificador pode ser
Bundle ID
ou o que você desejar.)Se você configurou um domínio personalizado para seu projeto do Firebase, adicione o prefixo do URL do Dynamic Link ao arquivo
Info.plist
do seu projeto iOS usando a chaveFirebaseDynamicLinksCustomDomains
.<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>FirebaseDynamicLinksCustomDomains</key> <array> <string>https://custom.domain.io/path1</string> <string>https://custom.domain.io/path2</string> </array> ...other settings </dict> </plist>
Opcional: desative o uso da área de transferência do iOS pelo SDK do Dynamic Links.
Por padrão, o SDK do Dynamic Links usa o pasteboard para melhorar a confiabilidade dos links diretos pós-instalação. Ao usar a área de trabalho, o Dynamic Links pode garantir que, quando um usuário abrir um Dynamic Link, mas precisar instalar seu aplicativo primeiro, o usuário possa ir imediatamente para o conteúdo original vinculado ao abrir o aplicativo pela primeira vez após a instalação.
A desvantagem disso é que o uso da área de transferência aciona uma notificação no iOS 14 e posterior. Assim, na primeira vez que os usuários abrirem seu aplicativo, se a área de transferência contiver um URL de link dinâmico, eles verão uma notificação de que seu aplicativo acessou a área de transferência, o que pode causar confusão.
Para desabilitar esse comportamento, edite o arquivo
Info.plist
do seu projeto Xcode e defina a chaveFirebaseDeepLinkPasteboardRetrievalEnabled
comoNO
.
Lidar com links diretos
Para lidar com um link dinâmico em seu aplicativo, dois cenários exigem implementação.
Estado encerrado
Configure os seguintes métodos:
-
FirebaseDynamicLinks.getInitialLink
- retorna umFuture<PendingDynamicLinkData?>
-
FirebaseDynamicLinks.onLink
- manipulador de eventos que retorna umStream
contendo umPendingDynamicLinkData?
O Android sempre receberá o link via FirebaseDynamicLinks.getInitialLink
de um estado encerrado, mas no iOS isso não é garantido. Portanto, vale a pena configurar ambos na seguinte ordem para garantir que sua aplicação receba o link:
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(options: DefaultFirebaseConfig.platformOptions);
// Check if you received the link via `getInitialLink` first
final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getInitialLink();
if (initialLink != null) {
final Uri deepLink = initialLink.link;
// Example of using the dynamic link to push the user to a different screen
Navigator.pushNamed(context, deepLink.path);
}
FirebaseDynamicLinks.instance.onLink.listen(
(pendingDynamicLinkData) {
// Set up the `onLink` event listener next as it may be received here
if (pendingDynamicLinkData != null) {
final Uri deepLink = pendingDynamicLinkData.link;
// Example of using the dynamic link to push the user to a different screen
Navigator.pushNamed(context, deepLink.path);
}
},
);
runApp(MyApp(initialLink));
}
Dentro da lógica da sua aplicação, você pode então verificar se um link foi tratado e executar uma ação, por exemplo:
if (initialLink != null) {
final Uri deepLink = initialLink.link;
// Example of using the dynamic link to push the user to a different screen
Navigator.pushNamed(context, deepLink.path);
}
Estado de fundo/primeiro plano
Enquanto o aplicativo estiver aberto ou em segundo plano, use o getter FirebaseDynamicLinks.onLink
:
FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
Navigator.pushNamed(context, dynamicLinkData.link.path);
}).onError((error) {
// Handle errors
});
Alternativamente, se você deseja identificar se um Dynamic Link exato foi usado para abrir o aplicativo, passe-o para o método getDynamicLink
:
String link = 'https://dynamic-link-domain/ke2Qa';
final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getDynamicLink(Uri.parse(link));
Testando um link dinâmico na plataforma iOS
Para testar um link dinâmico no iOS, é necessário usar um dispositivo real. Você também precisará executar o aplicativo no modo de liberação (ou seja flutter run --release
.), se estiver testando um link dinâmico a partir de um estado de aplicativo encerrado (ou seja, o aplicativo foi fechado).