url scheme 分享参数

99ANYc3cd6
预计阅读时长 15 分钟
位置: 首页 参数 正文

这是一个非常常见的需求,尤其是在移动应用开发中,用于从一个 App 跳转到另一个 App 并传递数据。

url scheme 分享参数
(图片来源网络,侵删)

什么是 URL Scheme?

简单回顾一下 URL Scheme 是什么。

URL Scheme 是一种特殊的 URL 格式,它允许一个应用(源应用)通过操作系统直接启动另一个应用(目标应用),它就像是给每个应用分配了一个“电话号码”,其他应用可以通过拨打这个号码来唤醒它。

基本格式如下:

<scheme>://<host>?<query>#<fragment>

myapp://product/detail?id=123&user=456

url scheme 分享参数
(图片来源网络,侵删)

URL Scheme 的核心组成部分(参数所在位置)

当用于分享和传递数据时,参数主要位于 URL 的 查询字符串片段标识符 部分。

a. Scheme (协议)

  • 作用:告诉操作系统应该用哪个应用来打开这个链接,这是 URL Scheme 的核心。
  • 示例:在 myapp://... 中,myapp Scheme。
  • 如何设置:每个应用都需要在系统(iOS 的 Info.plist 或 Android 的 AndroidManifest.xml)中注册自己独一无二的 Scheme,就像注册商标一样,避免冲突。

b. Host (主机)

  • 作用:通常用来表示目标应用内的一个具体功能模块或页面,起到路径的作用。
  • 示例:在 myapp://product/detail 中,product 可以是模块,detail 是具体页面。
  • 如何设置:开发者可以自由设计,user/profile, order/list 等。

c. Query String (查询字符串) - 最常用的参数位置

  • 作用:以键值对的形式传递具体的参数数据,这是最标准、最清晰的参数传递方式。
  • 格式:以 开头,参数之间用 & 分隔,键和值用 连接。
  • 示例myapp://product/detail?id=123&title=新款手机&from=social_share
    • id=123: 传递一个产品 ID。
    • title=新款手机: 传递一个产品标题。
    • from=social_share: 传递来源信息,方便目标 App 分析流量来源。

d. Fragment (片段标识符)

  • 作用:传统上用于定位网页内的某个锚点,在 App 间跳转中,它也可以用来传递参数,或者作为 Query String 的补充。
  • 格式:以 开头。
  • 示例
    1. 作为参数myapp://page#section=comments,这种方式有时可以避免 URL 被一些服务器或中间代理(如微信)错误地解析或修改。
    2. 与 Query String 结合myapp://product/detail?id=123#section=reviews,先跳转到产品详情页,然后目标 App 可以根据 section 参数自动滚动到评论区域。

参数的设计与最佳实践

如何设计参数名称和结构是一门艺术,良好的设计能让对接更顺畅。

a. 参数命名规范

  • 简洁清晰:使用有意义的英文单词,如 id, name, type, from
  • 统一风格:统一使用小写字母,或者使用驼峰命名法 (userId),避免混用。
  • 避免冲突:如果参数可能被中间方(如微信、微博)处理,尽量使用自己应用前缀,如 myapp_id, myapp_data

b. 参数值的数据类型

  • 字符串:最常见,如 title, name
  • 数字:如 id, count,在传递前,通常会将其转换为字符串形式。
  • 布尔值:通常用 1/0true/false 字符串表示。
  • JSON 对象:当需要传递复杂、结构化的数据时,可以将一个对象序列化为 JSON 字符串,然后作为 Query String 的一个参数值。
    • 示例myapp://share?data={"productId":123,"user":{"id":456,"name":"张三"}}
    • 优点:可以一次性传递多个关联数据。
    • 缺点:需要对 JSON 字符串进行 URL 编码(转义),否则特殊字符(如 &, , )会破坏 URL 结构,在 iOS 中,可以使用 [data stringByAddingPercentEncodingWithAllowedCharacters:];在 Android 中,可以使用 URLEncoder.encode()

c. 实战案例:从 App A 分享到 App B

假设 App A 是一个电商 App,App B 是一个社交分享 App。

目标:在 App A 中选择一个商品,点击“分享到 App B”,App B 被唤醒并展示该商品的分享卡片。

url scheme 分享参数
(图片来源网络,侵删)

步骤 1: App A 构建分享链接 App A 的开发者需要知道 App B 的 URL Scheme,并设计好参数。

假设 App B 的 Scheme 是 socialapp,参数设计如下:

  • url: 商品详情页的网页链接,用于生成分享卡片。: 商品标题。
  • desc: 商品描述。
  • imgUrl: 商品图片的链接。

App A 会构建这样一个 URL:

socialapp://share?title=新款iPhone&desc=性能强劲,值得拥有&imgUrl=https://.../iphone.jpg&url=https://.../p/123

步骤 2: 用户点击分享 用户在 App A 中点击“分享到 App B”,系统会唤起 App B,并将上述 URL 传递给它。

步骤 3: App B 接收并解析参数 App B 被唤醒后,会执行以下操作:

  1. 获取启动 URL:App B 在 AppDelegate (iOS) 或 MainActivity (Android) 中,会获取到传递过来的这个 URL。
  2. 解析 URL
    • 检查 scheme 是否为 socialapp,确认是自己的“来电”。
    • 检查 host 是否为 share,确认是分享功能。
    • 解析 query string,提取出 title, desc, imgUrl, url 这四个参数的值。
  3. 执行业务逻辑
    • 根据解析出的 title, desc, imgUrl, url,在 App B 的界面上动态生成一个分享卡片。
    • 用户可以编辑文案,然后点击“发布”按钮。

重要注意事项

  1. 安全性问题

    • Scheme 劫持:恶意应用可以注册一个与你相同的 Scheme,从而截获你的跳转,为了缓解,可以在跳转前尝试通过 canOpenURL (iOS) / Intent.resolveActivity (Android) 检查目标应用是否已安装。
    • 参数篡改:用户可以手动修改 URL 中的参数,目标 App 绝对不能信任从 URL 中获取的任何敏感信息(如用户 Token、支付信息等),URL Scheme 适合传递公开的、非敏感的业务数据(如 ID、标题、来源标记)。
  2. 兼容性与健壮性

    • URL 编码:如果参数值中包含特殊字符(如 &, , , , 空格),必须进行 URL 编码,否则 URL 结构会被破坏,大多数编程语言都提供了现成的编码函数。
    • 参数校验:目标 App 在接收到 URL 后,应对参数进行校验,检查 id 是否为数字,title 是否为空等,防止因参数错误导致 App 崩溃。
    • 处理未安装的情况:如果目标应用未安装,跳转会失败,源应用需要有兜底方案,比如引导用户去应用商店下载。
  3. 平台差异

    • iOS:在 Info.plist 中使用 <LSApplicationQueriesSchemes><CFBundleURLTypes> 来声明和查询 Scheme。
    • Android:在 AndroidManifest.xml 中使用 <intent-filter> 来声明 Scheme。
组成部分 作用 示例 备注
Scheme 唤醒目标应用 myapp 必须唯一,需在系统注册
Host 指定目标功能模块 product/detail 类似网页路径,用于导航
Query String 传递核心参数 ?id=123&from=share 键值对,最常用,最标准
Fragment 传递补充参数或锚点 #section=reviews 可作为 Query String 的补充

设计 URL Scheme 分享参数时,核心思路是:定义清晰的协议和路径,使用标准化的查询字符串来传递结构化的、非敏感的业务数据,并充分考虑编码、校验和异常处理。

-- 展开阅读全文 --
头像
Epson Photo330拆机有何技巧或隐藏问题?
« 上一篇 今天
2025智能手环哪家强?排行榜数据靠谱吗?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

最近发表

标签列表

目录[+]