禁用`URL Scheme`和`Universal Link`(通用链接)

为什么要禁用URL SchemeUniversal Link(通用链接)

通常我们APP中都会嵌套一些web页面,有时我们的web页面会被DNS劫持从而跳转到其他APP中;或者是某些APP的Universal Link(通用链接)设置的比较容易触发,当web跨域跳转就有可能跳转到这些APP。比如苏宁易购的Universal Link(通用链接)为*.m.suning.com,只要web进行跨域跳转*.m.suning.com就会拉起苏宁易购APP。在这种情况下的话我们就需要在我们的APP中对web做一些处理从而来禁止拉起这些APP。
在iOS 9.0之后如果需要使用URL Scheme唤起APP的话需要在info.plist中增加白名单,只有在白名单中的URL Scheme才可以使用,因此可以禁止跳转到意料之外的APP。

<key>LSApplicationQueriesSchemes</key>
 <array>
    <string>openapp.jdmobile</string>
</array>
WKWebView

在iOS8.0后APP推出的WKWebView是现有大部分APP中常用的控件之一。

  • WKWebViewURL Scheme禁用和启用

    即使在info.plist中设置了白名单但是WKWebViewURL Scheme默认是不支持的,如果要支持URL Scheme需要做一些处理</

<think>首先,用户的问题是关于Android App Links的自动验证配置外部链接关联方法。我需要根据系统指令来构建回答。 系统指令关键点: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,例如[^1]。 - 回答结构清晰,帮助用户逐步解决问题。 - 参考站内引用:有[^1], [^2], [^3]提供,但用户说这些引用仅供参考,我需要基于用户的问题来回答。 用户的问题:"我想配置Android App Links自动验证并正确关联外部链接 请问Android App Links 自动验证配置及外部链接关联方法" 参考引用: - [^1]: 关于Universal LinksAndroid App Links的无缝跳转体验。 - [^2]: Universal Links的配置细节。 - [^3]: Universal Link无效的解决方案。 这些引用主要针对Universal Links(iOS),但用户问的是Android App Links。所以,我需要专注于Android App Links的配置。引用中提到"Universal LinksAndroid App Links",但细节是iOS的。我应该基于Android来回答,因为用户明确问Android。 我的回答需要: 1. **结构清晰**:逐步解释配置方法。 2. **使用中文**。 3. **生成相关问题**在末尾。 4. **添加引用标识**:如果引用参考内容,在末尾添加[^n]。 由于引用是关于Universal Links的,而Android App Links是Android的类似功能,我可以参考它们的概念,但必须调整到Android具体配置。Android App Links的配置涉及Digital Asset Links文件自动验证。 关键步骤: - **域名准备**:需要有HTTPS域名。 - **创建Digital Asset Links文件**:类似于iOS的apple-app-site-association。 - **配置AndroidManifest.xml**:在应用中定义intent filters。 - **自动验证**:Android系统自动验证链接。 - **处理错误回退**:如果验证失败。 基于我的知识: - Android App Links使用Digital Asset Links JSON文件。 - 文件放在https://domain/.well-known/assetlinks.json。 - 在AndroidManifest.xml中添加intent filter并设置autoVerify="true"。 - 验证通过后,链接直接打开应用,而不是浏览器。 回答结构: 1. **介绍**:简要解释Android App Links。 2. **配置步骤**:逐步说明。 - 域名准备。 - 创建assetlinks.json文件。 - 配置Android应用。 - 自动验证过程。 3. **常见问题解决**:基于引用[^3]的思路。 4. **总结**。 5. **生成相关问题**。 添加引用:由于引用[^1]提到通用概念,我可以在介绍时引用。引用[^2][^3]是针对iOS的,但可以类比。例如,在解释配置时,可以说类似iOS的Universal Links。 在末尾添加引用标识,如[^1]。 现在,构建回答。 **步骤:** - 用中文。 - 行内数学表达式:如果涉及数学,用$...$,但这里可能不涉及数学。用户的问题是技术配置,所以可能不需要数学表达式。如果有,比如版本号,但最好避免。 - 独立公式:同样,可能不需要。 - 生成相关问题:在末尾添加"相关问题"部分。 最终回答结构: 1. 介绍Android App Links。 2. 详细配置方法。 3. 自动验证关联。 4. 常见问题及解决方案。 5. 总结。 6. 相关问题。 参考引用: - 在介绍时,引用[^1]的概念。 - 在配置时,参考[^2]的类似方法。 - 在问题解决时,参考[^3]。 例如: "Android App Links通过使用Digital Asset Links文件来实现自动验证,类似于iOS的Universal Links[^1]。"</think>### Android App Links 自动验证配置及外部链接关联方法 Android App Links 是一种深度链接技术,允许用户直接从网页或其他应用跳转到你的 Android 应用,而无需用户手动选择应用。它通过自动验证域名与应用之间的关联来确保安全性无缝体验[^1]。以下是详细的配置步骤关联方法,基于官方文档最佳实践,帮助你逐步完成设置。配置前,请确保你有有效的 HTTPS 域名(如 `https://yourdomain.com`) Android 应用的包名(如 `com.yourcompany.yourapp`)。 #### 一、配置步骤 Android App Links 的核心是 **Digital Asset Links 文件** **AndroidManifest.xml 的 intent filter 设置**。系统会自动验证域名与应用的关系,确保只有授权应用能处理链接。 1. **域名准备(服务器端配置)** - 确保你的域名使用 HTTPS 协议,并具有有效的 SSL 证书(可从 Let's Encrypt 或商业 CA 获取)。 - 在域名的根目录下创建 Digital Asset Links 文件: - 文件路径: `https://yourdomain.com/.well-known/assetlinks.json` - 文件内容是一个 JSON 对象,用于声明应用与域名的关联。示例: ```json [{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.yourcompany.yourapp", "sha256_cert_fingerprints": ["YOUR_APP_SHA256_FINGERPRINT"] } }] ``` - **关键参数说明**: - `package_name`:你的应用包名(在 `build.gradle` 或 Android Studio 中查看)。 - `sha256_cert_fingerprints`:应用的签名证书 SHA256 指纹。获取方法: - 通过命令行:`keytool -list -v -keystore your_keystore.jks -alias your_alias` - 或使用 Android Studio:Build > Generate Signed Bundle/APK > 查看证书详情。 - 确保文件可公开访问,且 MIME 类型为 `application/json`。测试方法:用浏览器打开 `https://yourdomain.com/.well-known/assetlinks.json`,检查是否返回正确内容。 2. **Android 应用配置(客户端配置)** - 在 `AndroidManifest.xml` 文件中,为处理链接的 Activity 添加 intent filter,并设置 `autoVerify="true"` 以启用自动验证。示例: ```xml <activity android:name=".MainActivity"> <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="yourdomain.com" /> <data android:pathPattern="/.*" /> <!-- 匹配所有路径 --> </intent-filter> </activity> ``` - **参数说明**: - `autoVerify="true"`:触发系统自动验证。 - `scheme` 必须为 `https`。 - `host`:你的域名(如 `yourdomain.com`)。 - `pathPattern`:定义链接路径规则(如 `"/.*"` 匹配所有路径,或指定具体路径如 `"/products/*"`)。 - 编译并发布应用:确保使用与 `assetlinks.json` 中相同的签名证书发布应用(调试时可用 debug 证书,但生产环境必须一致)。 3. **自动验证过程** - 当用户安装或更新应用时,Android 系统(Android 6.0+)会自动向你的域名发送请求,验证 `assetlinks.json` 文件。 - 验证成功标志: - 链接点击直接打开应用,而非浏览器选择器。 - 在 Android 设置中,应用 > 默认打开方式 > 验证状态显示 "Verified"。 - 验证失败处理:系统会回退到询问用户选择应用(类似传统深度链接)。 #### 二、常见问题及解决方案 自动验证可能因配置错误失败。以下是常见问题及修复方法,参考类似 iOS Universal Links 的故障排查思路[^3]: - **问题:验证失败,链接仍打开浏览器** - **原因**:`assetlinks.json` 文件未正确配置或不可访问;证书指纹不匹配;intent filter 错误。 - **解决方案**: 1. 使用 Google 的验证工具检查: - 命令行:`adb shell pm verify-app-links --re-verify com.yourcompany.yourapp` - 或在线工具:[Digital Asset Links Validator](https://developers.google.com/digital-asset-links/tools/generator)。 2. 确保 `assetlinks.json` 文件可通过 HTTPS 访问,且无重定向。 3. 检查证书指纹:在发布开发环境保持一致。 4. 添加日志:在应用的 `onCreate()` 方法中调用 `Intent.getData()` 调试链接处理。 - **问题:用户设备不支持或禁用 App Links** - **原因**:旧 Android 版本(<6.0)不支持自动验证;用户手动禁用链接处理。 - **解决方案**: - 提供回退机制:在应用中检测是否支持 App Links,否则使用传统深度链接(如自定义 scheme)。 - 引导用户:在网页添加提示,如 "在浏览器中打开",并重定向到应用商店。 - **其他问题**:域名变更或证书更新时,需重新生成 `assetlinks.json` 并更新应用。定期使用 `adb shell dumpsys package domain-preferred-apps` 检查验证状态。 #### 三、总结 Android App Links 通过自动验证机制(Digital Asset Links 文件 `autoVerify` 属性)实现安全的外部链接关联。配置时,重点关注服务器文件正确性客户端 manifest 设置。验证成功后,用户点击链接(如 `https://yourdomain.com/product/123`)将无缝跳转到应用对应页面。这提升了用户体验,同时防止了恶意应用劫持链接[^1]。建议在开发阶段使用测试域名工具验证,再部署到生产环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值