我们如何将同一提供商的子域添加到基于TWA的android应用中?

时间:2019-04-25 11:04:26

标签: android progressive-web-apps trusted-web-activity

我正在尝试为单个TWA应用添加子域。我已经完成了从网站到应用程序的资产链接。即使链接完成,我也可以每次看到URL栏。

strings.xml

<resources>
<string name="app_name">XXXX </string>
    <string name="asset_statements" translatable="false">
    [{
        \"relation\": [\"delegate_permission/common.handle_all_urls\"],
        \"target\": {
            \"namespace\": \"web\",
            \"site\": \"https://www.xxxx.com\"}
    },{
        \"relation\": [\"delegate_permission/common.handle_all_urls\"],
        \"target\": {
            \"namespace\": \"web\",
            \"site\": \"https://www.abcd.xxxx.com\"}
    }]

</string>
</resources>

AndroidManifest

 <activity
        android:name="android.support.customtabs.trusted.LauncherActivity">

        <!-- Edit android:value to change the url opened by the TWA -->
        <meta-data
            android:name="android.support.customtabs.trusted.DEFAULT_URL"
            android:value="https://www.xxxx.com" />
        <meta-data
            android:name="android.support.customtabs.trusted"
            android:value="https://www.abcd.xxxx.com" />

///在Android清单中添加了意图过滤器

 <intent-filter>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE"/>

            <!-- Edit android:host to handle links to the target URL-->
            <data
                android:scheme="https"
                android:host="www.xxxx.com"/>
            <data
                android:scheme="https"
                android:host="www.abcd.xxxx.com"/>

我可以看到没有网址栏的www.xxxx.com,但是对于www.abcd.xxxx.com,我可以看到网址栏。

https://developers.google.com/digital-asset-links/tools/generator

我使用以下链接检查了链接,并返回主机已授予应用深度链接

2 个答案:

答案 0 :(得分:0)

我一直在努力尝试自己解决这个问题,虽然我还没有答案,但是我已经取得了足够的进展,可以在TWA内更改子域,而没有网址栏显示。

我的第一步是将资产报表设置为具有通配符:

    <string name="asset_statements">
        [{
            \"relation\": [\"delegate_permission/common.handle_all_urls\"],
            \"target\": {
                \"namespace\": \"android_app\",
                \"site\": \"https://*.newvote.org\"}
        }]
    </string>

然后,我可以将android.support.customtabs.trusted.DEFAULT_URL元数据设置为子域中的任何URL,并且它可以与Web服务器上当前的assetlinks.json文件一起愉快地工作。但是,我无法在应用程序中更改子域/ URL,因为这会打开URL栏。

在测试时,我开始尝试使用不同的URL(我们的Web应用程序具有许多子域),并且我注意到先前测试的域开始起作用。似乎通过将URL设置为DEFAULT_URL,应用程序以某种方式将它们缓存为受信任的。我曾尝试卸载该应用程序并清除我的Chrome缓存,但这种情况仍然存在,因此我不确定这是如何工作的。

我可以肯定地为您确认的是该设置:

<meta-data android:name="android.support.customtabs.trusted" android:value="@string/app_url" />

将无法正常工作,您正在尝试在类名称上设置元数据,当我探索android.support.customtabs.trusted类时,我看到DEFAULT_URL是唯一用于URL定义的属性。 / p>

到目前为止,我的结论是:我不认为您需要多个asset_statement。我不认为您需要多个元数据字段,也不相信在intent-filter中设置多个data:host字段会达到预期的效果。我认为目前最重要的是,目前尚没有支持在TWA中处理子域的方法。

编辑:

只需确认当我测试并安装该应用程序的不同版本时,这种对可信URL的神奇缓存就会发生。在另一台设备上安装最新版本将还原为单个受信任的URL,并且子域导航失败。

答案 1 :(得分:0)

您应将assetlinks.json文件添加到您的应用可能访问的每个子域

所有这些链接应返回资产文件

  https://www.xxxx.com/.well-known/assetlinks.json
  https://www.abcd.xxxx.com/.well-known/assetlinks.json

还要确保遵循这些guidelines

200个响应和内容类型application/json 重定向不起作用