Android M已添加对App links的支持,方法是在网络服务器上创建一个特殊的assetlinks.json,以便将链接处理委派给移动应用。
例如,这里是此类文件的内容:
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.costingtons.app",
"sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:"
"A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
}
}]
目前,该关系定义为common.handle_all_urls
,这意味着任何网址都会被路由到该应用。
我希望该应用能够打开特定路线,例如https://costingtons.com/products/a-product会在应用中打开,但https://costingtons.com会打开网络版。
Apple Universal Links类似的配置文件可以定义要在应用中打开的路径,语法支持模式匹配,如/products/*
等。
有没有办法在Android中使用App Links做类似的事情?
答案 0 :(得分:4)
assetlinks.json文件指定该特定应用程序允许打开所有网址,但应用程序本身(通过其AndroidManifest中的intent过滤器)可能更具限制性,因此它只会打开产品链接,而不是一般网站链接。
此外,即使针对特定URL调用了intent过滤器,接收者仍然可以决定不处理它,将其留给下一个处理程序(通常是浏览器)。 (也许你希望应用程序在蜂窝网络上处理链接,但让用户在wifi上处理它们。)
答案 1 :(得分:1)
据我所知,没有办法设置assetlinks文件来确定哪些路径可以/应该打开应用程序(使用iOS AASA文件的方式)。
但是,由于Android使用了Intent Filters,您可以使用它们来限制应该打开应用程序的路径。根据之前的评论,assetlinks文件仅说明可以打开应用程序的URL。应用程序可以定义应该打开应用程序的URL。
因此,使用上面的示例,您需要为您的某个活动定义一个Intent Filter,它看起来像:
<intent-filter android:autoVerify="true">
<category android:name="android.intent.category.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Only accept URLs that look like https://costingtons.com/products/* -->
<data
android:scheme="https"
android:host="costingtons.com"
android:pathPrefix="/products/*" />
</intent-filter>
我发现这方面的最大限制是,排除某些路径(即没有前缀为xyz的网址)无法解决,所以你&#39 ; d必须提供一组详尽的Intent过滤器,以匹配您希望允许进入应用程序的所有URL。
答案 2 :(得分:0)
@zmarties是正确的,您唯一需要做的就是确保您的Manifest.xml配置为支持https://yourdomain.com/product/*
而不是https://yourdomain.com/otherthings
,https://yourdomain.com/otherthings
然后会打开一个网站浏览器。
如何证明?
ASOS和我所知道的大多数电子商务应用程序都启用了应用程序索引编制。
已安装ASOS Android应用:
adb shell am start -a android.intent.action.VIEW \
-c android.intent.category.BROWSABLE \
-d "https://www.asos.com/men/shoes-boots-trainers/cat?cid=4209"
将在其Android应用中显示类别屏幕,
而以下内容将打开Web浏览器:
adb shell am start -a android.intent.action.VIEW \
-c android.intent.category.BROWSABLE \
-d "https://www.asos.com/dummycrazyurl"