引言

最近不是太忙,花了一些时间学习android的应用开发。经过两个星期的学习,学习的同时还写了很多的demo示例,可以从基本控件及基本动画效果等示例demo集合大放送,持续更新下载。

从这个星期开始,准备拿新浪微博开放平台做个实践,开发一个功能简单的android客户端,会尽可能的完善功能。

今天的内容

上图是这个客户端的主要界面,目前只是获取了前20条数据,还可以通过refresh点击刷新数据。功能还比较简单。

运行的系统是android2.2.

使用到的技术点包括ListView,自定义ListAdapter,多线程相关的Message,Handler,验证相关的OAuth,用户图片的异步加载。

新浪微博的验证使用的是signpost的OAuth组件,没有使用微博的SDK。

源码下载: SinaWeibo2

源码下载之后,将后缀改为rar,使用压缩软件解压即可。

关于OAuth验证

OAuth是当下流行的授权方案,twitter,facebook,google等大型网站的开放平台都支持了oauth验证模式,国内的新浪微博、腾讯微博、163微博的开放平台也相继支持了这种验证模式。

引用维基百科的相关说明

“oauth是一个开放的标准,允许用户让第三方应用访问该用户放在某一个网站的私密资源,而无需将用户名和密码传递给第三方应用。oauth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。”

举例来说就是:

用户A在服务提供者B上存放了一些资源,B支持oauth授权模式,A在B上是注册用户,有用户名和密码,使用用户名和密码登陆B就可以查看自己的资源。假设有一个应用C,用户A在使用C的时候需要自己在B上存放的资源。有两种方法来实现C上显示自己在B上的资源。

  • 一种是在C上输入自己在B的用户名和密码,让C帮自己登陆,获取资源,然后显示在C上,但是这么做太不放心了,C是一个什么样的应用,用户A不放心把B的用户名和密码交给C。
  • 第二种是在C上也存放一份相关资源,这样C就直接显示用户A在C上的资源就可以了。这样的话,用户的维护量就会很大,资源的同步更新很让人头疼的。

这时候C就可以使用B开放的oauth授权机制了,用户A在想要显示B上的资源的时候,C会跳转到B的验证页面,用户在B的页面输入用户名和密码,通过之后,会询问用户是否开发相关的资源给C应用,用户可以自定义C可以访问的资源,然后再跳转回C应用。这样既不用担心用户名和密码的问题,又不用同时存放多份资源造成的维护问题了。

大家可以通过下面的网站详细了解oauth的具体技术细节。

http://oauth.net/

http://code.google.com/p/oauth-signpost/

从上图我们可以看出,真个过程分为consumer和provider两个部分。consumer也就是例子中的c应用,provider就是例子中的B服务提供者。

使用OAuth进行认证和授权的过程如下所示:

  1. 用户访问客户端的网站,想操作用户存放在服务提供方的资源。
  2. 客户端服务提供方请求一个临时令牌。
  3. 服务提供方验证客户端的身份后,授予一个临时令牌。
  4. 客户端获得临时令牌后,将用户引导至服务提供方的授权页面请求用户授权。在这个过程中将临时令牌和客户端的回调连接发送给服务提供方
  5. 用户服务提供方的网页上输入用户名和密码,然后授权该客户端访问所请求的资源。
  6. 授权成功后,服务提供方引导用户返回客户端的网页。
  7. 客户端根据临时令牌从服务提供方那里获取访问令牌。
  8. 服务提供方根据临时令牌和用户的授权情况授予客户端访问令牌。
  9. 客户端使用获取的访问令牌访问存放在服务提供方上的受保护的资源。

新浪微博的oauth

借用一张新浪微博的oauth验证流程图。

我们再新浪微博开放平台新建应用的时候都会分配给新建应用一个key和secret,也就是consumerKey和consumerSecret。通过这两个东西,我们去request_token,然后将用户重定向到新浪微博平台的授权页面,授权之后,根据callback_url跳转会我们应用的一个地址,我们再次使用request_token获取access_token,在后面就需要通过access token来访问开放平台提供的需要验证的接口了。

当然了,那些不需要验证就可以访问的接口,就直接使用key就可以访问了,详情可以参考开放平台提供的API文档。

腾讯微博和163微博的开放平台也是类似的原理和实现。

package com.sinaweibo2;
import oauth.signpost.OAuthConsumer;
import oauth.signpost.OAuthProvider;
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;
import oauth.signpost.commonshttp.CommonsHttpOAuthProvider;
import oauth.signpost.exception.OAuthCommunicationException;
import oauth.signpost.exception.OAuthExpectationFailedException;
import oauth.signpost.exception.OAuthMessageSignerException;
import oauth.signpost.exception.OAuthNotAuthorizedException;
public class OAuth {
private OAuthConsumer mConsumer;
private OAuthProvider mProvider;
public static final String CALLBACK_URL = "sinaweibo2://WeiboListActivity";
public static final String CONSUMER_KEY = "1849239616";
public static final String CONSUMER_SECRET = "b2137bf782bf6cae004b8a8394d5d5d6";
public static final String REQUEST_TOKEN_URL = "http://api.t.sina.com.cn/oauth/request_token";
public static final String ACCESS_TOKEN_URL = "http://api.t.sina.com.cn/oauth/access_token";
public static final String AUTHORIZE_URL = "http://api.t.sina.com.cn/oauth/authorize";
public OAuth() {
}
public String RetrieveAuthUrl() throws OAuthMessageSignerException,
OAuthNotAuthorizedException, OAuthExpectationFailedException,
OAuthCommunicationException {
mConsumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
mProvider = new CommonsHttpOAuthProvider(REQUEST_TOKEN_URL,
ACCESS_TOKEN_URL, AUTHORIZE_URL);
String authUrl= mProvider.retrieveRequestToken(mConsumer, CALLBACK_URL);
return authUrl;
}
public void RetrieveAccessToken(String verifier)
throws OAuthMessageSignerException, OAuthNotAuthorizedException,
OAuthExpectationFailedException, OAuthCommunicationException {
mProvider.setOAuth10a(true);
mProvider.retrieveAccessToken(mConsumer, verifier);
OAuthUser.USER_ID=mProvider.getResponseParameters().getFirst("user_id");
OAuthUser.ACCESS_TOKEN = mConsumer.getToken();
OAuthUser.ACCESS_TOKEN_SECRET = mConsumer.getTokenSecret();
}
}

更多功能

接下来,有两个主要的功能会完善,一个是分页浏览,一个是发表微博。

往后,可能会支持图片发表等实用功能。

还有就是UI的美化,性能的优化。

总结

学习的过程中看过两本书,Pro.Android.2.pdf和Professional.Android.2.Application.Development.(Wrox,.2010,.0470565527).pdf,都是很不错的入门书籍。书我没有全看完,看完大部分吧,边看边写demo。

同时每天泡论坛http://www.eoeandroid.com/forum.php,eoe的开发者门户。回答问题,解决问题,提出问题,发帖子,总之就是锻炼自己,强迫自己锻炼基础和思考。

在论坛上,有很多的中文pdf教程,但是发现大多都是翻译android developer center的Dev Guide和Resources中的内容。所以觉得,如果英文不是很差,建议直接阅读上面的两个板块,同时练习其中的示例,保证两个星期,你会有很大的进步。

参考资料

http://developer.android.com/index.html
http://www.cnblogs.com/hll2008/archive/2011/01/03/1923674.html
http://open.weibo.com/wiki/Oauth
http://blog.csdn.net/lihenair/article/details/6010026
http://www.cnblogs.com/liangxing/archive/2010/10/19/1855938.html
http://code.google.com/p/oauth-signpost/wiki/GettingStarted

Technorati 标签: android,开放平台,oauth,新浪微博

新浪微博开放平台开发-android客户端(1)相关推荐

  1. 新浪微博开放平台开发-android客户端(2)

    引言 最近不是太忙,花了一些时间学习android的应用开发.经过两个星期的学习,学习的同时还写了很多的demo示例,可以从基本控件及基本动画效果等示例demo集合大放送,持续更新下载. 从这个星期开 ...

  2. 新浪微博开放平台开发-android客户端(3)

    引言 最近不是太忙,花了一些时间学习android的应用开发.经过两个星期的学习,学习的同时还写了很多的demo示例,可以从基本控件及基本动画效果等示例demo集合大放送,持续更新下载. 从这个星期开 ...

  3. 新浪微博开放平台开发总结

    经过快一个星期的倒腾,终于搞定了新浪微博开放平台的登录.绑定.发微博的功能.记录一下. 开发前的准备: 1. 申请新浪微博开放平台账号 http://open.weibo.com/ 2. 接入网站应用 ...

  4. 新浪微博开放平台开发

    详情参考  http://open.weibo.com/wiki/index.php/Weibo-JS_V2

  5. 微信开放平台开发第三方授权登陆(三):Android客户端

    微信开放平台开发系列文章: 微信开放平台开发第三方授权登陆(一):开发前期准备 微信开放平台开发第三方授权登陆(二):PC网页端 微信开放平台开发第三方授权登陆(三):Android客户端 微信开放平 ...

  6. PHP+新浪微博开放平台+新浪云平台(SAE)开发微博应用基础

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! PHP+ ...

  7. PHP+新浪微博开放平台+新浪云平台(SAE)开发微博应用——进一步学习的走向和有用的资源

    PHP+新浪微博开放平台+新浪云平台(SAE) --新浪微博应用开发的一个解决方案 一.PHP+新浪微博开放平台+新浪云平台(SAE)方案的基础 二.建立微博应用的过程 三.PHP SDK中Demo程 ...

  8. PHP+新浪微博开放平台+新浪云平台(SAE)开发微博应用——建立微博应用的过程

    PHP+新浪微博开放平台+新浪云平台(SAE) --新浪微博应用开发的一个解决方案 一.PHP+新浪微博开放平台+新浪云平台(SAE)方案的基础 二.建立微博应用的过程 三.PHP SDK中Demo程 ...

  9. PHP+新浪微博开放平台+新浪云平台(SAE)开发微博应用——PHP SDK中Demo程序简析

    PHP+新浪微博开放平台+新浪云平台(SAE) --新浪微博应用开发的一个解决方案 一.PHP+新浪微博开放平台+新浪云平台(SAE)方案的基础 二.建立微博应用的过程 三.PHP SDK中Demo程 ...

  10. PHP+新浪微博开放平台+新浪云平台(SAE)开发微博应用——必须交待的几个问题

    PHP+新浪微博开放平台+新浪云平台(SAE) --新浪微博应用开发的一个解决方案 一.PHP+新浪微博开放平台+新浪云平台(SAE)方案的基础 二.建立微博应用的过程 三.PHP SDK中Demo程 ...

最新文章

  1. SQL_Case When 嵌套
  2. 网站推广专员浅析网站建设实用技巧助力网站推广优化
  3. 更改Firefox为中文界面(Ubuntu系统)
  4. 机器学习导论(张志华):渐近性质
  5. android抽奖动画,Android App中实现简单的刮刮卡抽奖效果的实例详解
  6. DM9000调试记录
  7. System.Runtime.InteropServices浅见
  8. 走入PHP-类与对象
  9. 百度分享自定义内容和图片
  10. python-成都Python课程
  11. GARFIELD@02-13-2005
  12. ArcMAP 分类统计工具
  13. Ragel State Machine Compiler 的速度测试
  14. 思考-IT行业设备分销代理商的运营模式
  15. OOP Class具体解释
  16. 运维工程师使用的运维平台和工具表
  17. 沟通的艺术II:看入人里 之知觉
  18. 游戏中的语音聊天方案
  19. 太赞了,使用应用魔方 AppCube,我没有写一行代码就开发出了一款投票微信小程序
  20. 总结一:Oracle 数据库命令总结

热门文章

  1. java微信授权登录回调地址,微信开发者工具,注册微信公共平台
  2. RAID磁盘阵列详解
  3. iPhone 记录之 点与像素
  4. easyx游戏编程:魔塔(c++语言开发)源码
  5. 软件易用性测试怎么做?
  6. 服务器主动向客户端发送信息机制
  7. 2013 B 碎纸片拼接与复原
  8. 科技论文写作个人心得
  9. 微信小程序框架介绍以及项目目录结构
  10. usb key 开发(一)