文档章节

iOS 新浪微博快速集成

Youth_关旋
 Youth_关旋
发布于 2017/03/25 14:25
字数 1020
阅读 15
收藏 0

https://github.com/sinaweibosdk/weibo_ios_sdk  官方SDK下载地址

一、下载微博SDK

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

下载所需要的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 (strong, nonatomic) UIWindow *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及用户其他的基本信息,用这些信息就可以进行与自己的服务端进行交互来实现第三方登录了。

 

 

 

info.plist 添加:

<key>LSApplicationQueriesSchemes</key>

    <array>

        <string>sinaweibohd</string>

        <string>sinaweibo</string>

        <string>weibosdk</string>

        <string>weibosdk2.5</string>

    </array>

 

问题:

'-[UIView wbsdkCenterX]: unrecognized selector sent to instance 0x7fbc1a4344b0'

解决:

解决的办法:

Build Settings -> Linking -> Other Linker Flags 添加一个-all_load

 

 

© 著作权归作者所有

Youth_关旋
粉丝 2
博文 70
码字总数 23376
作品 0
枣庄
私信 提问
你见过最目瞪狗呆的bug是什么?

你见过最目瞪狗呆的bug是什么? 2018-05-28 14:01编辑: garace分类:程序人生来源:代码湾 bug网上注册刘伟楠 招聘信息: C++工程师 Cocos2d-x游戏客户端开发 iOS开发工程师 京东招聘iOS开发...

garace
2018/05/28
0
0
友盟社会化组件3.0

友盟社会化组件帮助移动应用分享到微博,微信,朋友圈,QQ好友等社交平台,已开发至3.0版,经过1.0~3.0的数十次迭代以及数以千计的合作APP上线,已趋于稳定与完善。 社会化组件:社会化组件...

gongweixin1990
2013/09/22
23
0
如何在应用中集成新浪微信等分享功能

友盟社会化组件帮助移动应用分享到微博,微信,朋友圈,QQ好友等社交平台,已开发至3.0版,经过1.0~3.0的数十次迭代以及数以千计的合作APP上线,已趋于稳定与完善。 社会化组件:社会化组件...

陈彧堃
2013/09/22
1K
1
强大的iOS开发必备工具

做iOS应用开发的,没有这些工具怎么行,强大的iOS开发必备工具!需要的速来拿! 1、ShareSDK 下载链接:http://sharesdk.cn/Download 软件首页:http://sharesdk.cn/ 分类:程序开发 功能强大...

拉偶有所依
2014/12/06
1K
10
Phonegap各类商业插件

【Phonegap商业插件服务】[目前插件已经支持到Phonegap最新版本] 1.phonegap-百度社会化分享-andriod插件 v2.0 【该插件支持微信分享和朋友圈分享,qq好友分享,微博分享】 2.phonegap百度社...

夜澜小雨
2015/07/15
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
5
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部