传送门:
Demo源码
Universal Links配置方法
苹果Universal Links官方文档
微信开发平台文档
微信授权登录
微信分享
配置要求:
- openSDK版本: 1.8.6或以上
- 手机微信版本: 7.0.7或以上
本文从配置微信开放平台这一步开始,在这之前需要先配置Universal Links
第一步:配置微信开发平台
到微信开发平台的“管理中心”里,更新你的iOS移动应用:
-
查看详情,找到开发者信息一栏,点击右上角的“修改”按钮;
- 修改Universal Links路径,要求https开头,以“/”结尾,
注意,这里的Universal Links需要配合服务端的apple-app-site-association文件使用
这里很多帖子包括微信的开发指南中说的都很模糊,这里附上:Universal Links详细的配置方法)
- 保存,并记录这里的AppID和Universal Links备用
第二步:集成微信openSDK
将微信提供的openSDK(版本1.8.6或以上)下载并集成到你的工程内(详细过程查看iOS接入指南:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html)
-
配置URL Scheme,当分享结束后从微信回到原生App是通过URL Scheme跳转的,这里要使用从步骤四中从微信开发平台获取的AppID ,打开Xcode选择project → Info → URL Types → 新增一个,Identifier填
weixin
URL Schemes填AppID
-
配置Info.plist,在LSApplicationQueriesSchemes下新增两个字段:
weixin
和weixinULAPI
当然,如果你使用的API所在服务器不支持http,还需要加上App Transport Security Settings
代码部分,这里需要用到这里要使用从步骤四中从微信开发平台获取的App ID和Universal Links,在AppDelegate.m中实现如下代码:
#import "AppDelegate.h"
#import "WXApi.h"
#warning 注意修改WXAppId和WXUniversalLink为当前App对应在微信开放平台的配置
#define WXAppId @"wx123456789"//TODO:注意修改
#define WXUniversalLink @"https://www.wechat.com/wx_conn/app/"//TODO:注意修改
@interface AppDelegate ()<WXApiDelegate>
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[WXApi startLogByLevel:WXLogLevelDetail logBlock:^(NSString * _Nonnull log) {
NSLog(@"%@", log);
}];
if([WXApi registerApp:WXAppId universalLink:WXUniversalLink]){
NSLog(@"初始化成功");
//自检函数
[WXApi checkUniversalLinkReady:^(WXULCheckStep step, WXCheckULStepResult* result) {
NSLog(@"%@, %u, %@, %@", @(step), result.success, result.errorInfo, result.suggestion);
}];
}
return YES;
}
- (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];
}
#pragma mark - Universal Link
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler {
return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}
#pragma mark - WXApiDelegate
- (void)onResp:(id)resp{
if([resp isKindOfClass:[SendMessageToWXResp class]]){//微信回调
SendMessageToWXResp *response = (SendMessageToWXResp *)resp;
if(response.errCode == WXSuccess){
//目前分享回调只会走成功
}
}else if([resp isKindOfClass:[SendAuthResp class]]){//判断是否为授权登录类
SendAuthResp *req = (SendAuthResp *)resp;
if([req.state isEqualToString:@"wx_oauth_authorization_state"]){//微信授权成功
}
}else if ([resp isKindOfClass:[WXLaunchMiniProgramResp class]]){
WXLaunchMiniProgramResp *req = (WXLaunchMiniProgramResp *)resp;
NSString *string = req.msg; // 对应JsApi navigateBackApplication中的extraData字段数据
}
}
@end
如果是在debug模式下真机调试,建议打开WXApi
提供的log函数和自检函数,方便查看具体问题所在,但是后面打生产环境包前记得删除
- 真机测试,检查手机上安装的微信版本(需要7.0.7或以上),如果你在上面代码部分实现了自检函数
[WXApi checkUniversalLinkReady:block];
运行启动registerApp初始化通过后会主动拉起微信进行检查
WXULCheckStep值说明:
(1) step = WXULCheckStepParams: 参数检查
(2) step = WXULCheckStepSystemVersion: 当前系统版本检查
(3) step = WXULCheckStepWechatVersion: 微信客户端版本检查
(4) step = WXULCheckStepSDKInnerOperation: 微信SDK内部操作检查
(5) step = WXULCheckStepLaunchWechat: App拉起微信检查
(6) step = WXULCheckStepBackToCurrentApp: 由微信返回当前App检查
(7) step = WXULCheckStepFinal: 最终检查
自检函数会依次回调这7个step,当回调了WXULCheckStepFinal,说明检测通过,SDK接入成功。 任一step回调的result.success为NO, 流程终止,后续不再回调,可以根据result.errorInfo的查看当前步骤错误的原因,根据result.suggestion修复问题
- 如果上面自检函数步骤全检测通过那距离大功告成就已经不远了,发起分享:
if([WXApi isWXAppInstalled]){//判断当前设备是否安装微信客户端
//创建多媒体消息结构体
WXMediaMessage *message = [WXMediaMessage message];
message.title = @"【爆款直降 盛夏特惠】【29.9免邮 限量买3免1】清新持久自然GUCCMI香水";//标题
message.description = @"我在京东发现了一个不错的商品,赶快来看看吧。";//描述
[message setThumbImage:[UIImage imageNamed:@"res2.png"]];//设置预览图
//创建网页数据对象
WXWebpageObject *webObj = [WXWebpageObject object];
webObj.webpageUrl = @"[https://open.weixin.qq.com](https://open.weixin.qq.com)";//链接
message.mediaObject = webObj;
SendMessageToWXReq *sendReq = [[SendMessageToWXReq alloc] init];
sendReq.bText = NO;//不使用文本信息
sendReq.message = message;
sendReq.scene = WXSceneSession;//分享到好友会话
//发送分享信息
[WXApi sendReq:sendReq completion:^(BOOL success) {
NSLog(@"唤起微信:%@", success ? @"成功" : @"失败");
}];
}else{
//未安装微信应用或版本过低
}
当开发者的App发起分享时,微信SDK会校验Universal Links是否匹配,使用新版本SDK发起分享时,会出现如下图所示交互过程:从App拉起微信-出现“正在连接”页面-返回App-重新打开微信,这是新的安全验证流程,每个用户在首次使用时会出现上述跳转,理论上该过程只会出现一次,若同一用户发起分享多次都出现该跳转,则需要检查上面各步骤是否配置正确,下面附上我自己总结的流程图:
如果本文对你有所帮助记得点个赞哈:)