微信第三方登录
一、注册微信开放平台开发账号
1. 微信开放平台网站:微信开放平台
2. 注册开发者账号,按步骤填写相关信息
3. 在管理中心创建移动应用,填写相关信息,信息完整填写完成后提交审核,登录功能申请要每年缴纳300元费用,
审核通过后状态如下图
如需使用公众号获取用户openID进行微信推广发送消息,需绑定公众号。绑定后用公众号开发,可以通过openID获取统一unionid
获取unionid接口 get请求,通过后台去获取unionid,前端只返回code给后台
https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx56789b6e2f5c7e5a&secret=0d0a1a6d9b8ab9fa8d7a05f87678e56b&code=071DHMXQ0quIJ82kRgWQ0jCEXQ0DHMX7&grant_type=authorization_code
返回数据
{"access_token":"5_meXCqPOcoSonfFUi2FZFD4ds9c5OFyqLF_OT9FdffT7xx9krOSmmsqRUh0KIHtremAOtntD5mRkBjLFCG3j34Y7fC6qWuQUqnkPjak6iS5c","expires_in":7200,"refresh_token":"5_mWWzmal5Z23PfansrtScuVTNZASzeDUeOlDLmvyHtfVzqYGVjjUUVAUhU1HpxYIXR9O1xPSRtapElhb4-TS3WcJogVjjtrebpnm2VzXek6Y","openid":"oLo5k1EhHGAC3Mcm9m-eX6WuUacY","scope":"snsapi_userinfo","unionid":"ooGK5ww0RTiVicivaIyvXsOw7ba4"}
二、微信第三方登录工程配置
1. 通过Cocoapods集成微信登录SDK
pod 'WechatOpenSDK' 通过Cocoapods 将微信登录最新版本集成到工程,这样也利于后续的版本管理。
2. 微信登录相关配置
配置URL schema
添加微信平台Scheme白名单
wechat,
weixin
三、微信登录详细代码
#import "AppDelegate.h"
#import
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[WXApi registerApp:@"wx3e655454f7cfbb0b0"];
return YES;
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options
{
return [WXApi handleOpenURL:url delegate:self];
}
- (void)onResp:(BaseResp *)resp
{
switch (resp.errCode)
{
case 0:
{
// 用户同意 获取code
SendAuthResp *yuResp = (SendAuthResp *)resp;
NSLog(@"code == %@",yuResp.code);
}
break;
case -4://用户拒绝授权
{
NSLog(@"您拒绝授权微信登录");
}
break;
case -2://用户取消
{
NSLog(@"您取消了授权微信登录");
}
break;
}
}
#import "ViewController.h"
#import
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *weChatLoginBtn = [[UIButton alloc]initWithFrame:CGRectMake(50, 100, 80, 44)];
weChatLoginBtn.backgroundColor = [UIColor blackColor];
[weChatLoginBtn setTitle:@"QQ Login" forState:UIControlStateNormal];
[weChatLoginBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[weChatLoginBtn addTarget:self action:@selector(weChatLoginBtnAction) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:weChatLoginBtn];
}
- (void)weChatLoginBtnAction
{
if ([WXApi isWXAppInstalled])
{
SendAuthReq *weChatReq = [[SendAuthReq alloc]init];
weChatReq.scope = @"snsapi_userinfo";
weChatReq.openID = @"wx3e655454f7cfbb0b0";
weChatReq.state = @"1245";
[WXApi sendReq:weChatReq];
}
else
{
NSLog(@"您未安装微信APP,请先安装");
}
}
@end
QQ第三方登录
一、注册腾讯开放平台开发账号
1. 腾讯开放平台网站:腾讯开放平台
2. 注册开发者账号,按步骤填写相关信息
使用QQ号登录
选择进入管理中心,注册类型分个人、公司。个人需要上传身份证照片,公司需要上传公司营业执照照片。
进入注册界面按步骤填写相关信息
3. 在管理中心选择iOS栏创建应用,填写相关信息
点击创建应用,按步骤填写相关信息,填写完成后提交审核
配置APP自定义 URL schema 方法,格式范例:783euu://,通过配置好的URL schema可以通过其他APP或者网页中访问783euu://此地址就可以直接跳转到自己的APP
可以通过方法打开相应的APP
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"783euu://"]];
二、QQ第三方登录工程配置
1. 准备工作
1.1 确认腾讯开放平台审核是否通过,通过状态显示已获取QQ登录能力
1.2 相同开发者账号下的不同appid应用打通返回相同UnionID
各客户端APP ID是不一样的,所以返回的appid是不一样的,所以需要向腾讯申请统一各APP ID返回相同UnionID;先下载申请表格,表格下载和说明地址:申请流程&表格下载
获取unionid接口 get请求,通过后台去获取unionid,前端只返回access_token给后台
https://graph.qq.com/oauth2.0/me?access_token=9898CA1C13CBE60A7CDFB2CEF042FC5E&unionid=1
返回数据
callback( {"client_id":"1106628010","openid":"80A3310DAA0263AD46E0A45389B820B2","unionid":"UID_B83B6F5E1FD2F039923A52D5D367F3E3"} );
2. 通过Cocoapods集成QQ登录SDK
pod 'TencentOpenAPI-Unofficial', '~> 3.3.0' 通过Cocoapods将QQ登录最新版本集成到工程,这样也利于后续的版本管理。
3. QQ登录相关配置
配置URL schema
添加QQ平台Scheme白名单
LSApplicationQueriesSchemes
mqqOpensdkSSoLogin,
mqqopensdkapiV2,
mqqopensdkapiV3,
wtloginmqq2,
mqq,
mqqapi
三、QQ登录详细代码
AppDelegate配置代码
#import "ViewController.h"
#import
#import
@interface ViewController ()
@property (nonatomic,strong) TencentOAuth *tencentOAuth;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *qqLoginBtn = [[UIButton alloc]initWithFrame:CGRectMake(50, 100, 80, 44)];
qqLoginBtn.backgroundColor = [UIColor blackColor];
[qqLoginBtn setTitle:@"QQ Login" forState:UIControlStateNormal];
[qqLoginBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[qqLoginBtn addTarget:self action:@selector(qqLoginBtnAction) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:qqLoginBtn];
}
- (void)qqLoginBtnAction
{
self.tencentOAuth = [[TencentOAuth alloc]initWithAppId:@"1108888010" andDelegate:self];
NSMutableArray *permission = [@[] mutableCopy];
permission = [NSMutableArray arrayWithObjects:@"get_user_info",@"get_simple_userinfo",nil];
[self.tencentOAuth authorize:permission inSafari:NO];
}
#pragma mark --------- qq登录状态回调 TencentSessionDelegate------
- (void)tencentDidLogin
{
if (!_tencentOAuth.accessToken)
{
NSLog(@"%@ == %@",_tencentOAuth.accessToken,_tencentOAuth.openId);
[self.tencentOAuth getUserInfo];
}
else
{
NSLog(@"登录失败!没有获取到accessToken");
}
}
/**
* 登录失败后的回调
*/
- (void)tencentDidNotLogin:(BOOL)cancelled
{
if (cancelled)
{
NSLog(@"用户取消登录");
}
else
{
NSLog(@"登录失败");
}
}
/**
* 登录时网络有问题的回调
*/
- (void)tencentDidNotNetWork
{
NSLog(@"没有网络,无法登录");
}
/**
* 取得用户信息的回调
*/
- (void)getUserInfoResponse:(APIResponse *)response
{
NSLog(@"%@",response.jsonResponse);
}
@end