kotlin Android应用程序链接在Android 12中不工作总是在浏览器中打开

hwazgwia  于 2023-01-21  发布在  Kotlin
关注(0)|答案(9)|浏览(247)

我已经托管assetlinks文件到我们的域https://ourdomain/.well-known/assetlinks.json也验证了这一点使用https://developers.google.com/digital-asset-links/tools/generator和从android studio的应用程序链接助理,并从这两种方式得到验证的状态。但当我分享调试APK测试它总是在浏览器中打开。我也尝试上传应用程序商店,并从那里下载测试,但它总是在浏览器中打开。
注:对于调试版本,使用了我的笔记本电脑SHA-256,并且一旦应用程序在Play商店上上线,就将托管资产链接文件上的SHA(通过转到Play控制台中的应用程序 Jmeter 板,然后转到发布管理--〉应用程序签名获得SHA-256)更改为我们的域https://ourdomain/.well-known/assetlinks.json
下面是清单文件中使用的代码。

<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="abc.test.com" />
        </intent-filter>
wqnecbli

wqnecbli1#

我有同样的问题,并解决了去应用程序信息设置-〉设置为默认-〉支持网址,你会看到你的短链接,所以打开它,它会工作;)
更新:
正如每个人都说它不是一个编程的方式,所以最好的方式是下面的链接说

qco9c6ql

qco9c6ql2#

Deep-linksAndroid 11或更早版本中工作,但在Android 12中不工作。
但即使添加了assetlinks.json文件并添加了所有intent-filtersAndroid 12仍然无法检测到deep-links。在Android-Manifest文件中,结果表明方案的tag需要与数据标签分离,如下所示:

// OLD - Which is only working Android 11 or before

<data
  android:host="domain.name"
  android:pathPrefix="/videos"
  android:scheme="https" />

// NEW - Which is working on all including Android 12

<data android:scheme="https" />
<data
    android:host="domain.name"
    android:pathPrefix="/videos" />
wdebmtf2

wdebmtf24#

就我而言,这款应用在android 11上运行正常,但在android 12上用android studio编译后就无法运行了。
我测试了制作应用程序;它与应用程序链接工作正常。
对于开发版本,我必须转到应用程序信息-〉默认打开-〉添加链接-〉勾选所有可用链接
这似乎只发生在开发构建中;从Google应用程序商店安装的应用程序会自动选中所有链接。

rvpgvaaj

rvpgvaaj5#

在我的情况下,问题是与存储构建和https://ourdomain/.well-known/assetlinks.json之间的SHA签名不一致,这就是为什么深度链接在Android 12默认情况下被禁用,为了修复它,我们可以将我们的手机与问题构建连接到Android工作室,并运行此命令:

adb shell pm get-app-links com.your_app_package_name

因此,您应该看到类似以下的内容:

com.your_app_package_name:
ID: .....
Signatures: [AB:CD:EF:HI:GK...]
Domain verification state:
   your_domain.com legacy_failure

接下来,您需要检查签名指纹是否包含在https://ourdomain/.well-known/assetlinks.json中,在我的情况下,它不包含,还要记住,assetlinks.json文件中可以包含几个签名,例如调试、alpha、beta和生产版本,它应该如下所示:

[
  {
   "relation": ["delegate_permission/common.handle_all_urls"],
    "target": {
     "namespace": "android_app",
     "package_name": "com.your_app_package_name",
     "sha256_cert_fingerprints" :["DE:BU:GS:HA:25:6...","PR:OD:SH:A:25:6..."]
        }
    }
]
sh7euo9m

sh7euo9m6#

在域中添加assetlinks.json后,您必须重新安装应用程序(只需卸载应用程序并重新安装),这将工作

u91tlkcl

u91tlkcl7#

这帮我解决了这个问题:

<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:host="my.page.link"  />
    <data android:scheme="https" />
        
</intent-filter>

注意:android:autoVerify="true"
奇怪的是,这个问题只在某些Android手机上出现,而且在API版本之间不一定一致。API 33上的Pixel 4在没有此修复的情况下工作正常,在API 33上的Pixel 6也不工作。

5sxhfpxr

5sxhfpxr8#

在我的情况下,在完成上述操作(在assetlinks中调试/释放SHA-256密钥,分离scheme标签)后,最终的罪魁祸首是"路径"标签。由于某种原因,验证过程不包括该标签,尽管该标签一直存在于应用中,并且在Android 12之前使用。在我的应用中,这不是什么大问题,因为我忽略了路径。
之前(不工作):

<data android:host="dl.example.com"
      android:path="/test" />
<data android:scheme="https" />

(工作后):

<data android:host="dl.example.com"/>
<data android:scheme="https"/>

希望能帮到什么人

nx7onnlm

nx7onnlm9#

    • 请执行以下步骤:**
    • 步骤1:**

android:autoVerify="true"添加到您的意图过滤器。

    • 步骤2:**

android:scheme移动到单独的data标记
现在,manifest中的intents-filter看起来如下所示:

<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:host="websiteUrl"
        android:pathPrefix="/" />
    <data
        android:scheme="https" />
    <!-- note that the leading "/" is required for pathPrefix-->
</intent-filter>
    • 步骤3:**

将数字资产链接JSON文件添加到以下URL:
https://{您的域名.名称}/.知名/资产链接. json

    • 注意**:-对于制作应用程序,请确保使用Play控制台生成的数字资产链接JSON文件。您可以在以下位置找到该文件

播放主机-〉您的应用程序-〉设置(侧菜单选项)-〉应用程序完整性-〉应用程序签名(滚动到底部)

    • 步骤4:**

使用以下命令手动运行应用程序链接验证,验证所有步骤是否都已正确实施-www.example.comhttps://developer.android.com/training/app-links/verify-android-applinks#manual-verification

    • 步骤5:**

如果您的链接在步骤4中显示为已验证,则现在在设备上安装应用程序,并等待至少2 - 3分钟,然后再单击任何应用程序链接,因为在此期间,Android将通过读取您的清单文件和您上传到网站上的数字资产JSON文件来验证您的应用程序链接。
等待2 - 3分钟后,现在您可以点击应用程序链接,它应该会打开您的应用程序。
希望这有帮助!

相关问题