折腾了好几天,总算把 iOS 的微信第三方登录做出来了!虽然不难,但对初学者来说还是遇到了一些没接触过的知识。操作步骤官方文档(微信开放平台)写得还可以,这里不再赘述,只说一些知识点和需要注意的地方。

Demo 下载

没图没真相!先上效果图:

首页显示:

ios swfit 微信登录 苹果微信登录_ios swfit 微信登录

获取权限页面:

ios swfit 微信登录 苹果微信登录_微信_02

登录后的效果:

ios swfit 微信登录 苹果微信登录_ios swfit 微信登录_03

一些知识点1. 类与类之间传递数据

刚开始的困难是不知道如何在类与类之间传递数据,后来在百度知道找到了方法,网址 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;
2. 通知 NSNotification

数据能传递了,但什么时候调用并显示是个问题。在 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 非常不错!简洁明了!下载地址

注意事项1. 微信客户端

真机调试,需要安装微信客户端。

2. 添加 URL Types

一定不要忘了在项目的 info 中添加 URL Types, 否则不能获取权限(自己不止一次忘记添加……)

ios swfit 微信登录 苹果微信登录_第三方_04

3. Copy items if needed

刚开始不太理解,后来才知道是把文件复制到工程里面。这个很重要!

注:本人用的 Xcode 版本为 6.4。

运行项目可能会出现以下错误和警告:

ios swfit 微信登录 苹果微信登录_微信_05

此时,删除 WeChatSDK, 再重新拖进去一次即可。注意拖入的时候要勾选 “Copy items if needed” 选项,如图:

ios swfit 微信登录 苹果微信登录_第三方_06

主要参考资料: 1. iOS接入指南 2. 移动应用微信登录开发指南 3. 基于第三方微信授权登录的iOS代码分析