iOS13适配篇:微信openSDK1.8.6更新导致不能进行微信登录和分享问题解决方案

微信官方声明:

openSDK1.8.6 由于苹果iOS 13系统版本安全升级,为此openSDK在1.8.6版本进行了适配。 1.8.6版本支持Universal Links方式跳转,对openSDK分享进行合法性校验,提升使用过程中的安全性。 我们建议开发者使用新版本SDK测试时,覆盖测试微信7.0.7版本、iOS12以及苹果新推出的iOS13,以验证所使用的接口的功能性和可用性。

微信开放平台官方更新文档

背景

随着iOS13系统的正式推送,各家第三方SDK都对其或多或少进行了更新适配,但在微信SDK更新后,导致APP突然不能跳转微信进行登录和分享了,本篇文章是适配踩坑之作,供参考。

2019/09/29更新

经过尝试,不知道微信的SDK是怎么更新的,好像并不需要Universal Links支持就可以,大家可尝试一下步骤,如不行继续往下看即可:

  1. 注册时填入“https://”即可(注意:经过尝试,这里的universalLink必须和微信后台填入的一致,直接这样填是不可行的,只是单纯能调起微信,无法分享和登录,建议大家还是按下面步骤来操作吧
[WXApi registerApp:@"xxx" universalLink:@"https://"];
  1. 在Xcode中,选择你的工程设置项,选中“TARGETS”一栏,在 “info”标签栏的“LSApplicationQueriesSchemes“添加weixin 和weixinULAPI(如0x1所示)
  2. 在微信后台配置Universal Links,链接符合要求即可。

以上步骤若仍不能解决跳转微信问题,可继续看如下的踩坑之旅。

环境

Xcode10.1iOS12.4

0x1

更新SDK1.8.6后,微信的API发生了少许变更,其中注册的API需要传一个Universal Links,因为我们的APP并不需要支持,所以想着直接传了nil,如下:

[WXApi registerApp:@"xxx" universalLink:nil];

按照新API更改编译通过、运行。发现不能微信登录和分享。点击后无法跳转微信,且报错如下:

-canOpenURL: failed for URL: "weixinULAPI://" - error: "This app is not allowed to query for scheme weixinulapi"

回看一下微信的文档发现,可能需要进行这样的配置:
在这里插入图片描述
按此配置完成后,仍然不能跳转,且报错:

-canOpenURL: failed for URL: "weixinULAPI://" - error: "The operation couldn’t be completed. (OSStatus error -10814.)"

但是官方文档并没有此错误编号-10814,陷入了沉思。

0x2

仔细阅读微信声明的更新文案后,想着,难道必须支持Universal Links才行吗?尝试配置试试看。参考了其他博主配置步骤:

  1. iOS9 Universal Links踩坑之旅,移动应用之deeplink唤醒app
  2. 苹果官方文档

其实上面博主写得已经挺明确了,但是中间还是遇到一些问题,这里我贴出我的配置供大家参考:

apple-app-site-association文件
在这里插入图片描述
Xcode配置在这里插入图片描述
有两点原因使我想着自己暂时把apple-app-site-association文件上传到阿里云进行测试

  1. 自己测试不想麻烦后台帮忙传
  2. 阿里云的OSS支持https,而我们测试服不支持https,还得拿证书去配置,麻烦

Universal Links配置OK后,尝试了,能直接跳到我们的APP了,所以至此我们的APP已经支持Universal Links

0x3

在微信后台配置Universal Links,以为需要审核,然而并不用,直接生效了。这里的链接有要求,已/结尾
在这里插入图片描述
最终配置:
在这里插入图片描述

最后

修改微信注册API,运行尝试看此方法的返回值是不是YES。只有返回YES才算OK,如还不行,可能微信后台有延迟,因为它说它会进行比对的。过几分钟再尝试,应该问题不大了

[WXApi registerApp:@"xxx" universalLink:@"你的微信后台配的Universal Links"];

到这里,你已经成功完成了微信openSDK1.8.6对iOS13系统的适配工作。微信登录和分享功能已正常。恭喜?

如你在此过程中仍然遇到一些问题,欢迎邮件联系我,我们一起交流讨论

### 使用微信开放SDK发送媒体消息到会话 为了通过微信开放SDK(wxopensdk)向微信会话发送媒体消息,开发者需遵循特定的流程来构建 `SendMessageToWX.Req` 对象并调用 `IWXAPI.sendReq()` 方法完成消息传递。以下是详细的实现方法及其参数配置说明。 #### 构建 SendMessageToWX.Req 对象 在 Android 应用程序中,可以通过以下方式创建 `SendMessageToWX.Req` 对象: ```java // 创建 SendMessageToWX.Req 实例 SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("text"); // 设置事务字段,用于区分不同的请求 ``` 上述代码片段中的 `buildTransaction(String type)` 函数通常是一个自定义函数,用来生成唯一的交易标识符[^2]。 #### 配置 WXMediaMessage 媒体对象 要发送多媒体消息,需要先封装一个 `WXMediaMessage` 对象,并将其与具体的媒体类型关联起来。例如,如果想发送图片,则可以使用 `WXImageObject`;如果是音乐或视频,则分别对应于 `WXMusicObject` 或 `WXVideoObject`。 ##### 图片消息示例 对于图片消息,可按如下方式进行设置: ```java // 初始化图像对象 WXImageObject imgObj = new WXImageObject(bitmap); WXMediaMessage msg = new WXMediaMessage(imgObj); // 可选:设置缩略图 Bitmap thumbBmp = Bitmap.createScaledBitmap(bitmap, THUMB_SIZE, THUMB_SIZE, true); msg.thumbData = Util.bmpToByteArray(thumbBmp, true); // 将消息附加到请求对象上 req.message = msg; ``` 此处需要注意的是,`thumbData` 字段应包含经过压缩处理后的位图数据流,其大小不得超过 32KB 的限制[^1]。 ##### 音乐/视频消息示例 当涉及更复杂的媒体形式如音频或视频时,除了基本的信息外还需要额外指定URL链接等内容描述信息。下面展示了一个简单的例子关于如何构造一条带外部资源引用的音乐分享项: ```java // 定义音乐文件路径或其他元数据属性... String musicUrl = "http://example.com/music.mp3"; // 创建 Music Object 并填充必要参数 WXMusicObject musicObject = new WXMusicObject(); musicObject.musicUrl = musicUrl; // 绑定 Media Message 到 Request 中去 WXMediaMessage msg = new WXMediaMessage(musicObject); msg.title = "Sample Title"; msg.description = "This is a sample description."; Bitmap thumb = BitmapFactory.decodeResource(getResources(), R.drawable.icon); if (null != thumb && thumb.getWidth() > 0 && thumb.getHeight() > 0){ msg.setThumbImage(thumb); } req.message = msg; ``` 以上代码展示了如何利用 `WXMusicObject` 来准备一首在线歌曲作为待传输的内容单元之一。 #### 调用 sendReq 发送请求 最后一步就是实际执行发送动作本身了——这只需要简单地把已经精心设计好的 request 参数提交给当前可用的 WeChat API 即可达成目标: ```java api.sendReq(req); ``` 这里假设变量名 'api' 已经被正确定义为实现了接口 IWXAPI 的某个具体类别的实体成员。 --- ### 总结 综上所述,在 Android 开发环境下借助官方提供的 Weixin Open SDK ,我们可以轻松实现各种类型的富文本或者多媒资材共享功能。只需按照既定模式依次组装好所需的各个组件部分即可顺利完成整个过程[^3]。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sailip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值