新浪微博三方登陆(获取用户信息接口及描述)

来源:互联网 发布:production i.g 知乎 编辑:程序博客网 时间:2024/06/14 06:12

一、下载微博SDK

微博SDK的官方github : https://github.com/sinaweibosdk/weibo_ios_sdk

获取个人信息接口:http://open.weibo.com/wiki/2/users/show

下载所需要的SDK

二、集成SDK

下载后的SDK文件结构如下:

              

将这个文件夹拖拽到你所要添加的工程中。

三、引入依赖库及相关设置

如图点击添加依赖库



所需依赖库:

QuartzCore.framework,

ImageIO.framework,

SystemConfiguration.framework,

Security.framework,

CoreTelephony.framework,

CoreText.framework,

UIKit.framework,

Foundation.framework,

CoreGraphics.framework,

libz.dylib,

ibsqlite3.dylib

添加编译选项:

引入静态库后,需添加-ObjC编译选项,避免静态库中类加载不全引起崩溃。


四、创建应用

参考SDK包文件中文档进行应用的创建,这里要强调一下,申请应用时的AppleID和BundleID一定要与工程对应,否则运行会出错,无法进行授权。

五、设置工程回调URL Scheme


如图,设置URLSchemes为你申请的AppKey,

例如:wb204543436852

六、编写代码

1、在Appdelegate中导入头文件,声明遵循微博代理

[objc] view plain copy
  1. #import <UIKit/UIKit.h>  
  2. #import "WeiboSDK.h"  
  3.   
  4. #define kAppKey         @"这里是你的AppKey"  
  5. #define kRedirectURI    @"这里是你的回调网址"  
  6.   
  7. @interface AppDelegate : UIResponder <UIApplicationDelegate, WeiboSDKDelegate>  
  8.   
  9. @property (strongnonatomicUIWindow *window;  
  10.   
  11. @end  
2、在Appdelegate中注册微博SDK

[objc] view plain copy
  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
  2.     // Override point for customization after application launch.  
  3.       
  4.     [WeiboSDK enableDebugMode:YES];  
  5.     [WeiboSDK registerApp:@"这里填写你申请的Appkey"];  
  6.       
  7.     return YES;  
  8. }  

3、重写AppDelegate中的handleOpenURL和openURL方法

[objc] view plain copy
  1. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation  
  2. {  
  3.     return [WeiboSDK handleOpenURL:url delegate:self];  
  4. }  
  5.   
  6. - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url  
  7. {  
  8.     return [WeiboSDK handleOpenURL:url delegate:self];  
  9. }  

4、在你所要添加登录方法的controller中添加以下登录方法,该方法会跳转微博授权

[objc] view plain copy
  1. - (void)weiboLoginButtonPressed  
  2. {  
  3.     NSLog(@"%s",__func__);  
  4.       
  5.     WBAuthorizeRequest *request = [WBAuthorizeRequest request];  
  6.     request.redirectURI = kRedirectURI;  
  7.     request.scope = @"all";  
  8.     request.userInfo = @{@"SSO_From"@"SendMessageToWeiboViewController",  
  9.                          @"Other_Info_1": [NSNumber numberWithInt:123],  
  10.                          @"Other_Info_2": @[@"obj1"@"obj2"],  
  11.                          @"Other_Info_3": @{@"key1"@"obj1"@"key2"@"obj2"}};  
  12.     [WeiboSDK sendRequest:request];  
  13. }  


5、在Appdelegate中实现微博的回调方法,获取回调信息

这里说明一下,下面的方法实现在Appdelegate中,当在你所需登录的controller调用的登录方法后会跳转微博进行授权,授权信息会以回调的方式调用Appdelegate中的下面方法,从该方法中我们可以得出授权所得到的userId(用户唯一标识),和accessToken。拿到这两个参数后可以调用微博接口进行一系列的获取个人信息、转发、评论、发表微博等操作,这里我们只需要获取用户的个人信息就可以了。

[objc] view plain copy
  1. //微博回调  
  2. - (void)didReceiveWeiboResponse:(WBBaseResponse *)response  
  3. {  
  4.     if ([response isKindOfClass:WBAuthorizeResponse.class])  
  5.     {  
  6.         NSString *userId = [(WBAuthorizeResponse *)response userID];  
  7.         NSString *accessToken = [(WBAuthorizeResponse *)response accessToken];  
  8.           
  9.         NSLog(@"userId %@",userId);  
  10.         NSLog(@"accessToken %@",accessToken);  
  11.           
  12.         NSDictionary *notification = @{  
  13.                                        @"userId" : userId,  
  14.                                        @"accessToken" : accessToken  
  15.                                        };  
  16.           
  17.         [[NSNotificationCenter defaultCenter] postNotificationName:@"weiboDidLoginNotification"   
  18.                                               object:self userInfo:notification];  
  19.     }  
  20. }  

当获取到反馈的userID和accessToken后,这里我使用了通知Notification的方式来调用刚才申请第三方登录的controller中的相应的方法。记得使用通知的时候在dealloc方法中进行通知的删除。

6、在实现登录的controller中的相应的通知方法中实现以下功能

用刚刚在微博的回调方法中得到的userId和accessToken来请求微博的接口以获取用户的个人信息


[objc] view plain copy
  1. https://api.weibo.com/2/users/show.json  

[objc] view plain copy
  1. #pragma mark - Weibo Methods  
  2.   
  3. - (void)weiboDidLoginNotification:(NSNotification *)notification  
  4. {  
  5.     NSLog(@"%s",__func__);  
  6.       
  7.     NSDictionary *userInfo = [notification userInfo];  
  8.     NSString *accessToken = [userInfo objectForKey:@"accessToken"];  
  9.     NSString *uid = [userInfo objectForKey:@"userId"];  
  10.       
  11.     NSLog(@"userInfo %@",userInfo);  
  12.       
  13.     [self getWeiboUserInfoWithAccessToken:accessToken uid:uid];  
  14. }  
  15.   
  16. - (void)getWeiboUserInfoWithAccessToken:(NSString *)accessToken uid:(NSString *)uid  
  17. {  
  18.     NSString *url =[NSString stringWithFormat:  
  19.     @"https://api.weibo.com/2/users/show.json?access_token=%@&uid=%@",accessToken,uid];  
  20.       
  21.     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{  
  22.         NSURL *zoneUrl = [NSURL URLWithString:url];  
  23.         NSString *zoneStr = [NSString stringWithContentsOfURL:zoneUrl   
  24.                                                      encoding:NSUTF8StringEncoding error:nil];  
  25.         NSData *data = [zoneStr dataUsingEncoding:NSUTF8StringEncoding];  
  26.         dispatch_async(dispatch_get_main_queue(), ^{  
  27.             if (data)  
  28.             {  
  29.                 NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data   
  30.                                                                     options:NSJSONReadingMutableContainers error:nil];  
  31.                   
  32.                 NSLog(@"%@",dic);  
  33.                   
  34.                 NSString *openId = [dic objectForKey:@"id"];  
  35.                 NSString *memNickName = [dic objectForKey:@"name"];  
  36.                 NSString *memSex = [[dic objectForKey:@"gender"] isEqualToString:@"m"] ? @"1" : @"0";  
  37.                   
  38.                 [self loginWithOpenId:openId memNickName:memNickName memSex:memSex];  
  39.             }  
  40.         });  
  41.           
  42.     });  
  43. }  

至此,已经获取到了用户微博的UserId及用户其他的基本信息,用这些信息就可以进行与自己的服务端进行交互来实现第三方登录了。
0 0