Receba links dinâmicos do Firebase em um aplicativo Flutter

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.

  1. Instale e inicialize os SDKs do Firebase para Flutter , caso ainda não tenha feito isso.

  2. No diretório raiz do seu projeto Flutter, execute o seguinte comando para instalar o plugin Dynamic Links:

    flutter pub add firebase_dynamic_links
    
  3. 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

  1. Crie uma conta de desenvolvedor Apple, caso ainda não tenha uma.

  2. 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.

  3. No site Apple Developer, crie um perfil de provisionamento para seu aplicativo com o recurso Domínio Associado habilitado.

  4. No Xcode, faça o seguinte:

    1. Abra seu aplicativo no cabeçalho TARGETS .

    2. Na página Assinatura e recursos, certifique-se de que sua equipe esteja registrada e que seu perfil de provisionamento esteja definido.

    3. 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
      
    4. 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.)

    5. 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 chave FirebaseDynamicLinksCustomDomains .

      <?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>
      
    6. 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 chave FirebaseDeepLinkPasteboardRetrievalEnabled como NO .

Para lidar com um link dinâmico em seu aplicativo, dois cenários exigem implementação.

Estado encerrado

Configure os seguintes métodos:

  1. FirebaseDynamicLinks.getInitialLink - retorna um Future<PendingDynamicLinkData?>
  2. FirebaseDynamicLinks.onLink - manipulador de eventos que retorna um Stream contendo um PendingDynamicLinkData?

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));

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