新浪微博开放平台为第三方应用提供了简便的合作模式,满足了手机用户和平板电脑用户随时随地分享信息的需求。通过调用平台的api即可实现很多微博上的功能。

本篇主要目的是记录新浪微博移动SDK iOS版本的在iOS5下的嵌入和使用。

1、申请一个新浪微博的移动应用 。

申请地址:http://open.weibo.com/development,申请后得到App key 和 App Secret

2、下载iOS_sdk

下载地址:http://open.weibo.com/wiki/SDK#iOS_SDK  ,下载第一个就ok了。

3、新建一个项目Sina_weibo,选择single View app。而且使用5.0后的ARC特性 。 导入解压后的sdk

导入SDK

4、适配SDK在arc环境下运行

这时候运行程序,你会发现很多关于ARC的错误,因为sdk里是没有使用arc的。这时候如果想sdk的文件不参与arc方式的编译,那就需要做下设置,在Build Phases里添加“-fno-objc-arc”标示

双击需要标识的文件,输入-fno-objc-arc。

这样weibo SDK的文件就不会以arc的方式编译了。

5、 在自己的工程里面增加Security.framework。SDK需要使用Security.framework将OAuth认证以后的token放到keyChain里面从而增加整个工程的安全性。

这时候运行,程序就编译运行正常了

6、其他的和SDK里的Demo一样了

登录调用

[weiBoEnginelogIn];

注销调用

[weiBoEnginelogOut];

发微博:

可以调用SDK默认的界面发送:

WBSendView *sendView = [[WBSendViewalloc] initWithAppKey:appKeyappSecret:appSecrettext:@"test"image:[UIImageimageNamed:@"bg.png"]];

[sendView setDelegate:self];

[sendView show:YES];

对应的发送微博的api是:statuses/upload 发送微博并上传图片。如果在微博上显示地图,那就发送经纬度参数,多加上

lat false float 纬度,有效范围:-90.0到+90.0,+表示北纬,默认为0.0。
long false float 经度,有效范围:-180.0到+180.0,+表示东经,默认为0.0。

7、调用自定义api

6步骤里调用的是sdk里封装好的,那微博这么api和功能,怎么调用呢?

我们试着获取个人信息

  1. NSMutableDictionary *params = [NSMutableDictionary dictionaryWithCapacity:2];
  2. [params setObject:[engine accessToken]forKey:@"access_token"];
  3. [params setObject:[engine userID]forKey:@"uid"];
  4. NSLog(@"params:%@", params);
  5. [engine loadRequestWithMethodName:@"users/show.json"
  6. httpMethod:@"GET"
  7. params:params
  8. postDataType:kWBRequestPostDataTypeNone
  9. httpHeaderFields:nil];

params的参数是必须的。

返回的数据参考接口http://open.weibo.com/wiki/2/users/show

这样可以获取微博自己的昵称等信息。

微博所有api文档都在这个页面http://open.weibo.com/wiki/API%E6%96%87%E6%A1%A3_V2,使用的方法和例子都有。

需要什么用什么接口,把loadRequestWithMethodName 改变成自己需要的接口,params参数改成需要的参数,就可以了。

有的接口是不需要params的,比如

statuses/friends_timeline.json获取关注人的微博,这里params可以是nil.

PS:本篇记录用的是Oauth认证,xauth认证需要审核资格才能使用的。

8、项目源码下载地址:http://download.csdn.net/detail/totogo2010/4633077

继上篇 iOS学习之iOS5.0以上 使用新浪微博开放平台OAuth

过后,新浪微博授权弹出的网页又有调整,中间还有过瘫痪情况。如果按上篇做出来的授权页面就成这样了:

第一:网页页面变大了,

第二:没有了取消按钮。

 

根据这个情况在sina weibo SDK里做了写调整

调整:增加一个关闭按钮,弹出窗口大小。

在WBAuthorizeWebView.m文件的方法:bounceOutAnimationStopped里添加按钮:

  1. UIButton *closeButton = [UIButton buttonWithType:UIButtonTypeCustom];
  2. [closeButton setFrame:CGRectMake(280, 430, 60, 60)];
  3. [closeButton setImageEdgeInsets:UIEdgeInsetsMake(3, 0, 0, 0)];
  4. [closeButton setImage:[UIImage imageNamed:@"close"] forState:UIControlStateNormal];
  5. [closeButton addTarget:self action:@selector(hideAndCleanUp) forControlEvents:UIControlEventTouchUpInside];
  6. [self addSubview:closeButton];

close.png图片sdk里自带就有。hideAndCleanUp方法就是把窗口移除。hideAndCleanUp方法原来就有。运行效果:

看右下角有个关闭按钮,为什么放在右下角呢,因为右上角有个注册按钮,容易被点到。一会把网页窗口最大化了就能看到了。

扩大窗口

在WBAuthorizeWebView.m文件的方法- (void)sizeToFitOrientation:(UIInterfaceOrientation)orientation 修改如下:

上面的尺寸是横屏的时候的,我修改了竖屏时的窗口的大小。

  1. - (void)sizeToFitOrientation:(UIInterfaceOrientation)orientation
  2. {
  3. [self setTransform:CGAffineTransformIdentity];
  4. if (UIInterfaceOrientationIsLandscape(orientation))
  5. {
  6. [self setFrame:CGRectMake(0, 0, 480, 320)];
  7. [panelView setFrame:CGRectMake(10, 30, 460, 280)];
  8. [containerView setFrame:CGRectMake(10, 10, 440, 260)];
  9. [webView setFrame:CGRectMake(0, 0, 440, 260)];
  10. [indicatorView setCenter:CGPointMake(240, 160)];
  11. }
  12. else
  13. {
  14. [self setFrame:CGRectMake(0, 5, 320, 470)];
  15. [panelView setFrame:CGRectMake(0, 5, 320, 470)];
  16. [containerView setFrame:CGRectMake(0, 5, 320, 460)];
  17. [webView setFrame:CGRectMake(0, 0, 320, 460)];
  18. [indicatorView setCenter:CGPointMake(160, 240)];
  19. }
  20. [self setCenter:CGPointMake(160, 240)];
  21. [self setTransform:[self transformForOrientation:orientation]];
  22. previousOrientation = orientation;
  23. }

运行效果:

这个状态差不多就可以了。

还有在调用WeiBoEngine 的Logout 登出无效的情况。修改如下:

在WBAuthorize.m文件,把startAuthorize函数修改如下:

  1. NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:appKey, @"client_id",
  2. @"code", @"response_type",
  3. redirectURI, @"redirect_uri",
  4. @"mobile", @"display",
  5. @"true",@"forcelogin", nil];

就是在 params里添加@”true”,@”forcelogin”。

以上是使用新浪微博sdk开发遇到的问题和解决的一些方法。

修改过的项目代码:http://download.csdn.net/detail/totogo2010/4928029

来源:http://blog.csdn.net/totogo2010/article/details/8435174

iOS5.0以上使用新浪微博开放平台OAuth 续(及解决登录无效问题)的更多相关文章

  1. 新浪微博开放平台OAuth授权解决方案(含代码)

    前几日一位朋友项目中需要使用新浪微博的接口,故和这位朋友一同研究了新浪微博开放平台上面所提供的资料,首先要使用这些接口是需要用户登录并且授权的,新浪微博开放平台其实是提供两种授权方式的,第一种是:OA ...

  2. Oauth2认证以及新浪微博开放平台应用

    一.OAuth2.0概述 大部分API的访问如发表微博.获取私信,关注都需要用户身份,目前新浪微博开放平台用户身份鉴权有OAuth2.0和Basic Auth(仅用于应用所属开发者调试接口),新版接口 ...

  3. 新浪微博开放平台开发-android客户端(1)【转】

    http://www.cnblogs.com/virusswb/archive/2011/08/05/2128941.html 最近不是太忙,花了一些时间学习android的应用开发.经过两个星期的学 ...

  4. DevStore开发人员服务有奖征文:小谈新浪微博开放平台

    DevStore开发人员服务有奖征文:小谈新浪微博开放平台 笔者接入新浪微博开发平台也有一段时间了,对整个平台的接入也算比較熟悉,新浪提供了统一的API接口,能够让开发人员更方便的使用API来实现自己 ...

  5. IOS基于新浪微博开放平台微博APP

    1.基于新浪微博开放平台APP源码 2.gitHub源代码下载地址 https://github.com/whzhaochao/SinaWeiBoOpen 3.用到的第三放开源库 3.1  RTLab ...

  6. 微信开放平台PC端扫码登录功能个人总结

    最近公司给我安排一个微信登录的功能,需求是这样的: 1.登录授权 点击二维码图标后,登录界面切换为如下样式(二维码),微信扫描二维码并授权,即可成功登录:    若当前账号未绑定微信账号,扫描后提示“ ...

  7. 新浪微博开放平台之OAuth2.0认证

    1.先到开放平台创建一个移动应用.获得key和secret,接着到"应用信息"里面填写授权回调页的网址,该网址能够随意,可是必须是能訪问的. 2.通过新浪提供的api:https: ...

  8. apigw鉴权分析(1-4)新浪微博开放平台 - 鉴权分析

    一.访问入口 http://open.weibo.com/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E 微博开放接口的调用,如 ...

  9. 新浪微博开放平台账号申请(基于dcloud开发)

    注意事项: 1.新浪微博不仅需要appkey和appsecret,而且还需要回调的url,这个链接是可以随便写的,但是需要和在开放平台申请的一致. 2. Android签名包信息部分 (1.)首先安卓 ...

随机推荐

  1. 通过HttpWebRequest请求与HttpWebResponse响应方式发布接口与访问接口

    一.API接口的编码 1.首页的页面代码: protected void Page_Load(object sender, EventArgs e) { /* * 请求路径:http://xxxx/i ...

  2. dsfgsdfg

    两融余额止跌回升,金融股回落飘绿,千股涨停续演,沪指收复4000点未果涨逾2% 相关报道 [今日收盘]灾后重建激情抢筹 大盘两日反弹500点 [今日收盘]沪指涨近6%重回3700点 未停牌个股九成涨停 ...

  3. JavaScript中本地对象、内置对象和宿主对象

    链接:http://www.cnblogs.com/luckyXcc/p/5892896.html(Milk.╮的博客园提供) 其中内置对象只有两种:ECMA-262 只定义了两个内置对象,即 Glo ...

  4. Word Break II

    Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each ...

  5. ajax请求cookie有效性问题验证

    与人讨论时遇到一个问题,就是: 浏览器中后台发起的一个异步ajax请求,服务器做响应时,附带了cookie信息,那么后续对同域名下其他页面请求时,该cookie是否有效,会一并随请求提交到web服务器 ...

  6. Java控制台中输入中文输出乱码的解决办法

    Run---Run Configurations---Common---Encoding---Other---GBK Run Configurations里的Common中将编码方式改成GBK就正常了

  7. Java 第十周学习总结

    20145113<Java程序设计>第十周学习总结 基础知识 1.网络通讯的方式主要有两种 TCP(传输控制协议)方式:需要建立专用的虚拟连接以及确认传输是否正确 UDP(用户数据报协议) ...

  8. Linux LVM硬盘管理及LVM扩容

    LVM磁盘管理 一.LVM简介... 1 二. LVM基本术语... 2 三. 安装LVM... 3 四. 创建和管理LVM... 4 2. 创建PV.. 6 3. 创建VG.. 7 4. 创建LV. ...

  9. 启用Servlet 3.0新特性——注解支持

    Servlet 3.0版本新增注解支持,可是在实际使用中,添加的注解总是不起作用.经过检查,原来是“web.xml”文件的顶级标签“<web-app/>”中的一个叫做“metadata-c ...

  10. UVA 10815

    题意:输入文本,把不同的单词按照字典序排列. /* tolower 功 能: 把字符转换成小写字母,非字母字符不做出处理 头文件 目前在头文件iostream中也可以使用 isalpha 一种函数:判 ...