发布到 apple store 上的 app clip 应用,可以在手机端的 safari 浏览器中启动。
在 apple store 的审核页面设置的 app clip 图片、标题和打开方式就是应用到 safari 的打开方式的。
这里主要说明 safari 的配置:
配置网页
首先在网页上设置对应的 meta 标签,例如下面的代码:
content 中的 app-id 、app-clip-bundle-id 填写对应的值,这里主要是 app-clip-bundle-id 的值,它是正确启动 app clip 的关键。因为只能在 iOS 14 及以上系统可以启动 app clip,所以为了兼容 iOS 14 以下版本,设置 app-id 的值,这样可以在 iOS 14 以下版本可以看到 APP 的打开或者下载入口。
app-clip-display=card 是 iOS 15 的设置,可以在网页中直接弹出 app clip 选项卡。
上传网页
safari 打开配置了 meta 字段的网页,系统会校验域名和 app clip 的关联性之后才打开。
记住这句话,我们要做一些配置:
首先,部署设置了 meta 的网页到服务器的时候,要记住它的域名,比如 example.com。
然后看 app 和 app clip 的域名,需要有 example.com 域名,比如:
// app clip 中
appclips:example.com
// app 中
applinks:example.com
这样就保证了可以正确校验关联性,并打开 app 或者 app clip。
因为打开 app clip 的其中一个机制是,如果存在 app 应用,那么直接打开 app 应用。所以设置 applinks 就是为了保证可以正确打开 app 应用。
传递字段
有时,实际的业务场景并不是打开 app clip 或者 app 那么简单,那么特定的字段如何传递呢?
首先明确一点,在 meta 标签的 content 中添加 app-argument 字段是不可行的,官方文档中已经特别指出。
那么如何传递字段呢?通过尝试,发现直接打开有要传递字段的 url,在这个页面中打开 app clip 或者 app,就可以把参加顺利传递过去。
比如在 safari 中打开 https://example.com/path/?key=value&key2=value2 url,然后在这个页面中打开 app clip 或者 app,key 和 key2 就可以捕捉到。
在项目中捕捉的代理就是捕捉通用链接的代理(如下代码所示),所以在项目中不需要做额外的处理。
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool
app-argument 是 iOS 14 以下的系统可以使用的参数。使用方式如下:
meta 标签的 content 字段中可以添加一个新的参数 app-argument。这里要设置完整的 url,比如 app-argument=https://example.com/path/?key=value&key2=value2。
在项目中要用 application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: **Any**) -> Bool 方法来处理 app-argument 中的 value 值。
参考
https://developer.apple.com/documentation/webkit/promoting_apps_with_smart_app_banners
https://developer.apple.com/documentation/app_clips/supporting_invocations_from_your_website_and_the_messages_app