You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 8.0(Oreo)中HTTPS协议Intent-filter无法唤起应用求助

解决Android 8.0中HTTPS链接无法唤起应用的问题

我之前也碰到过类似的坑,Android 8.0(Oreo)对隐式Intent和链接处理的规则确实有不少变化,咱们一步步来排查修复:

核心问题分析

你的intent-filter分开写了两个<data>标签分别对应HTTP和HTTPS,在8.0以下系统正常,但8.0及以上HTTPS失效,主要原因可能有两个:

  1. Oreo对多<data>标签的解析逻辑更严格:虽然每个<data>标签理论上是独立的规则,但Oreo在索引intent-filter时,可能对分开的HTTPS规则识别出现偏差;
  2. HTTPS链接的应用链接验证机制:Oreo开始引入了App Links验证,系统会优先验证应用是否拥有对应域名的所有权,如果没有配置,可能不会把你的应用列为HTTPS链接的可选处理者。

具体修复方案

方案1:合并<data>标签(推荐,兼容API 21+)

从Android 5.0(API 21)开始,<data>标签支持android:schemes属性,可以用逗号分隔同时指定HTTP和HTTPS,这样能确保系统把两个协议的规则视为同一个完整的过滤条件,避免解析偏差。修改后的intent-filter如下:

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data
        android:schemes="http,https"
        android:host="*.webpage.com"
        android:pathPattern="/.*/offers" />
</intent-filter>

方案2:保留多<data>标签+开启AutoVerify(兼容低版本)

如果需要兼容API 21以下的系统,你可以保留原来的两个<data>标签,但要添加android:autoVerify="true"到intent-filter中,同时在你的域名下配置验证文件,让系统确认应用对该域名的所有权:

  1. 修改manifest中的intent-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:scheme="http" android:host="*.webpage.com" android:pathPattern="/.*/offers" />
    <data android:scheme="https" android:host="*.webpage.com" android:pathPattern="/.*/offers" />
</intent-filter>
  1. 在你的域名的.well-known目录下放置assetlinks.json文件,内容示例如下(替换成你的应用包名和签名SHA256指纹):
[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.your.package.name",
    "sha256_cert_fingerprints": ["AA:BB:CC:...你的应用签名的SHA256指纹"]
  }
}]

额外检查:路径匹配规则

最后确认下你的pathPattern是否符合目标链接的路径:如果你的HTTPS链接是类似https://xxx.webpage.com/offers(没有中间的子路径),那/.*/offers会匹配失败,因为它要求/和offers之间必须有至少一个字符。这种情况下,你需要把pathPattern改成/.*offers或者直接/offers。

内容的提问来源于stack exchange,提问作者Marc Martinez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:01:39