发布到 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) -> Boolapp-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
