官方介绍Android App Links内容是:
Android App Links are a special type of deep link that allow your website URLs to immediately open the
corresponding content in your Android app (without requiring the user to select the app).
To add Android App Links to your app, define intent filters that open your app content using HTTP URLs (as
described in [Create Deep Links to App Content]), and verify that you own both your app and the website
URLs (as described in this guide). If the system successfully verifies that you own the URLs, the system
automatically routes those URL intents to your app.
意思就是AppLinks是一个特殊的DeepLink,它可以让你的应用和你的网站URL进行绑定,这样当你在点击你网站链接的时候(非浏览器中)就能调起你的App,而不是出现选择界面,使用方法如下
Create Deep Links to App Content
这种绑定不是在点击的时候才核对链接,下面会介绍在什么情况下核对这种绑定的。
官方是这样介绍DeepLink的。
A [deep link] is an intent filter that allows users to directly enter a specific activity in your Android app.
Clicking one of these links might open a disambiguation dialog, which allows the user to select one of
multiple apps (including yours) that can hande the given URL. For example, figure 1 shows the
disambiguation dialog after the user clicks a map link, asking whether to open the link in Maps or Chrome.
Deeplink是一个intent过滤器,他可以使用户直接进入某个Activity页面。但是有个不好的是当匹配到多个intent时就会弹一个让用户选择的框。官方给了下面一张图,而AppLinks就不会有这个弹框:
具体区别官方也列了以下:
Item | Deep links | App links |
---|---|---|
Intent URL | scheme http, https, or a custom scheme | Requires http or https |
Intent action | Any action | Requires android.intent.action.VIEW |
Intent category | Any category | Requires android.intent.category.BROWSABLE and android.intent.category.DEFAULT |
Link verification | None | Requires a Digital Asset Links file served on you website with HTTPS |
User experience | May show a disambiguation dialog for the user to select which app to open the link | No dialog; your app opens to handle your website links |
Compatibility | All Android versions | Android 6.0 and higher |
官方给的步骤如下Handling Android App Links
...>
"true">
"android.intent.action.VIEW" />
"android.intent.category.DEFAULT" />
"android.intent.category.BROWSABLE" />
"http" android:host="www.example.com" />
"https" />
这里注意下,开启autoVerify的activity中的
<intent-filter>
...
<data android:scheme="https" android:host="www.example.com" />
<data android:scheme="app" android:host="open.my.app" />
intent-filter>
上面在同一个
具体格式如下:
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example",
"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"]
}
}]
其中package_name就是应用的包名,sha256_cert_fingerprints为正式版的签名。上传时修改这两个属性值。如果一个应用对于多个网站时,可以配置多个对象,配置如下:
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.puppies.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"]
}
},
{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.monkeys.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"]
}
}]
然后将该文件放在网站的.well-known目录下,放了之后要试试能不能用:
https://domain.name/.well-known/assetlinks.json
提交完后确定以下几个是否正确:
Be sure of the following:
* The `assetlinks.json` file is served with content-type `application/json`.
* The `assetlinks.json` file must be accessible over an HTTPS connection, regardless of whether your app's intent filters declare HTTPS as the data scheme.
* The `assetlinks.json` file must be accessible without any redirects (no 301 or 302 redirects) and be accessible by bots (your `robots.txt` must allow crawling `/.well-known/assetlinks.json`).
* If your app links support multiple host domains, then you must publish the `assetlinks.json` file on each domain. See [Supporting app linking for multiple hosts](https://developer.android.com/training/app-links/verify-site-associations.html#multi-host).
* Do not publish your app with dev/test URLs in the manifest file that may not be accessible to the public (such as any that are accessible accessible only with a VPN). A work-around in such cases is to [configure build variants](https://developer.android.com/studio/build/build-variants.html) to generate a different manifest file for dev builds
还有AppLinks仅支持https的网站。
https://digitalassetlinks.googleapis.com/v1/statements:list?
source.web.site=https://domain.name:optional_port&
relation=delegate_permission/common.handle_all_urls
adb shell am start -a android.intent.action.VIEW \
-c android.intent.category.BROWSABLE \
-d "http://domain.name:optional_port"
下面命令测试已经存在的绑定:
adb shell dumpsys package domain-preferred-apps
上面命令等价于:
adb shell dumpsys package d
如果存在绑定的会显示如下结果:
Package: com.android.vending
Domains: play.google.com market.android.com
Status: always : 200000002
参数含义如下:
* Package - Identifies an app by its package name, as declared in its manifest.
* Domains - Shows the full list of hosts whose web links this app handles, using blank spaces as delimiters.
* Status - Shows the current link-handling setting for this app. An app that has passed verification, and
whose manifest contains android:autoVerify="true", shows a status of always. The hexadecimal number after
this status is related to the Android system's record of the user’s app linkage preferences. This value does
not indicate whether verification succeeded.
优点:
缺点:
使用该机制可以直接绕过intent方式,直接通过url就能打开对应的界面。不过在设置中还是能关闭这个。目前支持该功能的应用和网站还是很少。