iOS 微信openSDK使用Universal Links填坑

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

配置要求:

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

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

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

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

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


    iOS 微信openSDK使用Universal Links填坑_第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

    iOS 微信openSDK使用Universal Links填坑_第2张图片
    Xcode配置3.png

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

    iOS 微信openSDK使用Universal Links填坑_第3张图片
    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 ()

@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> * __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-重新打开微信,这是新的安全验证流程,每个用户在首次使用时会出现上述跳转,理论上该过程只会出现一次,若同一用户发起分享多次都出现该跳转,则需要检查上面各步骤是否配置正确,下面附上我自己总结的流程图:

iOS 微信openSDK使用Universal Links填坑_第4张图片
安全验证流程图.jpg

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

你可能感兴趣的:(iOS 微信openSDK使用Universal Links填坑)