我正在尝试为单个TWA应用程序添加子域。我已经完成了从网站到应用程序的资产链接。即使链接完成,我每次都可以看到 URL 栏。
字符串.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>
安卓清单
<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" />
在安卓清单中添加了意图过滤器
<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"/>
我可以看到没有 URL 栏的 www.xxxx.com,但 www.abcd.xxxx.com 我可以看到 URL 栏。
https://developers.google.com/digital-asset-links/tools/generator
我使用以下链接检查了链接,它返回主机已授予应用程序深度链接
我一直在四处挖掘以尝试自己解决这个问题,虽然我还没有答案,但我已经取得了足够的进展,我可以从我的 TWA 中更改子域并且没有显示 url 栏。
我的第一步是将我的资产语句设置为具有通配符:
<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(我们的网络应用程序有许多子域),我注意到以前测试的域开始工作。似乎通过将URL设置为DEFAULT_URL
,该应用程序以某种方式将这些缓存为受信任。我尝试卸载该应用程序并清除我的 Chrome 缓存,但这仍然存在,所以我不确定这是如何工作的。
我可以肯定为您确认的是该设置:
<meta-data android:name="android.support.customtabs.trusted" android:value="@string/app_url" />
将不起作用,您正在尝试在类名上设置元数据,当我浏览android.support.customtabs.trusted
类时,我可以看到DEFAULT_URL
是唯一用于 URL 定义的属性。
到目前为止,我的结论是:我不认为你需要多次asset_statements。我不认为您需要多个元数据字段,也不相信在意图过滤器中设置多个 data:host 字段会产生预期的效果。我认为底线是目前没有支持的方法来处理TWA中的子域。
编辑:
刚刚确认,当我测试和安装不同版本的应用程序时,这种神奇的可信 URL 缓存正在发生。 在另一台设备上安装最新版本将恢复为单个受信任的 URL,并且子域导航失败。
您应该将 assetlinks.json 文件添加到您的应用可能访问的每个子域中
所以所有这些链接都应该返回资产文件
https://www.xxxx.com/.well-known/assetlinks.json
https://www.abcd.xxxx.com/.well-known/assetlinks.json
还要确保它遵循这些准则。
200 个响应和内容类型application/json
重定向将不起作用
对于每个域和子域,添加带有"android:autoVerify="true"的意图:
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="sub.domain.com"
/>
</intent-filter>
或
res/values/strings.xml:
<string-array name="additional_trusted_origins">
<item>https://sub1.google.com</item>
<item>https://sub2.google.com</item>
<item>https://sub3.google.com</item>
</string-array>
和 AndroidManifest.xml:
<activity
android:name="com.google.androidbrowserhelper.trusted.LauncherActivity"
android:label="@string/app_name"
>
<meta-data
android:name="android.support.customtabs.trusted.DEFAULT_URL"
android:value="https://google.com" />
<meta-data android:name="android.support.customtabs.trusted.ADDITIONAL_TRUSTED_ORIGINS"
android:resource="@array/additional_trusted_origins" />
<intent-filter android:autoVerify="false">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="*.google.com" />
</intent-filter>
</activity>