最近在些項(xiàng)目的時(shí)候需要引入微信登錄,當(dāng)然了,微信登錄大家都不陌生挨下,也都會做熔恢。
因?yàn)橹耙恢庇玫挠衙酥械娜降卿?友盟還是很方便的。省去了很多步驟臭笆,但是友盟也有壞處叙淌,假如微信登錄更新了,友盟這邊卻沒有更新愁铺,那就坑爹了鹰霍,下面分別說一下這兩種方式。
首先需要去微信開發(fā)平臺:https://open.weixin.qq.com茵乱,注冊應(yīng)用并得到茂洒,AppID和AppSecret,過程就不說了瓶竭。然后下載并導(dǎo)入相關(guān)sdk督勺。
第一種就是集成友盟,
一在验、導(dǎo)入SDK
第三方登錄這個(gè)模塊需要用到common和share文件夾里面的內(nèi)容玷氏,直接拖入項(xiàng)目即可,然后需要加入一些依賴庫
"SystemConfiguration.framework"
"Security.framework"
"CoreTelephony.framework"
"CoreGraphics.Framework"
"libiconv.tbd"
"libsqlite3.tbd"
"libstdc++.tbd"
"libz.tbd"
根據(jù)接入的第三方不同 可能會有所增減
二腋舌、在plist文件里配置白名單盏触,根據(jù)需要添加。
并在TARGETS -> info -> URL Types里做相應(yīng)配置
三块饺、代碼初始化
在AppDelegate中 導(dǎo)入
#import<UMCommon/UMCommon.h>
#import<UMShare/UMShare.h>
并在didFinishLaunchingWithOptions方法用 初始化
[UMConfigure initWithAppkey:@"your Umeng appKey"channel:@"App Store"];
//連續(xù)添加不同的平臺 此處以微信為例
[[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession appKey:@"微信平臺的appKey"appSecret:@"微信平臺的SecretKey"redirectURL:@"http://www.baidu.com"];
四赞辩、調(diào)起SDK
在需要第三方登錄的操作方法中加入代碼
[[UMSocialManager defaultManager] getUserInfoWithPlatform:platformType currentViewController:selfcompletion:^(idresult,NSError*error){
if(error) {NSLog(@"%@",error); ? ? ??
?}else{? ? ? ?
?? ? UMSocialUserInfoResponse *resp = result;
// 授權(quán)信息
NSLog(@"Wechat uid: %@", resp.uid);
NSLog(@"Wechat openid: %@", resp.openid);
NSLog(@"Wechat unionid: %@", resp.unionId);
NSLog(@"Wechat accessToken: %@", resp.accessToken);
NSLog(@"Wechat refreshToken: %@", resp.refreshToken);
NSLog(@"Wechat expiration: %@", resp.expiration);
// 用戶信息
NSLog(@"Wechat name: %@", resp.name);
NSLog(@"Wechat iconurl: %@", resp.iconurl);
NSLog(@"Wechat gender: %@", resp.unionGender);
// 第三方平臺SDK源數(shù)據(jù)NSLog(@"Wechat originalResponse: %@", resp.originalResponse);? ??
? ? }? ? }];
五、監(jiān)聽回調(diào)
在AppDelegate中 添加監(jiān)聽回調(diào)方法?
- (BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary *)options
{
BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url options:options];
if(!result) {// 其他如支付等SDK的回調(diào)}
return result;
}
- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation{
BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url sourceApplication:sourceApplication annotation:annotation];
if(!result) {// 其他如支付等SDK的回調(diào)}
return result;
}
- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url{
BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url];
if(!result) {// 其他如支付等SDK的回調(diào)}
return result;
}
第二種就是集成微信登錄
首先也是在appdelegate里面導(dǎo)入頭文件授艰,然后注冊appkey辨嗽。
第一步:請求code
原生應(yīng)用使用微信SDK授權(quán)登錄
- (void)sendWXAuthReq{if([WXApi isWXAppInstalled]){//判斷用戶是否已安裝微信
AppSendAuthReq *req = [[SendAuthReq alloc] init];
?req.state = @"wx_oauth_authorization_state";//用于保持請求和回調(diào)的狀態(tài),授權(quán)請求或原樣帶回
req.scope = @"snsapi_userinfo";//授權(quán)作用域:獲取用戶個(gè)人信息
[WXApi sendReq:req];//發(fā)起微信授權(quán)請求}
else{//提示:未安裝微信應(yīng)用或版本過低}
}
在回調(diào)函數(shù)中獲取code
- (void)onResp:(id)resp{
if([resp isKindOfClass:[SendAuthRespclass]]){//判斷是否為授權(quán)登錄類
SendAuthResp *req = (SendAuthResp *)resp;
if([req.state isEqualToString:@"wx_oauth_authorization_state"])
{
//微信授權(quán)成功
req.code//獲得code} ??
?}}
第二步:通過code請求access_token
獲取到第一步的code之后淮腾,GET請求以下鏈接獲取access_token
返回說明:
{"access_token":"ACCESS_TOKEN",//接口調(diào)用憑證
"expires_in":7200,//access_token接口調(diào)用憑證超時(shí)時(shí)間糟需,單位(秒)
"refresh_token":"REFRESH_TOKEN",//用戶刷新access_token
"openid":"OPENID",//授權(quán)用戶唯一標(biāo)識
"scope":"SCOPE",//用戶授權(quán)的作用域屉佳,使用逗號(,)分隔
"unionid":"o6_bmasdasdsad6_2sgVt7hMZOPfL"http://當(dāng)且僅當(dāng)該移動(dòng)應(yīng)用已獲得該用戶的userinfo授權(quán)時(shí),才會出現(xiàn)該字段}
第三步:通過access_token調(diào)用接口
獲取到第二步的access_token和openid后洲押,GET請求以下鏈接獲取用戶個(gè)人信息
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
返回說明:
{"openid":"OPENID",//用戶的標(biāo)識武花,對當(dāng)前開發(fā)者帳號唯一
"nickname":"NICKNAME",//用戶昵稱
"sex":1,//用戶性別,1為男性杈帐,2為女性
"province":"PROVINCE",//用戶個(gè)人資料填寫的省份
"city":"CITY",//用戶個(gè)人資料填寫的城市
"country":"COUNTRY",//國家体箕,如中國為CN
"headimgurl":"http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",//用戶頭像,最后一個(gè)數(shù)值代表正方形頭像大刑敉(有0累铅、46、64站叼、96娃兽、132數(shù)值可選,0代表640*640正方形頭像)大年,用戶沒有頭像時(shí)該項(xiàng)為空
"unionid":" o6_bmasdasdsad6_2sgVt7hMZOPfL"http://用戶統(tǒng)一標(biāo)識换薄。針對一個(gè)微信開放平臺帳號下的應(yīng)用玉雾,同一用戶的unionid是唯一的翔试。
}
到這里兩種方式就介紹完了,可以根據(jù)自己的需求選擇一種合適的复旬。