android.2.使用到的OAuth示例,持续更新下载

优采云 发布时间: 2021-07-18 20:12

  android.2.使用到的OAuth示例,持续更新下载

  简介

  最近不太忙,花了点时间学习Android应用开发。经过两周的学习,我在学习的同时也写了很多demo例子。您可以播放来自基本控件和基本*敏*感*词*效果的大量演示,并继续更新和下载。

  从本周开始,我打算以新浪微博的开放平台为实践,开发一个简单的Android客户端,尽可能完善功能。

  今天的内容

  

  上图是这个客户端的主界面。目前只拿到了前20条数据。您也可以单击刷新来刷新数据。功能比较简单。

  运行系统为android2.2.

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

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

  

  下载源代码:新浪微博2

  下载源代码后,将后缀改为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开启的oauth授权机制,当用户A想要展示B上的资源时,C会跳转到B的认证页面,用户在上面输入用户名和密码B的页面,通过后会询问用户是否为C应用开发相关资源。用户可以自定义C可以访问的资源,然后跳转回C应用。这样就不用担心用户名和密码,也不会因为同时存储多个资源而导致维护问题。

  您可以通过下面的网站了解更多关于oauth的具体技术细节。

  

  从上图可以看出,实际的流程分为消费者和提供者两部分。示例中的消费者为 c 应用,提供者为示例中的 B 服务提供者。

  使用OAuth进行认证授权的流程如下:

  用户在客户端访问网站,想要操作用户存储在服务提供者中的资源。客户端向服务提供者请求一个临时令牌。在服务提供者验证客户端的身份后,它会授予一个临时令牌。客户端获取临时令牌后,将用户引导至服务提供商的授权页面,请求用户授权。在这个过程中,临时令牌和客户端的回调连接被发送给服务提供者。用户在服务提供者的网页上输入用户名和密码,然后授权客户端访问所请求的资源。授权成功后,服务提供者将用户引导回客户端的网页。客户端根据临时令牌从服务提供者处获取访问令牌。服务提供者根据临时令牌和用户的授权情况向客户端授予访问令牌。客户端使用获取的访问令牌访问存储在服务提供者上的受保护资源。新浪微博上的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。

  同时,我每天都会在论坛,eoe的开发者门户。回答问题、解决问题、提问、发帖,简而言之就是锻炼自己,强迫自己锻炼基础和思维。

  论坛上有很多中文pdf教程,但大部分都是从android开发者中心的Dev Guide和Resources翻译过来的。所以我觉得如果英文不是很差的话,建议直接看上面两节,同时练习里面的例子,保证两周内会有很大的进步。

  参考资料

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

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线