1、通过cocoapods导入sdk pod 'WechatOpenSDK'
sdk 1.8.6 的出现,意味着你要配置universal link,这个东西需要后台来完成,一把心酸史啊~
首先,微信开发平台上,先填好Universal links,这个ul要跟你工程里,注册微信时候,填写一致,才能确保拉起微信
你的appdelegate文件里:
//向微信注册
[WXApi registerApp:@"你的appid(微信申请应用)" universalLink:@"微信应用平台的ul"];
2、配置xcode
targets --> info --> URL Types
然后找到info.plist文件中,找到下面截图,填好,一定要注意,我起初就是将weixinULAPI,打错成weixinUIAPI,导致微信拉不起来,检查几遍都没检查出来,苦恼了我两天!!!此为第一小坑!!!!
以及info.plist 文件中 设置App Transport Security Settings 为yes
接下来,需要用到你的苹果开发者账号,为ul配置做准备了
登陆你的苹果账号,https://developer.apple.com/
勾选Associated Domains
配置好后,回到你的工程里,找到target --> Signing&Capabilities ,xcode更新之后,只显示signing,可以点击上面那个+,添加Capabilities,这里要注意!!!!
Domains,填写域名,前面必须加上applinks:
配置完成。
再来说一下,服务器配置ul不生效,我们也是拿不到微信授权返回的数据的,不走回调函数,起初不确定是什么原因,不走回调函数,找了好久我这边得问题,这件事真的超级大坑!!!
首先我遇到的问题,就是微信授权,出现了二次弹窗,微信官方文档也写明了,出现二次授权确定弹窗,就要后台检查ul配置问题了。证明ul不生效!!!
微信开发文档:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html
以上配置完成之后,就是走代码部分了。这里,我也要多说几句,因为本人用的xcode11,多了一个scenedelegate,分屏功能。如果你的app没有分屏功能,可以将这个文件删掉,或者不删也没关系。
然后需要在info.plist中找到Application Scene Manifest选项,删掉
接着,在appdelegate里找到上面这两段代码,注释掉
以上完成了关闭多窗口的scenedelegate。
这里有一个问题,就是如果你不注释掉上面这两段代码,运行到ios13以上的手机,会出现黑屏情况。
我遇到的问题,就是三项操作都做了,但是还是出现了黑屏的情况,又是莫名其妙一堆问号,最后发现,删掉info.plist文件中的Application Scene Manifest选项,但是关掉xcode,打开这个选项竟然还在??再删掉,重启,就好了。这种事情只能是多试。谁也不会想到,删掉还在的情况、就像有缓存一样!
因为起初我删这个scenedelegate,出现黑屏,加上当时ul不生效,只能暂时放弃删掉scenedelegate的想法,当时的情况是,ios13以下的走appdelegate里微信的回调函数,ios13的由于ul问题,不走回调,查了好久,各种找问题,找到一篇文章,说在scenedelegate中,多写一个函数,- (void)scene:(UIScene*)scenewillConnectToSession:(UISceneSession*)sessionoptions:(UISceneConnectionOptions*)connectionOptions API_AVAILABLE(ios(13.0)){}
写上之后,ios13的手机授权微信登陆,就走了这里,于是才有了在appdelegate和scenedelegate里分别写了一套微信登陆。appdelegate里的,供ios13以下使用,scenedelegate里的供ios13及以上使用。
当时用自己的手机测试没问题,但是转天拿同事手机ios13.2测试,竟然不好使了!!!
测试自己的依然好使,开始以为是ios13.2系统的问题,于是我将自己的手机(ios13.1.3)的关机重启,发现也不走回调函数了。(有些方、、、)
将工程发给另一个同事,他那里也是ios13.1.3,竟然没事,微信可以正常使用。那个同事的xcode是11.3,我们又怀疑是不是xcode版本问题,于是又升级xcode为最新版本,还是不行。最后代码看不出问题,加上ios13也不走回调,就想着再重新将scenedelegate弃用。才有了上面,发现删不掉的情况。
至此,删掉了scenedelegate,又改回用一套微信回调函数,一切问题都解决了。
真是遇到了好多坑啊~~~~~
代码部分:AppDelegate
- (BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
//微信注册
[WXApi registerApp:@"你的appid(微信申请应用)" universalLink:@"微信应用平台的ul"];
}
#pragma mark - ******************** 微信 ********************
- (BOOL)application:(UIApplication*)applicationhandleOpenURL:(NSURL*)url {
return [WXApi handleOpenURL:url delegate:self];
}
- (BOOL)application:(UIApplication*)applicationopenURL:(NSURL*)urlsourceApplication:(NSString*)sourceApplicationannotation:(id)annotation {
NSLog(@"跳转回本APP:%@",url);
return [WXApi handleOpenURL:url delegate:self];
}
#pragma mark - ******************** WXApiDelegate ********************
- (void)onResp:(BaseResp*)resp {
/*
enum WXErrCode {
WXSuccess = 0, 成功
WXErrCodeCommon = -1, 普通错误类型
WXErrCodeUserCancel = -2, 用户点击取消并返回
WXErrCodeSentFail = -3, 发送失败
WXErrCodeAuthDeny = -4, 授权失败
WXErrCodeUnsupport = -5, 微信不支持
};
*/
//微信登录的类
if([respisKindOfClass:[SendAuthRespclass]]){
if(resp.errCode==0) { //成功。
//这里处理回调的方法 。 通过代理吧对应的登录消息传送过去。
SendAuthResp*sresp = resp;
NSLog(@"codecodecode%@",sresp.code);
[self userToken:sresp.code];
//(这里是拿到code之后,走微信的接口,详见:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/WeChat_Login/Authorized_API_call_UnionID.html)
}else{//失败
NSLog(@"error %@",resp.errStr);
}
}
}
//iOS 13以上版本,进行微信相关操作会走此回调
- (BOOL)application:(UIApplication*)applicationcontinueUserActivity:(NSUserActivity*)userActivityrestorationHandler:(void(^)(NSArray<id> * __nullablerestorableObjects))restorationHandler {
if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
NSURL*webUrl = userActivity.webpageURL;
NSLog(@"continueUserActivity:%@",webUrl);
}
//处理通用链接
//当APP被UniversalLink调起后,
BOOL ret = [WXApi handleOpenUniversalLink:userActivity delegate:self];
NSLog(@"处理微信通过Universal Link启动App时传递的数据:%d",ret);
return ret;
}
// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{
NSLog(@"options 跳转回本APP...url:%@",url);
return [WXApi handleOpenURL:url delegate:self];
}
到这里,微信登陆功能就做好了
再多补充一句:
因为ios13.3的深色主题问题,为了防止app受到什么影响,什么字体被隐藏之类的,我关闭了深色主题
在info.plist文件中,设置User Interface Style 为,Light 即可。
ending