为什么要升级 WechatOpenSDK ?
由于苹果iOS 13系统版本安全升级,为此WechatOpenSDK在1.8.6版本进行了适配。 1.8.6版本支持 Universal Links方式跳转,对WechatOpenSDK分享进行合法性校验,提升使用过程中的安全性。
一、SDK 集成
-
CocoaPods 自动集成
- 在工程的
Podfile
文件中添加以下代码:
pod 'WechatOpenSDK'
- 保存并执行
pod install
注意: 如果安装后是低于1.8.6的版本,请更新本地repo,命令行
pod repo update
- 在工程的
-
手动集成
- 根据业务需求,选择合适的iOS开发工具包下载
- 将 SDK 文件中包含的
libWeChatSDK.a
,WXApi.h
,WXApiObject.h
三个文件添加到你所建的工程中 - 在工程中链接上:
Security.framework
,CoreGraphics.framework
,WebKit.framework
- 选择
Build Setting
,在Other Linker Flags
中加入-ObjC -all_load
,在Search Paths
中添加libWeChatSDK.a
,WXApi.h
,WXApiObject.h
,文件所在位置
二、工程配置
-
URL Types 配置
选中
TARGETS
一栏,在Info
标签栏的URL type
添加URL scheme
为你所注册的应用程序 id -
白名单配置
选中
TARGETS
一栏,在Info
标签栏的LSApplicationQueriesSchemes
添加weixin
和weixinULAPI
三、配置 Universal Links
- 参见我写的另一篇文章<Universal Links 接入指南>
- 在微信开放平台注册申请 App ID 和 设置 Universal Link。
四、调用 SDK
-
引入头文件
#import "WXApi.h"
-
向微信注册
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 向微信注册 [WXApi registerApp:APP_ID universalLink:UNIVERSAL_LINK]; return YES; }
-
重写 AppDelegate 的 handleOpenURL 和 openURL 方法:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { return [WXApi handleOpenURL:url delegate:self]; } - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { return [WXApi handleOpenURL:url delegate:self]; }
-
重写 AppDelegate 的 continueUserActivity 方法:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRest oring>> * __nullable restorableObjects))restorationHandler { return [WXApi handleOpenUniversalLink:userActivity delegate:self]; }
-
实现
WXApiDelegate
- (void) onReq:(BaseReq*)reqonReq { // 所有的请求处理 } -(void) onResp:(BaseResp*)resp { // 所有的响应处理 }
-
向微信发送请求
在1.8.6版中,
sendReq:
方法已被删除,改用下面的方法:+ (void)sendReq:(BaseReq *)req completion:(void (^ __nullable)(BOOL success))completion;
注意: 这个方法带了一个可选的callback,微信授权登陆的响应代码不可写在callback里,因为这个callback没提供response对象,我们无法获得那个唯一授权的凭证
code
。所以微信登陆后的响应代码还是得写在WXApiDelegate
的onResp:
方法里。
五、1.8.6 版本存在的问题
这个版本在授权登陆时,会有个error日志:
2019-10-10 15:45:59.778864+0800 Demo[1609:270501] -canOpenURL: failed for URL: "weixinULAPI://" - error: "The operation couldn’t be completed. (OSStatus error -10814.)"
2019-10-10 15:45:59.781316+0800 Demo[1609:270501] -canOpenURL: failed for URL: "weixinULAPI://" - error: "The operation couldn’t be completed. (OSStatus error -10814.)"
2019-10-10 15:45:59.782868+0800 Demo[1609:270501] -canOpenURL: failed for URL: "weixinULAPI://" - error: "The operation couldn’t be completed. (OSStatus error -10814.)"
2019-10-10 15:45:59.784924+0800 Demo[1609:270501] -canOpenURL: failed for URL: "weixinULAPI://" - error: "The operation couldn’t be completed. (OSStatus error -10814.)"
查阅了官方的论坛,至今无解。
下面是官方论坛的此问题的帖子链接:
经过测试,此问题并不影响授权登陆跳转和分享跳转。