iOS 微信openSDK使用Universal Links填坑

传送门:
Demo源码
Universal Links配置方法
苹果Universal Links官方文档
微信开发平台文档
微信授权登录
微信分享

配置要求:

  1. openSDK版本: 1.8.6或以上
  2. 手机微信版本: 7.0.7或以上

本文从配置微信开放平台这一步开始,在这之前需要先配置Universal Links

第一步:配置微信开发平台

到微信开发平台的“管理中心”里,更新你的iOS移动应用:

  1. 查看详情,找到开发者信息一栏,点击右上角的“修改”按钮;


    微信开发平台截图.png
  2. 修改Universal Links路径,要求https开头,以“/”结尾,
    注意,这里的Universal Links需要配合服务端的apple-app-site-association文件使用

https://www.baidu.com/wx_conn/wxc59ee02301029db6/

这里很多帖子包括微信的开发指南中说的都很模糊,这里附上:Universal Links详细的配置方法

  1. 保存,并记录这里的AppID和Universal Links备用

第二步:集成微信openSDK

将微信提供的openSDK(版本1.8.6或以上)下载并集成到你的工程内(详细过程查看iOS接入指南:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html

  1. 配置URL Scheme,当分享结束后从微信回到原生App是通过URL Scheme跳转的,这里要使用从步骤四中从微信开发平台获取的AppID ,打开Xcode选择project → Info → URL Types → 新增一个,Identifier填weixin URL Schemes填AppID

    Xcode配置3.png

  2. 配置Info.plist,在LSApplicationQueriesSchemes下新增两个字段:weixinweixinULAPI

    Xcode配置4.png

    当然,如果你使用的API所在服务器不支持http,还需要加上App Transport Security Settings

  3. 代码部分,这里需要用到这里要使用从步骤四中从微信开发平台获取的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函数和自检函数,方便查看具体问题所在,但是后面打生产环境包前记得删除

  1. 真机测试,检查手机上安装的微信版本(需要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修复问题

  1. 如果上面自检函数步骤全检测通过那距离大功告成就已经不远了,发起分享:
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-重新打开微信,这是新的安全验证流程,每个用户在首次使用时会出现上述跳转,理论上该过程只会出现一次,若同一用户发起分享多次都出现该跳转,则需要检查上面各步骤是否配置正确,下面附上我自己总结的流程图:

安全验证流程图.jpg

如果本文对你有所帮助记得点个赞哈:)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,540评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,640评论 2 374
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,643评论 0 326
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,672评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,525评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,387评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,809评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,450评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,743评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,787评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,560评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,406评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,824评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,048评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,335评论 1 253
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,784评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,997评论 2 337