折腾了好几天,总算把 iOS 的微信第三方登录做出来了!虽然不难,但对初学者来说还是遇到了一些没接触过的知识。操作步骤官方文档(微信开放平台)写得还可以,这里不再赘述,只说一些知识点和需要注意的地方。
Demo 下载
没图没真相!先上效果图:
首页显示:
获取权限页面:
登录后的效果:
刚开始的困难是不知道如何在类与类之间传递数据,后来在百度知道找到了方法,网址 http://zhidao.baidu.com/link?url=rgc9KJOqPqhS1N0x02eXxeQtN_Sy_ZZIY0QlI4Sl0cChwel080d43TFn3npIB7arYxcbsCsVTRyER2TmFrmioa 这里主要是 AppDelegate 和 ViewController 之间传递数据。
AppDelegate.m 中代码:
AppDelegate *appdelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
appdelegate.headimgurl = [dic objectForKey:@"headimgurl"]; // 传递头像地址
appdelegate.nickname = [dic objectForKey:@"nickname"]; // 传递昵称
ViewController.m 中代码:
AppDelegate *appdelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSString *str = appdelegate.nickname; // 接收昵称
NSLog(@"display.nickname = %@", str);
[_nickname setText:str];
NSString *url = appdelegate.headimgurl;
NSLog(@"display.url = %@", url); // 接收头像网址
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url]]];
self.imageView.image = image;
数据能传递了,但什么时候调用并显示是个问题。在 ViewController 和 AppDelegate 的生命周期中都进行了测试,结果都不行。后来看到有人说用通知 NSNotification, 测试后果然可以!
通知其实很简单,只需一方发送,另一方接收之后执行所需操作即可。
AppDelegate.m 发送通知代码:
[[NSNotificationCenter defaultCenter] postNotificationName:@"Note" object:nil]; // 发送通知
ViewController.m 接收通知代码:
// 添加观察者
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(display) name:@"Note" object:nil];
注意:发送和接收通知的名字要一致!
关于 NSNotification, 这里有个小 Demo 非常不错!简洁明了!下载地址
真机调试,需要安装微信客户端。
一定不要忘了在项目的 info 中添加 URL Types, 否则不能获取权限(自己不止一次忘记添加……)
刚开始不太理解,后来才知道是把文件复制到工程里面。这个很重要!
注:本人用的 Xcode 版本为 6.4。
运行项目可能会出现以下错误和警告:
此时,删除 WeChatSDK, 再重新拖进去一次即可。注意拖入的时候要勾选 “Copy items if needed” 选项,如图:
主要参考资料: 1. iOS接入指南 2. 移动应用微信登录开发指南 3. 基于第三方微信授权登录的iOS代码分析