确认微信App版本是否支持Universal Links
配置我们App的苹果Universal Links
请按照以下步骤将您的应用和网站相关联以获取:
将添加Associated Domains Entitlement到您的应用。使用服务前缀包含您的应用程序将支持的所有域。请参阅添加关联的域权利。
将Apple App Site Association文件添加到您的网站。请参阅添加Apple App Site Association文件。
将密钥添加到文件中。指定每个应用程序将处理的网站部分。
具体操作1. 登录苹果开发者后台,在设置证书的页面找到 (设置包名)里,在对应的BundleId下勾选 如下图名)里,在对应的BundleId下勾选 如下图
Associated Domains
保存设置,然后重新生成配置文件。
2. 在Xcode(11)里面添加
按照图中的步骤添加好
xcode配置
applinks:,例如
3. 配置
自己创建一个名叫 apple-app-site-association的json格式文件,注意文件命不需要添加的后缀。apple官方参照地址
-- 键的值添加为字典数组的JSON表示,每个应用程序一个字典。(上面就表示了同一个teamid下的4个不同的应用),包括 和 键:appIDpaths
-- 将处理格式为的链接的应用程序的标识TeamIdentifier.bundle identifier(开发者账号teamID.app的bundle identifier)。
-- 应用程序支持的网站各个部分,以路径字符串数组形式指定。只有这些指定的路径的链接,才能被app所处理, 符号写法代表了可识别域名下所有链接 。我之前就是用全域通配,提供给合作方的H5页面,在某些情况下会打开或者跳转到自己App。遇到这种情况只能重新配置apple-app-site-association文件的paths,而且分享还会出现异常。
例如:附加 到特定的网址(例如/ )以指定/下的所有路径。使用 匹配任何单个字符,如。使用独立 网站来指定整个网站。
通过在路径字符串的开头添加(包括T后面的空格)来标识不应处理的区域。
4.上传到服务器(服务器需要支持https)
上传 文件到域名的根目录或者.well-known子目录下
能打开 或
当我们的App在设备上第一次运行时,如果支持Associated Domains功能,那么iOS会自动去获取域名下的apple-app-site-association文件
上传成功后,我们可以用苹果提供的验证网址来直接验证设置是否生效。
注意事项 :iOS 9.2之前,不用跨域都可以跳转, iOS 9.2之后,必须跨域才能进行跳转到原生app上。
iOS只会在App第一次启动时请求一次apple-app-site-association文件,服务器上该文件的更新不会让iOS本地的文件同步更新。
5. 工程中添加处理方法
现在用户点击我们配置的域名下的匹配的链接,直接可以进我们的app了。但是,如果想要能够获取到用户进来的链接,根据链接来处理,需要展示给用户的信息
那么需要在工程里的 AppDelegate 里实现 方法
当 userActivity 是 类型, 则意味着它是由Universal Links进来,也就是处理逻辑的时候。
确认App的Universal Links配置成功
用xcode 跑一个debug 包,通过 Safari输入,因为第三方分享会在后面添加参数,所以添加随机字符,加载完成后,入口默认是在最顶上看不到,需要往上滑顶才能看到,如果能展示你的App就代表通配符配置成功了。
通Safari打开通用链接展示的效果.png
集成微信SDK
在 Xcode 中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type“添加“URL scheme”为你所注册的应用程序 id
添加微信URL scheme
在Xcode中,选择你的工程设置项,选中“TARGETS”一栏,在 “info”标签栏的“LSApplicationQueriesSchemes“添加weixin 和weixinULAPI
添加白名单
注册微信、实现微信代理等操作 (如果是集成了友盟按照友盟注册和实现代理)
微信开发者后台添加Universal Links
微信后台添加Universal Links
最后可以使用WXApi新增了自检函数 自检函数排查接入问题
WXULCheckStep值说明:
以上微信相关配置来自以 微信官方文档
配置中遇到坑
我的工程是集成了友盟精简版微信分享,友盟版本需要才支持了,而且需要完整版,所以用精简版的同学需要更换为完整版。
image.png
我的项目集成了微信支付,微信和友盟完整版分享会有冲突,那就不能用cocoapods 集成了,需要更换为手动集成微信SDK和友盟分享。在友盟SDK中删除 最后如下图
微信
所有都集成好了,调试手机微信分享没有提示未验证,打包测试安装后还是未验证,各种排查,各种查资料,原来授权不是及时的,到了第二天才生效了。
还有测试直接不能分享,授权页面就直接自动返回App。又是各种排查,最后重启手机问题解决了。
旧版本没有正确接入新版OpenSDK(有分享二跳,授权登录二次确认的情况),新版 本刚修复这个问题。需要等新版本放量上去让整体错误率下降到90%以下才会从未验证应用中移除。
例:前一天你的App总共分享了100次消息到微信(微信以AppID来统计,只计算1.8.6以及以上版本的分享),其中正确的次数必须要高于10次。
用全域通配, 导致全域命中Universal Links跳转。提供给合作方的H5页面,在某些情况下会打开或者跳转到自己App。各方合作方都来投诉,没办法只能重新配置文件的,修改完成后,重新卸载安装App测试发现不会再跳转了,线上App微信分享也正常,感觉事情就要结束了。告诉合作方已经修改好了,但是他们手机安装我们的App已经授权,缓存了Universal Link记录,依然会跳转到我们的App,于是就各种查资料、看官方文档没有关于缓存时间和触发更新的时机。经过自己的测试只有卸载重装、更新App会触发更新的时机,新的Universal Links才会生效。反复折腾了一天,只希望苹果明天会更新缓存()。
第二天,没有等来更新缓存的好消息,却给我迎头一棒,在系统 iOS 14以上的新用户微信无法分享,正在连接,就直接跳回App,导致无法分享。iOS 14 以下可以正常使用。
image.png
后面更新了微信后台的Universal Link,发现线上用户都无法使用微信分享,提示Universal Link验证失败,赶紧恢复了之前的Universal Link。只能等待新版上线开启新的Universal Link,到时候老版本都会无法分享,有投诉就只能让用户更新App。感觉微信太不厚道了,appid已经配置了,你不能分享失败啊!回到以前分享成功显示未验证,我也能接受啊!