目前非常多的app在登陆的时会使用第三方登陆,主要的方式是:qq、微信及微博。现在就这三种方式进行一下解释
一、 环境配置
三个SDK的环境配置都是比较简单的,只要按照官方提供的文档进行添加就可以,下面说下在配置过程中我遇到的问题
1、QQ
这里说一下比较需要注意的一点,在XCode6当中,plist文件把下面的属性值去掉了
这个由于qq的环境配置是需要的所以要加上
2、 微博
需要注意的是:在引入静态库的时候,不止要加上-objc ,同时也要将.a文件的路径添加进去,即:
这样可以保证程序不再崩溃
二、 URLscheme 配置
URL scheme 需要在qq、微信以及微博的开放平台上各自申请。
配置到项目当中
三、 项目代码运行
AppDelegate当中的配置:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation
{
return [TencentOAuthHandleOpenURL:url]||[WXApi handleOpenURL:url delegate:self]|| [WeiboSDK handleOpenURL:url delegate:self];
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
return [TencentOAuthHandleOpenURL:url] || [WXApi handleOpenURL:url delegate:self]|| [WeiboSDKhandleOpenURL:url delegate:self];
}
1、QQ
qq的SDK集成的比较好,在项目当中调用比较方便
跳转qq的APP时,添加代码:
self.oauth = [[TencentOAuthalloc]initWithAppId:QQAppKeyandDelegate:self];
NSArray *_permissions = [NSArrayarrayWithObjects:
kOPEN_PERMISSION_GET_USER_INFO,
kOPEN_PERMISSION_GET_SIMPLE_USER_INFO,
kOPEN_PERMISSION_ADD_ALBUM,
kOPEN_PERMISSION_ADD_IDOL,
kOPEN_PERMISSION_ADD_ONE_BLOG,
kOPEN_PERMISSION_ADD_PIC_T,
kOPEN_PERMISSION_ADD_SHARE,
kOPEN_PERMISSION_ADD_TOPIC,
kOPEN_PERMISSION_CHECK_PAGE_FANS,
kOPEN_PERMISSION_DEL_IDOL,
kOPEN_PERMISSION_DEL_T,
kOPEN_PERMISSION_GET_FANSLIST,
kOPEN_PERMISSION_GET_IDOLLIST,
kOPEN_PERMISSION_GET_INFO,
kOPEN_PERMISSION_GET_OTHER_INFO,
kOPEN_PERMISSION_GET_REPOST_LIST,
kOPEN_PERMISSION_LIST_ALBUM,
kOPEN_PERMISSION_UPLOAD_PIC,
kOPEN_PERMISSION_GET_VIP_INFO,
kOPEN_PERMISSION_GET_VIP_RICH_INFO,
kOPEN_PERMISSION_GET_INTIMATE_FRIENDS_WEIBO,
kOPEN_PERMISSION_MATCH_NICK_TIPS_WEIBO,
nil];
[self.oauthauthorize:_permissionsinSafari:NO];
添加回调方法- (void)tencentDidLogin;用户在同意授权后,SDK会回调这个方法,返回openid,accesstoken信息,[self.oauthgetUserInfo];可以获得用户的信息,包括昵称、头像等
- (void)tencentDidNotLogin:(BOOL)cancelled;用户取消授权或者是授权失败时调用此方法
ps:其中openid是与qq账号一一对应的,可以作为唯一标示符进行存储。
2、微博
在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions;方法中添加
[WeiboSDKenableDebugMode:YES];
[WeiboSDKregisterApp:WeiBoAppKey];
登陆时调用方法:
WBAuthorizeRequest *request = [WBAuthorizeRequestrequest];
request.redirectURI =WeiBoRedirectUrl;
[WeiboSDKsendRequest:request];
这样就可以跳转到微博app,在用户同意授权之后,返回当前app,传回userid及accessToken,根据这些信息,调用微博API的用户信息接口
https://api.weibo.com/2/users/show.json?uid=uid&source=source&access_token=access_token
返回信息包括用户的name,头像,userid等信息
kindsOfLog.wxSend = [[SendAuthReq alloc] init];
kindsOfLog.wxSend.scope = @"snsapi_message,snsapi_userinfo,snsapi_friend,snsapi_contact";
kindsOfLog.userInfoDic = [[NSMutableDictionary alloc] init];
[WXApi sendReq:req];
(3)微信授权成功后,返回app,会调用- (void) onResp:(BaseResp *)resp;方法
在此方法中可以
if([resp isKindOfClass:[SendAuthResp class]])
{
SendAuthResp *aresp = (SendAuthResp *)resp;
if (aresp.errCode == 0) {
[BaseProgressHUD showMsgOnView:self.window Msg:@"loading..." animated:YES];
NSString *code = aresp.code;
// code = @"123";
NSDictionary *dic = @{@"code":code};
[KindsOfLogIn sharedKindsOfLogIn].getDic = dic;
[[NSNotificationCenter defaultCenter] postNotificationName:WXRELOADINFOMATION object:nil];
}
}
https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code
可以获取微信返回的accesstoken 和 openid(4)为了获取此授权微信号的信息,还需要调用
https://api.weixin.qq.com/sns/userinfo?access_token=%@&openid=%@ 接口,
这样可以获取微信号、昵称等信息