微信第三方登錄
一阱高、注冊(cè)微信開放平臺(tái)開發(fā)賬號(hào)
1. 微信開放平臺(tái)網(wǎng)站:微信開放平臺(tái)
2. 注冊(cè)開發(fā)者賬號(hào),按步驟填寫相關(guān)信息
3.?在管理中心創(chuàng)建移動(dòng)應(yīng)用钓觉,填寫相關(guān)信息离赫,信息完整填寫完成后提交審核,登錄功能申請(qǐng)要每年繳納300元費(fèi)用呈础,
審核通過后狀態(tài)如下圖
如需使用公眾號(hào)獲取用戶openID進(jìn)行微信推廣發(fā)送消息舆驶,需綁定公眾號(hào)。綁定后用公眾號(hào)開發(fā)而钞,可以通過openID獲取統(tǒng)一unionid
獲取unionid接口 get請(qǐng)求沙廉,通過后臺(tái)去獲取unionid,前端只返回code給后臺(tái)
https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx56789b6e2f5c7e5a&secret=0d0a1a6d9b8ab9fa8d7a05f87678e56b&code=071DHMXQ0quIJ82kRgWQ0jCEXQ0DHMX7&grant_type=authorization_code
返回?cái)?shù)據(jù)
{"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 將微信登錄最新版本集成到工程撬陵,這樣也利于后續(xù)的版本管理珊皿。
2. 微信登錄相關(guān)配置
配置URL schema
添加微信平臺(tái)Scheme白名單
wechat,
weixin
三、微信登錄詳細(xì)代碼
#import "AppDelegate.h"
#import <WXApi.h>
@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://用戶拒絕授權(quán)
? ? ? ? {
? ? ? ? ? ? NSLog(@"您拒絕授權(quán)微信登錄");
? ? ? ? }
? ? ? ? ? ? break;
? ? ? ? case -2://用戶取消
? ? ? ? {
? ? ? ? ? ? NSLog(@"您取消了授權(quán)微信登錄");
? ? ? ? }
? ? ? ? ? ? break;
? ? }
}
#import "ViewController.h"
#import <WXApi.h>
@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巨税,請(qǐng)先安裝");
? ? }
}
@end
QQ第三方登錄
一蟋定、注冊(cè)騰訊開放平臺(tái)開發(fā)賬號(hào)
1. 騰訊開放平臺(tái)網(wǎng)站:騰訊開放平臺(tái)
2. 注冊(cè)開發(fā)者賬號(hào),按步驟填寫相關(guān)信息
使用QQ號(hào)登錄
選擇進(jìn)入管理中心草添,注冊(cè)類型分個(gè)人驶兜、公司。個(gè)人需要上傳身份證照片远寸,公司需要上傳公司營(yíng)業(yè)執(zhí)照照片抄淑。
進(jìn)入注冊(cè)界面按步驟填寫相關(guān)信息
3. 在管理中心選擇iOS欄創(chuàng)建應(yīng)用,填寫相關(guān)信息
點(diǎn)擊創(chuàng)建應(yīng)用驰后,按步驟填寫相關(guān)信息肆资,填寫完成后提交審核
配置APP自定義 URL schema 方法,格式范例:783euu://灶芝,通過配置好的URL schema可以通過其他APP或者網(wǎng)頁中訪問783euu://此地址就可以直接跳轉(zhuǎn)到自己的APP
可以通過方法打開相應(yīng)的APP
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"783euu://"]];
二迅耘、QQ第三方登錄工程配置
1. 準(zhǔn)備工作
1.1 確認(rèn)騰訊開放平臺(tái)審核是否通過,通過狀態(tài)顯示已獲取QQ登錄能力
1.2?相同開發(fā)者賬號(hào)下的不同appid應(yīng)用打通返回相同UnionID
各客戶端APP ID是不一樣的监署,所以返回的appid是不一樣的,所以需要向騰訊申請(qǐng)統(tǒng)一各APP ID返回相同UnionID纽哥;先下載申請(qǐng)表格钠乏,表格下載和說明地址:申請(qǐng)流程&表格下載
獲取unionid接口 get請(qǐng)求,通過后臺(tái)去獲取unionid春塌,前端只返回access_token給后臺(tái)
https://graph.qq.com/oauth2.0/me?access_token=9898CA1C13CBE60A7CDFB2CEF042FC5E&unionid=1
返回?cái)?shù)據(jù)
callback( {"client_id":"1106628010","openid":"80A3310DAA0263AD46E0A45389B820B2","unionid":"UID_B83B6F5E1FD2F039923A52D5D367F3E3"} );
2. 通過Cocoapods集成QQ登錄SDK
pod 'TencentOpenAPI-Unofficial', '~> 3.3.0' ?通過Cocoapods將QQ登錄最新版本集成到工程晓避,這樣也利于后續(xù)的版本管理。
3. QQ登錄相關(guān)配置
配置URL schema
添加QQ平臺(tái)Scheme白名單
LSApplicationQueriesSchemes
mqqOpensdkSSoLogin,
mqqopensdkapiV2,
mqqopensdkapiV3,
wtloginmqq2,
mqq,
mqqapi
三只壳、QQ登錄詳細(xì)代碼
AppDelegate配置代碼
#import "ViewController.h"
#import <TencentOpenAPI/QQApiInterface.h>
#import <TencentOpenAPI/TencentOAuth.h>
@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登錄狀態(tài)回調(diào)? TencentSessionDelegate------
- (void)tencentDidLogin
{
? ? if (!_tencentOAuth.accessToken)
? ? {
? ? ? ? NSLog(@"%@ == %@",_tencentOAuth.accessToken,_tencentOAuth.openId);
? ? ? ? [self.tencentOAuth getUserInfo];
? ? }
? ? else
? ? {
? ? ? ? NSLog(@"登錄失斍喂啊!沒有獲取到accessToken");
? ? }
}
/**
* 登錄失敗后的回調(diào)
*/
- (void)tencentDidNotLogin:(BOOL)cancelled
{
? ? if (cancelled)
? ? {
? ? ? ? NSLog(@"用戶取消登錄");
? ? }
? ? else
? ? {
? ? ? ? NSLog(@"登錄失敗");
? ? }
}
/**
* 登錄時(shí)網(wǎng)絡(luò)有問題的回調(diào)
*/
- (void)tencentDidNotNetWork
{
? ? NSLog(@"沒有網(wǎng)絡(luò)吼句,無法登錄");
}
/**
* 取得用戶信息的回調(diào)
*/
- (void)getUserInfoResponse:(APIResponse *)response
{
? ? NSLog(@"%@",response.jsonResponse);
}
@end