产品和客服反馈微信分享提示未验证,让我们排查原因,看了微信文档才知道,由于苹果iOS 13系统版本安全升级,为此WechatOpenSDK在1.8.6版本进行了适配。1.8.6版本支持Universal Links方式跳转,对WechatOpenSDK分享进行合法性校验。以下是我整理的配置流程和遇到坑。

确认微信App版本是否支持Universal Links

首先,确认微信(7.0.7或以上版本)的Universal Links在设备上正常,以确保openSDK与微信双向使用Universal Links通信 Safari输入https://help.wechat.com/app/

Safari 加载完成后需要下拉到顶,查看是否有打开微信入口(如下图)。若无入口,可能是由于系统拉取微信Universal Links失败,请检查手机网络状态是否正常,或更新/重装微信

微信Universal Links.png

配置我们App的苹果Universal Links

请按照以下步骤将您的应用和网站相关联以获取Universal Links

  • 将添加Associated Domains Entitlement到您的应用。使用applinks服务前缀包含您的应用程序将支持的所有域。请参阅添加关联的域权利。

  • 将Apple App Site Association文件添加到您的网站。请参阅添加Apple App Site Association文件。

  • applinks密钥添加到Apple App Site Association文件中。指定每个应用程序将处理的网站部分。

具体操作
1. 登录苹果开发者后台,在设置证书的页面找到 Identifiers -> App ID(设置包名)里,在对应的BundleId下勾选 Associated Domains如下图
名)里,在对应的BundleId下勾选 Associated Domains如下图

Associated Domains

保存设置,然后重新生成配置文件。

2. 在Xcode(11)里面添加Associated Domains

按照图中的步骤添加好Universal Links

xcode配置

注意点:在 Associated Domains里面配置的Universal Links必须要以applinks:开头,后面写上域名不要加paths,例如

applinks:www.apple.com
3. 配置apple-app-site-association

自己创建一个名叫 apple-app-site-association的json格式文件,注意文件命不需要添加的后缀。apple官方参照地址

{"applinks": {"apps": [],"details": [{"appID": "D3KQX62K1A.com.example.photoapp","paths": ["/albums"]},{"appID": "D3KQX62K1A.com.example.cameraapp","paths": ["*"]}}}

  • details-- 键的值添加为字典数组的JSON表示,每个应用程序一个字典。对于每个特定于应用程序的词典(上面就表示了同一个teamid下的4个不同的应用),包括 和 键:appIDpaths

  • appID-- 将处理格式为的链接的应用程序的标识TeamIdentifier.bundle identifier(开发者账号teamID.app的bundle identifier)。

  • paths-- 应用程序支持的网站各个部分,以路径字符串数组形式指定。只有这些指定的路径的链接,才能被app所处理, *符号写法代表了可识别域名下所有链接 建议Universal Links配置path,例如/app/*, 避免全域命中Universal Links跳转。我之前就是用全域通配,提供给合作方的H5页面,在某些情况(微信浏览然后通过Safari加载的时候;合作方App加载H5的时候)下会打开或者跳转到自己App。遇到这种情况只能重新配置apple-app-site-association文件的paths,而且分享还会出现异常。

  • 例如:附加 * 到特定的网址(例如/ videos/samples/2015/*)以指定/下的所有路径videos/samples/2015/。使用 ? 匹配任何单个字符,如/photography/*/samples/201?/mypage。使用独立* 网站来指定整个网站。
    通过“NOT ”在路径字符串的开头添加(包括T后面的空格)来标识不应处理的区域。注意 用于在paths 数组中指定网站路径的字符串 区分大小写。仅将URL的路径部分用于比较。其他组件(例如查询字符串或片段标识符)将被忽略。

4.上传apple-app-site-association到服务器(服务器需要支持https)

上传 apple-app-site-association文件到域名的根目录或者.well-known子目录下
能打开https:///apple-app-site-associationhttps:///.well-known/apple-app-site-association
当我们的App在设备上第一次运行时,如果支持Associated Domains功能,那么iOS会自动去获取域名下的apple-app-site-association文件

  • 上传成功后,我们可以用苹果提供的验证网址来直接验证apple-app-site-association设置是否生效。

注意事项 :iOS 9.2之前,不用跨域都可以跳转, iOS 9.2之后,必须跨域才能进行跳转到原生app上。
iOS只会在App第一次启动时请求一次apple-app-site-association文件,服务器上该文件的更新不会让iOS本地的文件同步更新。

5. 工程中添加处理方法

现在用户点击我们配置的域名下的匹配的链接,直接可以进我们的app了。但是,如果想要能够获取到用户进来的链接,根据链接来处理,需要展示给用户的信息
那么需要在工程里的 AppDelegate 里实现 方法

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler{if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {        NSURL *webpageURL = userActivity.webpageURL;        NSString *host = webpageURL.host;if ([host isEqualToString:@"apple..com"]) {//进行我们需要的处理}else {[[UIApplication sharedApplication]openURL:webpageURL];}}return YES;}

当 userActivity 是 NSUserActivityTypeBrowsingWeb 类型, 则意味着它是由Universal Links进来,也就是处理逻辑的时候。

确认App的Universal Links配置成功

用xcode 跑一个debug 包(卸载之前包),通过 Safari输入Universal Links(包括完整路径)+随机字符串(例如: abc),因为第三方分享会在后面添加参数,所以添加随机字符,加载完成后,入口默认是在最顶上看不到,需要往上滑顶才能看到,如果能展示你的App就代表通配符*配置成功了。

通Safari打开通用链接展示的效果.png

集成微信分享的配置和Universal Links配置

集成微信SDK( 如果已经集成了分享功能,可以忽略部分步骤)

  • 在 Xcode 中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type“添加“URL scheme”为你所注册的应用程序 id

    添加微信URL scheme

  • 在Xcode中,选择你的工程设置项,选中“TARGETS”一栏,在 “info”标签栏的“LSApplicationQueriesSchemes“添加weixin 和weixinULAPI( 如果已经集成了分享功能,应该已经配置好了)

    添加白名单

  • 注册微信、实现微信代理等操作 (如果是集成了友盟按照友盟注册和实现代理)

  • 微信开发者后台添加Universal Links (这步官网没有提示很容易遗漏)

    微信后台添加Universal Links

  • 最后可以使用WXApi新增了自检函数checkUniversalLinkReady: 自检函数排查接入问题

//在register之前打开log, 后续可以根据log排查问题[WXApi startLogByLevel:WXLogLevelDetail logBlock:^(NSString *log) {NSLog(@"WeChatSDK: %@", log);}];

//务必在调用自检函数前注册[WXApi registerApp:APP_ID universalLink:UNIVERSAL_LINK];

//调用自检函数[WXApi checkUniversalLinkReady:^(WXULCheckStep step, WXCheckULStepResult* result) {NSLog(@"%@, %u, %@, %@", @(step), result.success, result.errorInfo, result.suggestion);}];

WXULCheckStep值说明:step = WXULCheckStepParams: 参数检查 step = WXULCheckStepSystemVersion: 当前系统版本检查 step = WXULCheckStepWechatVersion: 微信客户端版本检查 step = WXULCheckStepSDKInnerOperation: 微信SDK内部操作检查 step = WXULCheckStepLaunchWechat: App拉起微信检查 step = WXULCheckStepBackToCurrentApp: 由微信返回当前App检查 step = WXULCheckStepFinal: 最终检查 会依次回调这7个step,当回调了WXULCheckStepFinal,说明检测通过,SDK接入成功。任一step回调的result.success为NO, 流程终止,后续不再回调,可以根据result.errorInfo的查看当前步骤错误的原因,根据result.suggestion修复问题.

以上微信相关配置来自以 微信官方文档

配置中遇到坑

  • 我的工程是集成了友盟精简版微信分享,友盟版本需要6.9.7以上才支持了WechatOpenSDK 1.8.6,而且需要完整版,所以用精简版的同学需要更换为完整版。

    image.png

  • 我的项目集成了微信支付,微信和友盟完整版分享会有冲突,那就不能用cocoapods 集成了,需要更换为手动集成微信SDK和友盟分享??。在友盟SDK中删除libWeChatSDK.a  WXApiObject.h 最后如下图

    微信

  • 所有都集成好了,调试手机微信分享没有提示未验证?,打包测试安装后还是未验证,各种排查,各种查资料?,原来授权不是及时的,到了第二天才生效了。

  • 还有测试直接不能分享,授权页面就直接自动返回App。又是各种排查????,最后重启手机问题解决了。

  • 旧版本没有正确接入新版OpenSDK(有分享二跳,授权登录二次确认的情况),新版  本刚修复这个问题。需要等新版本放量上去让整体错误率下降到90%以下才会从未验证应用中移除。
    例:前一天你的App总共分享了100次消息到微信(微信以AppID来统计,只计算1.8.6以及以上版本的分享),其中正确的次数必须要高于10次。

  • paths用全域通配"paths": ["*"], 导致全域命中Universal Links跳转。提供给合作方的H5页面,在某些情况(微信浏览然后通过Safari加载的时候;合作方App加载H5的时候)下会打开或者跳转到自己App。各方合作方都来投诉,没办法只能重新配置apple-app-site-association文件的"paths": ["/app/*"],修改完成后,重新卸载安装App测试发现不会再跳转了,线上App微信分享也正常,感觉事情就要结束了?。告诉合作方已经修改好了,但是他们手机安装我们的App已经授权,缓存了Universal Link记录,依然会跳转到我们的App,于是就各种查资料、看官方文档没有关于缓存时间和触发apple-app-site-association更新的时机?。经过自己的测试只有卸载重装、更新App会触发apple-app-site-association更新的时机,新的Universal Links才会生效。反复折腾了一天,只希望苹果明天会更新缓存(我知道这个是不能的,只是幻想)。

  • 第二天,没有等来更新缓存的好消息,却给我迎头一棒,在系统 iOS 14以上的新用户微信无法分享,正在连接,就直接跳回App,导致无法分享。iOS 14 以下可以正常使用。

    image.png

后面更新了微信后台的Universal Link,发现线上用户都无法使用微信分享,提示Universal Link验证失败?,赶紧恢复了之前的Universal Link。只能等待新版上线开启新的Universal Link,到时候老版本都会无法分享,有投诉就只能让用户更新App。感觉微信太不厚道了,appid已经配置了,你不能分享失败啊!回到以前分享成功显示未验证,我也能接受啊!

qq分享提示设备未授权_友盟微信、QQ等分享提示未验证应用配置相关推荐

  1. android 友盟 - 微信小程序分享

    UMMin umMin = new UMMin("Defaultcontent.url");//兼容低版本的网页链接umMin.setThumb(thumb);// 小程序消息封面 ...

  2. 友盟登陆 QQ授权2002 应用未授权

    今天在升级友盟到9.4.4时 需要连推送 登陆等一并升级到7以上 但是集成完后  QQ登陆报错,一直2002 先检查项目中是不是集成了 implementation files('libs/open_ ...

  3. iOS 关于友盟微信分享成功回调不走的问题

    不得不说,友盟的客服以及论坛服务很不周到,特别是最近要获取友盟微信分享是否成功的状态,在分享回调里根本拿不到,回调根本不走.于是查看友盟论坛,提问的人很多,解答的完全没有,再咨询在线客服,回复答不到点 ...

  4. qq分享提示设备未授权_插件分享 | 如何半天玩转一个“ES未授权利用”插件

    前言:Elasticsearch服务普遍存在一个未授权访问的问题,个人最近刚好在帮某企业梳理这方面的资产,但每次都是通过Goby扫描出来后再手动访问,比较麻烦.刚好看到Goby的内测版推出了开放式的插 ...

  5. xcode 配置wechat_友盟微信、QQ等分享提示未验证应用配置

    确认微信App版本是否支持Universal Links 配置我们App的苹果Universal Links 请按照以下步骤将您的应用和网站相关联以获取: 将添加Associated Domains ...

  6. iOS之适配苹果Universal Links 和升级友盟的QQ和微信分享艰难之路

    安逸的日子总是那么短暂,刚上完线,唏嘘人生是那么短暂而又漫长,刚准备进入安逸圈,结果晴天霹雳 这特么是啥 ,我没动啥代码哇,瞬间感觉蛋蛋有微微的疼痛,经过测试只有新系统(iOS13.5)的微信才会出现 ...

  7. 微信5.0登录提示服务器繁忙,iOS集成友盟社会化分享微信无法登录?

    iOS集成友盟社会化分享SDK-5.0 点击微信登录的时候出现无法获取accessToken的现象,其他如QQ.微博都可以正常登录使用.另外QQ.微博和微信分享都可以正常使用. 望各位早日帮我解决或者 ...

  8. 最新友盟微信,QQ与微博分享集成方案

    最近应用市场审核要求APP在首次打开弹出用户协议或隐私政策,在用户同意政策之前不能对相关SDK进行初始化.以防应用提前收集用户信息,保护用户信息安全.为满足最新应用市场审核需求,项目中集成过老的友盟S ...

  9. Android友盟集成QQ、微信、微博等第三方登录与分享

    前言 最近项目需要加入第三方分享和登录功能,之前其他项目的第三方分享和登录一直都使用ShareSDK实现的.为了统一使用友盟的全家桶,所以三方分享和登录也就选择了友盟.这里记录一下完整的集成与使用流程 ...

最新文章

  1. fMRI在认知心理学上的研究
  2. 点在多边形内的判断(射线法)
  3. Spring MVC 的 异常处理
  4. leetcode算法题--完美数
  5. 3.APC的挂入过程
  6. Android自己搭建一个实用的SharedPreferences管理类
  7. 批量清除为Button注册的事件
  8. (创建模式 上)设计模式——工厂、抽象工厂 C++/Python3实现
  9. 使用宝塔部署node项目_使用宝塔面板进行项目的自动部署WebHook
  10. 215. 数组中的第K个最大元素 golang
  11. blender视图缩放_如何使用主视图类型缩放Elm视图
  12. java实现简单二叉树
  13. Android ssl 异常,SSL握手异常,同时通过https连接使用Android中的自签名证书Nougat
  14. sstv解码_SSTV通联活动:ISS国际空间站2020年1月30日和1月31日
  15. python爬虫ip限制_爬虫访问中如何解决网站限制IP的问题?
  16. 台安变频器n2按键说明_台安变频器N2
  17. Ubuntu20.04 linux Erlang编程----毕达哥拉斯定理
  18. 不换门可以改开门的方向吗_防盗门可以更改开门方向吗?
  19. 杨氏不等式(控制中的应用)
  20. Vue install 报错 code EINTEGRITY

热门文章

  1. ios::exceptions()函数
  2. RISC-V数据模型,-mabi=ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d
  3. 数据模型(LP32 ILP32 LP64 LLP64 ILP64 )
  4. My First Plug-in - Inventor API .NET 开发从0开始-课程3
  5. 中小型研发团队架构实践三要点
  6. Oracle 游标遍历 显式游标 静态游标 OPEN v_cur(); WHILE v_cur%FOUND LOOP; LOOP FETCH v_cur INTO v_row
  7. SQL查询 — 自连接的用法
  8. DynamoDB 小结
  9. POST请求和GET请求如何传递和接收解析参数
  10. Windows系统下Python安装教程