Atividades confiáveis na Web de várias origens

As atividades confiáveis na Web são uma nova maneira de integrar o conteúdo do app da Web, como o PWA, ao app Android usando um protocolo baseado em guias personalizadas.

navegação ff-origin

Uma atividade confiável na Web precisa que as origens abertas sejam validadas usando Digital Asset Links para mostrar o conteúdo em tela cheia.

Quando um usuário sai da origem validada, a interface da guia personalizada é mostrada. A barra de URL na guia Personalizada informa aos usuários que eles estão navegando em um domínio fora do aplicativo, além de oferecer um botão X que permite retornar rapidamente à origem validada.

No entanto, também é comum que os apps da Web criem experiências que abrangem várias origens. Por exemplo, um aplicativo de compras com a experiência principal em www.example.com, enquanto o fluxo de finalização de compra é hospedado em checkout.example.com.

Nesses casos, mostrar as guias personalizadas não é o ideal, não apenas porque o usuário está no mesmo app, mas também porque a barra superior pode fazer com que ele pense que saiu do aplicativo e abandonou a finalização da compra.

Atividades confiáveis na Web permitem que os desenvolvedores validem várias origens, e o usuário permanecerá em tela cheia ao navegar por elas. Assim como acontece com o domínio principal, o desenvolvedor precisa controlar cada origem validada.

Como configurar a validação para várias origens

Como na origem principal, a validação é feita por meio do Digital Asset Links, e cada domínio a ser validado precisa ter o próprio arquivo assetlinks.json.

Em nosso exemplo com www.example.com e checkout.example.com, teríamos:

  • https://www.example.com/.well-known/assetlinks.json
  • https://checkout.example.com/.well-known/assetlinks.json

Como cada domínio está sendo conectado ao mesmo app Android, os arquivos assetlinks.json têm a mesma aparência.

Supondo que o nome do pacote do aplicativo para Android seja com.example.twa, os dois arquivos assetlink.json conteriam algo semelhante a:

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
  "namespace": "android_app",
  "package_name": "com.example",
   "sha256_cert_fingerprints": ["..."]}
}]

Adicionar várias origens ao aplicativo Android

No app Android, a declaração asset_statements precisa ser atualizada para conter todas as origens que precisam ser validadas:

<string name="asset_statements">
[{
    \"relation\": [\"delegate_permission/common.handle_all_urls\"],
    \"target\": {
        \"namespace\": \"web\",
        \"site\": \"https://www.example.com\"
    }
}],
[{
    \"relation\": [\"delegate_permission/common.handle_all_urls\"],
    \"target\": {
        \"namespace\": \"web\",
        \"site\": \"https://checkout.example.com\"
    }
}],
</string>

Adicionar origens extras à LauncherActivity

Como usar a LauncherActivity padrão

O LauncherActivity que faz parte da Biblioteca de Suporte android-browser-helper oferece uma maneira de adicionar várias origens para validação pela configuração do projeto Android.

Primeiro, adicione um elemento string-array ao arquivo res/values/strings.xml. Cada URL extra a ser validado estará dentro de um subelemento item:

...
<string-array name="additional_trusted_origins">
    <item>https://www.google.com</item>
</string-array>
...

Em seguida, adicione uma nova tag meta-data dentro do elemento de atividade existente que faz referência ao LauncherActivity, dentro de AndroidManifest.xml:

...
<activity android:name="com.google.androidbrowserhelper.trusted.LauncherActivity"
    android:label="@string/app_name">


    <meta-data
        android:name="android.support.customtabs.trusted.ADDITIONAL_TRUSTED_ORIGINS"
        android:resource="@array/additional_trusted_origins" />


    ...
</activity>
...

Como usar uma LauncherActivity personalizada

Ao usar o código personalizado para iniciar uma Atividade na Web confiável, é possível adicionar origens extras chamando setAdditionalTrustedOrigins ao criar a intent para iniciar essa atividade:

public void launcherWithMultipleOrigins(View view) {
  List<String> origins = Arrays.asList(
      "https://checkout.example.com/"
  );


  TrustedWebActivityIntentBuilder builder = new TrustedWebActivityIntentBuilder(LAUNCH_URI)
      .setAdditionalTrustedOrigins(origins);


  new TwaLauncher(this).launch(builder, null, null);
}

Conclusão

Depois de concluir essas etapas, a Atividade na Web confiável vai estar pronta para oferecer suporte a várias origens. O android-browser-helper tem um app de exemplo (link em inglês) para atividades da Web confiáveis de várias origens. Não se esqueça de conferir.

Solução de problemas

A configuração do Digital Asset Links envolve algumas etapas. Se o aplicativo ainda estiver mostrando a barra de guias personalizadas na parte de cima, é provável que algo esteja errado com a configuração.

O Guia de início rápido da Atividade na Web confiável tem uma ótima seção de solução de problemas sobre como depurar problemas do Digital Asset Link.

Há também a incrível Ferramenta de link de recursos do Pedro, que ajuda a depurar links de recursos digitais em aplicativos instalados no dispositivo.