微信实现第三方登录
最近项目中需要做一个第三方登录的功能,在此之中自己也是遇到了一个小坑,总得来说操作还是算简单的,但是觉得这个坑有点意思,估计后面也会有人遇见,希望这篇文章会对别人有帮助
1、去微信开放平台下载最新的SDK:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319164&token=791a4d35d71674aedd29bcd3aefab39f198d902d&lang=zh_CN
2、自己创建一个应用,获取到需要的APP ID和APP Secret
3、将SDK中的三个文件导入你需要接入第三方工程中:libWeChatSDK.a,WXApi.h,WXApiObject.h
4、添加以下依赖库
SystemConfiguration.framework,
libz.dylib,
libsqlite3.0.dylib,
libc++.dylib,
Security.framework,
CoreTelephony.framework。
5、在你的工程文件中选择Build Setting,在Search Paths中添加上面导入的三个文件的路径(如果你的三个文件在一个文件夹里面,那是非诚简单的)
6、在你的工程文件中选择TARGETS 一栏,在info标签栏的URL type添加URL scheme,
到这里,基本上的配置就完成了
下面开始代码部分
为了不在APPDelegate写太多的代码,我自己新建了一个NSObject文件,作为一个单列,在这个单列中有许多的事情都可以在这里做,这样会让你的程序看起来不那么杂乱无章,也方便了我们的管理
当然这里必须得添加微信的头文件 #import "WXApi.h"
WeChatManager.h文件
WeChatManager.m文件
@implementation WeChatManger
#pragma mark - LifeCycle
+(instancetype)sharedManager {
static dispatch_once_t onceToken;
static WeChatManger *instance;
dispatch_once(&onceToken, ^{
instance = [[WeChatManger alloc] init];
});
return instance;
}
- (void)dealloc
{
self.delegate = nil;
}
#pragma mark - WXApiDelegate微信回调
- (void)onResp:(BaseResp *)resp
{
/*微信登录的回调*/
if ([resp isKindOfClass:[SendAuthResp class]])
{
//拿到微信返回的Code
}
}
- (void)onReq:(BaseReq *)req
{
}
/*微信登录调起事件*/
+ (void)sendAuthRequest
{
//构造SendAuthReq结构体
SendAuthReq* req =[[SendAuthReq alloc ] init];
req.scope = @"snsapi_userinfo";
req.openID = @"wxdd13dcdbe6174bcf";
//第三方向微信终端发送一个SendAuthReq消息结构
[WXApi sendReq:req];
}
写好了以上的方法,我们还是要遵循APP Delegate里面的方法的
首先少不了的还是微信的注册
接下来是两个APPDelegate方法的实现
到这里就基本上完成了微信的登录的实现:
现在只需要在你要点击的地方加上 [WeChatManger sendAuthRequest];这句代码就可以实现了,
最后我要说的是我以为到了这里就已经完成了,确实也完成了,但是这是当我运行我的程序的时候我发现这个方法不是直接去违心的客户端授权,而是跳转到了一个网页,这时候还需要用户手动输入自己的手机号才能授权,这样会不会不太好呢,于是我问朋友找方法,终于让我找到了问题的所在:原因就是在iOS 9中苹果公司进行了策略更新,限制了http协议的访问,所以当我们需要使用QQ/QQ空间/支付宝/微信的相关能力的时候,我们需要添加开白名单:
在你工程的info.plist里面添加如下配置:
你要做那个操作的时候添加对应的开白名单就好了,添加完成之后运行就可以跳转到对应的应用中进行授权了