我有一个使用应用链接的游戏。从我的计算机运行调试和发布版本时,应用程序链接工作正常,但不适用于从 Google Play 下载的版本。使用 Google Play 版本时,我会收到一个对话框,询问哪个应用程序应该打开链接。
我使用“Google Play 应用签名”并了解发布的 APK 由 Google 签名并具有不同的签名。我已将 Google Play 上列出的应用签名证书中的 SHA-256 证书指纹添加到我的assetlinks.json 中,因此它包含来自本地和 Google Play 版本的指纹。
我还从 Google Play 下载了一个派生的 APK,并确保指纹与 assetlinks.json 文件中的指纹匹配。
这是一个示例 URL,在 Android 中单击该 URL 时应打开该应用程序,它适用于本地构建,但不适用于 Google Play 版本。相反,我收到一个对话框,询问哪个应用程序应该打开链接。
https://letsdraw.fun/ec?parent=Z0ibN7m-H8jO1jCiMRQtY23VTpKjnIch
我正在从实时发布版本的 logcat 中写出 SHA256 指纹,以仔细检查它是否正确,并且看起来一切正常。
原始签名的 APK 和 Google Play 签名的 APK 可以从这里下载。这两个 APK 都是从 Google Play 下载的,一个是“原始的”,一个是“衍生的”,因此除了签名之外,它们应该是相同的。有趣的是,它们的尺寸略有不同。11,590,297 字节 vs 11,601,619 字节。
查看adb shell dumpsys package domain-preferred-apps原始签名 apk的输出是
Package: com.scribble.exquisitecorpse
Domains: letsdraw.fun …Run Code Online (Sandbox Code Playgroud) 我有一个 Android 应用程序,其应用程序链接在运行 Android OS 11 的设备上按预期工作,但由于这些targetSdkVersion : 30更改,它们在运行 Android OS 12 的另一台设备上被破坏(默认情况下 Web 链接不会打开应用程序)。我应该转到操作系统级别设置并手动添加(请参阅我的应用程序屏幕截图)链接以使它们打开应用程序。
有一些应用程序,例如 gmail,默认情况下已验证链接(请参阅 gmail 屏幕截图),我也试图通过遵循此处的Android 文档来为我的应用程序实现相同的目标。但是,当我尝试查看验证结果时,我没有看到预期的输出(请参阅终端屏幕截图)。我等了几分钟才查看验证结果,但还没有任何结果。可能我错过了一些东西,我需要一些帮助。谢谢。
我正在使用以下应用程序链接:https ://developer.android.com/training/app-links/verify-site-associations
使用cmd时:adb shell pm verify-app-links
show: Unknown command: verify-app-links
Run Code Online (Sandbox Code Playgroud)
我的adb版本是:
$ adb --version
Android Debug Bridge version 1.0.41
Version 31.0.3-7562133
Run Code Online (Sandbox Code Playgroud)
几乎是最新的,为什么未知命令:verify-app-links?
这个问题实际上有两个部分
从 Android 12 开始,深层链接发生了很大变化。
我的第一个问题是这两个都需要实现才能使深层链接发挥作用吗?
其次,在阅读文件时,我发现了这个特殊的注释,其中包含以下内容
不要在清单文件中发布带有公众无法访问的开发/测试 URL 的应用程序(例如只能通过 VPN 访问的任何 URL)。这种情况下的解决方法是配置构建变体,为开发构建生成不同的清单文件。
这是否意味着访问受限的暂存环境不能用于测试?
笔记:
<activity
android:name=".view.activity.MemberProfileActivity"
android:screenOrientation="portrait"
android:noHistory="true"
android:windowSoftInputMode="adjustResize|stateHidden">
<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="http" />
<data android:scheme="https" />
<data
android:host="@string/base_domain"
android:pathPrefix="/member_profile/" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
任何帮助是极大的赞赏。
android android-manifest android-deep-link android-app-links android-12
我正在尝试动态功能和Instant Apps。为了在各种功能之间导航,我使用了深层链接。
每次导航到另一个“活动”时,都会看到消歧对话框少于1秒,其中列出了1个应用程序。请注意,“ Once”和“ Always”(在荷兰语中)的选项是如何变灰的。
示例Github项目
我创建了一个简约的示例,该示例与我在Github上的当前结构相匹配。需要Android Studio 3.5-RC2
一些上下文:
我非常有信心,深层链接配置正确。但是由于你们还是想检查一下,因此配置如下:
1-清单:
<activity
android:name=".ProfileActivity">
<intent-filter
android:autoVerify="true"
android:priority="100">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="giddy.entreco.nl"
android:pathPrefix="/profile"
android:scheme="http" />
<data android:scheme="https" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
2-Assetlinks 我的域包含一个可公开访问的assetlinks.json
3-Sha's正确 我使用的sha's正确
Executing tasks: [signingReport] in project
SHA1: 3A:52:19:77:C1:AD:18:F4:98:21:77:74:37:DC:9B:89:02:64:6E:C6
SHA-256: 25:DD:C3:7B:8E:35:D3:39:D5:D4:6C:B5:EA:7D:14:AF:82:EC:9C:56:A6:F5:76:A3:E1:D7:69:B3:EC:58:72:E8
Valid until: Saturday, March 21, 2048
Run Code Online (Sandbox Code Playgroud)
4-确认的数字资产链接文件 所有检查均通过 https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://giddy.entreco.nl&relation=delegate_permission/common.handle_all_urls
5-测试URL意图 也可以!唯一的问题是我在短时间内看到了消歧对话框。
附加信息
我apply plugin: 'com.android.dynamic-feature'在所有模块中使用(app当然课程除外)
Android Studio:3.5 RC2;Android-gradle-plugin:3.5.0-rc02
我的设备是OnePlus6-配备氧气9.0.7和Android 9
android android-manifest android-instant-apps android-app-bundle android-app-links
我已经根据以下链接实现了Android应用程序链接。
https://developer.android.com/studio/write/app-link-indexing.html
https://developer.android.com/training/app-links
我已经将assetlinks文件托管到我们的域https://ourdomain/.well-known/assetlinks.json中, 而且我已经使用https://developers.google.com/digital-asset-links/tools/generator 和从android studio的应用链接助手也。并通过两种方式获得了验证状态。
现在,当我生成一个已签名的构建并通过Google驱动器链接对其进行测试时。Android应用程序链接按预期工作(单击链接后,应用程序将打开,而无需打开适用于android 6.0及更高版本的消歧对话框)。
将相同版本上传到Play商店后,它不起作用。
以下是清单文件中使用的代码。
<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="<ourdomain>" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
编辑:Android应用程序链接将其上传到Play商店后,按预期工作了一天。并在第二天重新开始消除歧义对话。知道可能是什么问题吗?
Play商店中的同一版本在不同的日子给了我两个不同的状态,分别是Ask和Always。
adb shell dumpsys程序包domain-preferred-apps
当我运行上面的命令
android android-studio react-native react-native-android android-app-links
所以,基本上我在实现应用程序链接的第一步中,我偶然发现了这个工具:
https://developers.google.com/digital-asset-links/tools/generator
我给它我的域名、我的包名称,然后从 Play 商店控制台复制粘贴我的应用程序包指纹。它assetlinks.json为我生成一个文件,我根据需要将其放在https://my-domain/.well-known/assetlinks.json我测试下载,它有效,然后我要求这个工具来测试它,它说
No app deep linking permission found for package_name at my_domain.
Run Code Online (Sandbox Code Playgroud)
我的日志表明GoogleAssociationService来了并获取了文件(200 状态响应和正确的字节数)。
所以基本上我输入了好的值,它生成它,然后获取它并告诉我它是错误的,我错过了什么?他怎么会对自己创造的东西感到不高兴呢?
我注意到我的设备和托管在https://example.com/.well-known/assetlinks.json上的 DAL 之间的缓存机制的影响,我希望了解它是如何工作的,以及是否可以绕过它。
问题是我正在对 DAL 的更改进行原型设计(特别是添加另一个应用程序,但该更改应该与问题的目的无关),并且从应用程序的角度看不到更改。例子:
[
{
"relation": [
"delegate_permission/common.handle_all_urls"
],
"target": {
"sha256_cert_fingerprints": [
"<redacted>"
],
"namespace": "android_app",
"package_name": "com.my_app"
}
}
]
Run Code Online (Sandbox Code Playgroud)
我安装了com.my_app,验证成功。
我将 DAL 编辑为以下内容(请注意添加了第二个应用程序条目):
[
{
"relation": [
"delegate_permission/common.handle_all_urls"
],
"target": {
"sha256_cert_fingerprints": [
"<redacted>"
],
"namespace": "android_app",
"package_name": "com.my_app"
}
},
{
"relation": [
"delegate_permission/common.handle_all_urls"
],
"target": {
"sha256_cert_fingerprints": [
"<redacted>"
],
"namespace": "android_app",
"package_name": "com.my_other_app"
}
}
]
Run Code Online (Sandbox Code Playgroud)
com.my_other_app,验证失败。com.my_other_app,验证成功。使用Google 的语句列表测试器 …
是否可以使用 Android 应用程序链接,例如https://:https://my-app.com/callback在 OAuth2 流程结束时从 Android WebView 重定向回我的应用程序?我知道正常的深层链接如何工作,例如com.my-app://或my-app://可用于重定向回我的应用程序。根据我的理解,WebView 不知道如何处理此类协议,将请求传递给操作系统,然后操作系统将请求传递给我的应用程序,如果AndroidManifest.xml.
这可以通过方案来完成吗https://?或者重定向始终会被 WebView 捕获,并且无法重定向回我的应用程序?
指定我想要通过步骤实现的目标:
AndroidManifest.xml来处理应用程序链接,例如:<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="http" android:host="my-app.com/callback" />
<data android:scheme="https" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
assetlinks.json提供了有效的https://my-app.com/.well-known/assetlinks.json(此时,IntentFilterIntent日志显示 JSON 验证成功,我可以使用类似命令从终端打开应用程序npx uri-scheme open https://my-app.com/callback)CustomTabsIntent.launchUrl我的应用程序通过使用如下 URL启动来启动 OAuth2 流程:https://accounts.google.com/o/oauth2/v2/auth?
scope=email%20profile&
response_type=code&
state=state&
redirect_uri=https://my-app.com/callback&
client_id=client_id
Run Code Online (Sandbox Code Playgroud)
完成这些步骤后,我希望我的应用程序在成功登录后打开,因为它是 URL 的有效处理程序,并且不希望卡在浏览器中。这可能吗,或者请求永远不会从浏览器转发到操作系统,因为浏览器是该https://方案的有效处理程序?
如果上述不可能,是否有办法从 WebView 导航回应用程序,提供 …
我尝试使用 Firebase 动态链接运行应用互动广告系列,但收到一个问题:“该链接不起作用,因为 Google Ads 不支持第三方重定向网址”。将其替换为支持的链接类型`。
您知道如何将动态链接应用于 Google Ads 应用互动广告系列吗?
deep-linking ios-universal-links firebase-dynamic-links google-ads-api android-app-links
android ×9
android-12 ×2
applinks ×2
deep-linking ×2
adb ×1
intentfilter ×1
oauth-2.0 ×1
react-native ×1