本文会介绍iOS常用的第三方登录,包括微信、QQ、微博,文章前部分会介绍每个平台的API集成及使用方法,文章后部分会介绍对三方登陆集成一起的三方框架ShareSDK(友盟也是可以的)。
微信登录:
集成前先去微信开放平台(地址https://open.weixin.qq.com)注册账号及注册APP,来获取appkey。注册APP的时候注意最好是iOS版和安卓版注册到一起,不然只注册一个端会导致注册另一端的时候提现APP已存在的尴尬局面。微信登录及支付接口是高级接口需要企业认证才可使用,企业认证费用300元/次,腾讯会委托三方认证公司去认证,审核期三天左右。
1.用cocoapods导入微信SDK
pod 'WechatOpenSDK'
2.在.pch文件中导入微信SDK头文件
#import "WXApi.h"
3.在AppDelegate文件中注册微信SDK
[WXApi registerApp:KWeChatAppID];//传入微信平台注册的APPkey
4.唤起微信要添加这个方法(下面QQ、微博也是这个方法不在细说)
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
#pragma makr ios9之后方法
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
5.添加URL Schemes
project~>TARGETS~>info~>URL Type
6.授权登录
SendAuthReq *req = [[SendAuthReq alloc] init];
req.scope = @"snsapi_userinfo";
req.state = @"GSTDoctorApp";
if ([WXApi isWXAppInstalled]) {//有微信启动微信登录,没有微信 到网页版登录
[WXApi sendReq:req];
}else{
[WXApi sendAuthReq:req viewController:self delegate:self];
}
7.回调
授权成功后会走回调-(void) onResp:(BaseResp*)resp,没错对的,还是走分享的回调。微信和qq的分享登录回调都是这个。
if ([resp isKindOfClass:[SendAuthResp class]]) {//微信登录
if (resp.errCode == WXSuccess) {
SendAuthResp *temp = (SendAuthResp *)resp;
NSDictionary *dic = @{@"info":temp.code};
[[NSNotificationCenter defaultCenter] postNotificationName:Notication_WeChatLogin object:nil userInfo:dic];
}
}
授权成功的回调里面会拿到temp.code,这个参数用来获取微信的登录信息
8.获取微信登录信息
NSString *accessUrlStr = [NSString stringWithFormat:@"%@/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code", KWXBaseUrl, KWeChatAppID, KWXSecret,code];
AFHTTPSessionManager *manger = [AFHTTPSessionManager manager];
manger.responseSerializer.acceptableContentTypes = nil;
[manger GET:accessUrlStr parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSString *openid = responseObject[@"openid"];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
拼接方式就是上面的accessUrlStr,其中KWXSecret是微信平台生成的APPsecret,这个东西的生成每次都需要管理员去扫码,而且每次生成的会变化,一次新的生成会导致旧版的实效,所以不要去多次生成。
QQ和微博也是一样的方法,不在细说,下面讲解ShareSDK的三方登录方法
ShareSDK登录:
ShareSDK登录是把多平台的三方登录整合到了一起,但是每个三方平台仍然需要去注册响应的账号获取appkey。微信登录仍然需要去企业认证来获取高级接口
1.用cocoapods导入SDK
#ShareSDK
pod 'mob_sharesdk'
pod 'mob_sharesdk/ShareSDKExtension'
pod 'mob_sharesdk/ShareSDKPlatforms/QQ'
pod 'mob_sharesdk/ShareSDKPlatforms/SinaWeibo'
pod 'mob_sharesdk/ShareSDKPlatforms/WeChat'
注意,SDK有很多,需要用那个平台在导入那个平台,没必要导入无用的平台。
2.在.pch文件中导入SDK头文件
#import <ShareSDK/ShareSDK.h>
3.在AppDelegate文件中注册SDK
[ShareSDK registPlatforms:^(SSDKRegister *platformsRegister) {
//新浪
[platformsRegister setupSinaWeiboWithAppkey:kSinaAppKey appSecret:kSinaAppSecret redirectUrl:kSinaRedirectUrl];
[platformsRegister setupQQWithAppId:kQQAppID appkey:kQQAppKey];
//微信
[platformsRegister setupWeChatWithAppId:kWeChatAppID appSecret:kWeChatAppSecret];
}];
4.配置URL Schemes见上面微信
5.登录代码及回调
[ShareSDK authorize:SSDKPlatformTypeWechat settings:nil onStateChanged:^(SSDKResponseState state, SSDKUser *user, NSError *error) {
switch (state) {
case SSDKResponseStateSuccess:
user是登录返回的信息
break;
case SSDKResponseStateFail:
{
//失败
[self showAlert:@"授权失败" type:ENAlertType_Tost];
break;
}
case SSDKResponseStateCancel:
//用户取消授权
[self showAlert:@"已取消" type:ENAlertType_Tost];
break;
default:
break;
}
}];
SSDKPlatformType是确定登录平台的参数,传入需要登录的三方平台即可,微信、qq、新浪