使用友盟来实现第三方登录,但是需要在新浪微博登录的时候添加关注官微的功能(下文简称为浪微),通过给友盟和新浪发邮件最终在Google找到了答案
说明:浪微属于scope功能,如果只是用第三方的登录和简单的分享功能一般用不到。所以如果要使用,大部分需要进一步申请,而浪微只需要在新浪开放平台的控制台填好官微就可以。
示例
- 在登录界面做判断,如果是新浪微博登录,那就不使用友盟的,而是用新浪自己的SDK
if (platformName == UMSocialPlatformType_Sina) {
//设置请求参数
WBAuthorizeRequest *request = [WBAuthorizeRequest request];
//scope可以拼接多个参数,以逗号分割(我只用到了浪微)
request.scope = @"follow_app_official_microblog";
//回调的URL
request.redirectURI = SINA_REDIRECT_URL;
request.shouldShowWebViewForAuthIfCannotSSO = NO;
//跳转到微博
[WeiboSDK sendRequest:request];
} else {//其他第三方平台:微信、QQ等
[[UMSocialManager defaultManager] getUserInfoWithPlatform:platformName currentViewController:self completion:^(id result, NSError *error) {
}]
}
- 在AppDelegate中设置代理
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
[WeiboSDK handleOpenURL:url delegate:self]; //设置代理
}
- 接着实现代理方法
- (void)didReceiveWeiboResponse:(WBBaseResponse *)response {
//我这里只用了登录返回,分享还是用的友盟,所以只要不是登录授权返回就不处理
if (![response isKindOfClass:[WBAuthorizeResponse class]]) {
return;
}
WBAuthorizeResponse *resp = (WBAuthorizeResponse *)response;
if ([response valueForKey:@"accessToken"] == nil) {
return;
}
//返回值只有一个uid,所以需要我们用另一个接口请求该uid对应用户的所有信息
NSString *api = @"https://api.weibo.com/2/users/show.json";
NSMutableDictionary *parametersDic = [NSMutableDictionary new];
[parametersDic setObject:resp.accessToken forKey:@"access_token"];
[parametersDic setObject:resp.userID forKey:@"uid"];
[[DMHttpRequestManager sharedManager] get:api withParameters:parametersDic success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if ([responseObject valueForKey:@"name"] == nil) {
return ;
} else {
//获取到数据,以通知的形式传值到登录界面
[[NSNotificationCenter defaultCenter] postNotificationName:@"WBLOGIN" object:responseObject];
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
}
- 为了接受到通知,需要在登录界面注册该通知,然后处理用户信息
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(weiboLogin:) name:@"WBLOGIN" object:nil];
代码到此结束,但是为什么登录界面还是没有更多权限显示呢???
你把账号对官微的关注取消了再试试!!!
我在这里纠结了好久,然后才Google到的答案,切记、切记!