无法在 Android 设备上验证我的应用程序的应用程序链接。使用
example.com
表示域,使用 com.example.app
表示应用程序 ID,而不是 real。
adb shell am start -W -a android.intent.action.VIEW -d https://example.com/ com.example.app
adb shell am start -W -a android.intent.action.VIEW -d https://example.com/
启动,仅使用 url,不起作用,chrome 会使用链接打开。App Info > Open by Default > Verified links
对于这个 com.example.app
是空的并且呈灰色。adb shell pm get-app-links com.example.app
不返回/打印任何内容adb logcat -e "(IntentFilterIntentOp|IntentFilterIntentSvc)"
重新验证应用程序链接时,无法使用
adb shell pm verify-app-links -- re-verify
curl https://example.com/.well-known/assetlinks.json -I
返回以下输出:HTTP/1.1 200 OK
Date: Thu, 01 Jun 2023 09:05:51 GMT
Content-Type: application/json
Content-Length: 337
Connection: keep-alive
Strict-Transport-Security: max-age=63072000; includeSubdomains;
X-Content-Type-Options: nosniff
Last-Modified: Thu, 01 Jun 2023 08:40:55 GMT
ETag: "151-5fd0d65109bf8"
Accept-Ranges: bytes
Cache-Control: max-age=2592000
Expires: Sat, 01 Jul 2023 09:05:51 GMT
Vary: User-Agent
X-FRAME-OPTIONS: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Content-Security-Policy: default-src 'self' 'unsafe-inline' 'unsafe-eval' data: https: *.googleadservices.com *.doubleclick.net *.google.com *.googletagmanager.com *.gstatic.com *.googleapis.com *.facebook.net; frame-ancestors 'self'
Referrer-Policy: no-referrer
Feature-Policy: microphone 'none'; geolocation 'none'
Expect-CT: max-age=0
CF-Cache-Status: DYNAMIC
Set-Cookie: __cf_bm=wkXkFwgBEGc6Ghwu.9PHLwFccvVaqOaV0zj8WyBdDf0-1685610351-0-AeqBrPqaw4CpOpFKrWxzWbN7139MTi3/194uecclD0smsP++N2TXfshkdaoVy4FtqyWm1JfEkkKH3joUoPoU2HY=; path=/; expires=Thu, 01-Jun-23 09:35:51 GMT; domain=.example.com; HttpOnly; Secure; SameSite=None
Server: cloudflare
CF-RAY: 7d064c15bf09f44a-BOM
此 assetlinks.json 的内容如下,并且 SHA256 签名与我用于构建发布 apk 的密钥的签名匹配。
[
{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.com",
"sha256_cert_fingerprints": ["SO:ME:FA:KE:SH:A2:56:5C:57:D7:22:D4:ED:A3:C4:97:23:A2:4E:B0:30:93:A5:57:39:98:B1:E0:3E:03:64:73"]
}
}
]
curl "https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://example.com&relation=delegate_permission/common.handle_all_urls"
返回以下json:{
"statements": [
{
"source": {
"web": {
"site": "https://example.com."
}
},
"relation": "delegate_permission/common.handle_all_urls",
"target": {
"androidApp": {
"packageName": "com.example.app",
"certificate": {
"sha256Fingerprint": "SO:ME:FA:KE:SH:A2:56:5C:57:D7:22:D4:ED:A3:C4:97:23:A2:4E:B0:30:93:A5:57:39:98:B1:E0:3E:03:64:73"
}
}
}
}
],
"maxAge": "589172.377669267s"
}
adb shell pm get-app-links --user cur com.example.app
User 0:
Verification link handling allowed: true
Selection state:
Disabled:
example.com
我正在 Android 13、Oneplus Nord 2 和 Android 12 设备上测试应用程序链接。我找不到任何讨论运行时没有输出的案例的文档
adb shell pm get-app-links com.example.app
。
我在为Android应用程序实现深度链接时遇到的常见错误。请在您的 Android 代码中验证这些
确保接收深度链接意图的 Activity 应该是
android:exported="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" />
<data android:host="example.com" />
<data android:pathPrefix="/xyz/verify" />
</intent-filter>`
对于通过内部应用程序共享、本地构建和播放控制台签名的构建版本进行的构建,SHA-256 密钥有所不同,因此建议还使用名为 Asset Links Tool
的应用程序验证构建 apk SHA-256 密钥还要确保您的 assetLinks.json 页面可公开访问,以 google
为例希望这能帮助您排除我遇到的任何可能的错误!
我们也面临同样的问题。突然我们的深层链接不起作用了。当我们分析我们的深度链接方案时,我们发现我们的深度链接方案是从 strings.xml 引用的。即使我们设置 translatable=false,其他语言的 strings.xml 中也会提到字符串。由于这些问题,我们对我们的方案进行了硬编码,路径没有从 strings.xml 引用。希望这个答案可能有用