最近学习Android开发,照着视频开发新浪微博,但是视频里的介绍的是OAuth1.0的授权方式,试了半天发现用不了。

原来现在一般没审核的用户只能使用OAuth2.0了,视频教学里的方法已经过时了。于是只好自己研究如何进行微博认证。

OAuth2.0的授权过程

说白了,就是请求获取Grant Code→使用Grant Code申请Access Token→以后就使用这个Access Token获取微博的服务,这比OAuth1.0的授权方式简化了不少。

如果不使用别的第三方OAuth认证的库或者自己开发认证方法的话,初入门可以直接使用新浪提供的SDK,简单方便,而且说明详细。

http://open.weibo.com/wiki/SDK#Android_SDK这个地址下载新浪的sdk库weibosdkcore.jar

然后倒入到Android的项目中

将官方的提供SDK JAR包(weibosdkcore.jar)放到工程的libs目录下
添加JAR包:工程→右键→properties→java build path→libraries→add external jar

新浪的这个SDK支持三种方法的认证,SSO认证、Web认证、Code认证。这个Code认证就是很多教学视频里使用的根据APP_KEY和APP_SECRET获取Token和Token_secret的方法。另外两个方法自己研究吧。

使用新浪的SDK完成认证就是两句话

Scope说明可以看http://open.weibo.com/wiki/Scope#scope.E8.AF.B4.E6.98.8E

 WeiboAuth wa = new WeiboAuth(OAuthActivity.this, APP_KEY, REDIRECT_URL, "all");//最后一个参数是Scope
wa.authorize(new AuthListener(),WeiboAuth.OBTAIN_AUTH_CODE);//这个AuthListener是要自己实现的

获取Grant Code

AuthListener是继承WeiboAuthListener的一个实现,当输入完成账号密码,完成授权后就会回调这个实现。

public class AuthListener implements WeiboAuthListener {
/** 封装了 "access_token","expires_in","refresh_token",并提供了他们的管理功能 */
private Oauth2AccessToken mAccessToken;
@Override
public void onCancel() {
Log.i("AuthListener","----auth canceled");
} /**
* 微博认证授权回调类。
* 1. SSO 授权时,需要在 {@link #onActivityResult} 中调用 {@link SsoHandler#authorizeCallBack} 后,
* 该回调才会被执行。
* 2. 非 SSO 授权时,当授权结束后,该回调就会被执行。
* 当授权成功后,请保存该 access_token、expires_in、uid 等信息到 SharedPreferences 中。
*/
@Override
public void onComplete(Bundle arg0) {
// 从 Bundle 中解析 Code
if (null == arg0) {
Log.e("AuthListener", "obtain auth code fail!");
return;
} String code = arg0.getString("code");
mCode = code;
if (TextUtils.isEmpty(code)) {
Log.e("AuthListener", "obtain auth code fail!");
return;
} //进行授权的下一步
fetchTokenAsync(mCode, APP_SECRET);//这是异步获取Token
} @Override
public void onWeiboException(WeiboException arg0){
Log.i("AuthListener","----"+arg0.getMessage());
} }

获取Access Token

获取Token,如果成功,那么授权就完成了。

/**
* 异步获取 Token。
*
* @param authCode 授权 Code,该 Code 是一次性的,只能被获取一次 Token
* @param appSecret 应用程序的 APP_SECRET,请务必妥善保管好自己的 APP_SECRET,
* 不要直接暴露在程序中,此处仅作为一个DEMO来演示。
*/
public void fetchTokenAsync(String authCode, String appSecret) { WeiboParameters requestParams = new WeiboParameters();
requestParams.put("client_id", APP_KEY);
requestParams.put("client_secret", appSecret);
requestParams.put("grant_type", "authorization_code");
requestParams.put("code", authCode);
requestParams.put("redirect_uri", REDIRECT_URL); // 异步请求,获取 Token
AsyncWeiboRunner.requestAsync(ACCESS_TOKEN_URL, requestParams, "POST", new RequestListener() {
@Override
public void onComplete(String response) {
Log.d(TAG, "Response: " + response); // 获取 Token 成功,Oauth2AccessToken是一个封装了"access_token","expires_in","refresh_token"的类
Oauth2AccessToken token = Oauth2AccessToken.parseAccessToken(response);
if (token != null && token.isSessionValid()) {
Log.d(TAG, "Success! " + token.toString()); mAccessToken = token; Toast.makeText(OAuthActivity.this,
"授权成功 Token="+token.getToken(), Toast.LENGTH_SHORT).show();
} else {
Log.d(TAG, "Failed to receive access token");
}
} @Override
public void onWeiboException(WeiboException e) {
Log.e(TAG, "onWeiboException: " + e.getMessage());
Toast.makeText(OAuthActivity.this,
"授权异常" + e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}

新浪微博OAuth2.0的用法的更多相关文章

  1. 工作笔记—新浪微博Oauth2.0授权 获取Access Token (java)

    java发送新浪微博,一下博客从注册到发布第一条微博很详细 利用java语言在eclipse下实现在新浪微博开发平台发微博:http://blog.csdn.net/michellehsiao/art ...

  2. 新浪微博Oauth2.0授权认证及SDK、API的使用(Android)

    ---------------------------------------------------------------------------------------------- [版权申明 ...

  3. 新浪微博 oauth2.0 redirect_uri_mismatch

    新浪微博开放平台出来很久了,现在才开始研究,貌似有点晚了.... 第一次折腾,总是出现这样那样的问题,即使照着别人成功的例子也是一样,这不,开始运行的时候,运行下面的例子,总是报error:redir ...

  4. 新浪微博Oauth2.0授权 获取Access Token

    新浪微博开放平台提供了丰富的API接口,利用这些接口,开发者能够开发出独具特色的微博应用.但是,大部分接口都需要用户授权给应用,应用利用授权得到的Access Token来调用相应的接口来获取内容. ...

  5. iOS新浪微博OAuth2.0认证代码

    #import "ViewController.h" #import "AFNetworking.h" @interface ViewController () ...

  6. OAuth2.0 微博登陆网站功能的实现(一)获取用户授权及令牌 Access Token

    在登陆一些网站的时候,可以选择登陆方式为第三方登陆,例如微博登陆,以爱奇艺为例,进入首页,点击 ”登陆“,会弹出登录框: 除了本站登陆外,还可以选择其他第三方登陆,比如微博登陆.QQ 登陆.微信登陆等 ...

  7. OAuth2.0 错误码

    http://open.taobao.com/doc/detail.htm?id=118 OAuth2.0 错误码 新浪微博OAuth2.0实现中,授权服务器在接收到验证授权请求时,会按照OAuth2 ...

  8. 新浪微博 使用OAuth2.0调用API

    # -*- coding: cp936 -*- #python 2.7.10 #xiaodeng #新浪微博 使用OAuth2.0调用API #微博开放接口的调用,都需要获取用户的身份认证.目前微博开 ...

  9. 新浪微博API Oauth2.0 认证

    原文链接: http://rsj217.diandian.com/post/2013-04-17/40050093587 本意是在注销账号前保留之前的一些数据.决定用python 爬取收藏.可是未登录 ...

随机推荐

  1. 幾個步驟輕鬆在windows操作系統上搭建GO語言開發環境

    1. 首先下载官方GO語言安装包: https://code.google.com/p/go/wiki/Downloads?tm=2 2. 设置 GOPATH 在任意磁盘根目录新建一个文件夹,名字随意 ...

  2. DataGridView很详细的用法(转载)

    一.DataGridView 取得或者修改当前单元格的内容: 当前单元格指的是 DataGridView 焦点所在的单元格,它可以通过 DataGridView 对象的 CurrentCell 属性取 ...

  3. win8 中使用第三方无线网卡出现无线连接受限解决办法

    无线路由  无线网络模式基本设置 模式改为 11bg mixed , 然后在 win8 的设备管理器中找到无线路由 不知道 win8 有些地方兼容性做的不是很到位,我的 xp不做任何配置可以正常使用.

  4. django关闭debug后,静态文件的处理

    Django框架仅在开发模式下提供静态文件服务.当我开启DEBUG模式时,Django内置的服务器是提供静态文件的服务的,所以css等文件访问都没有问题,但是关闭DEBUG模式后,Django便不提供 ...

  5. mac上使用终端生成RSA公钥和密钥

    首先确保你的电脑上安装了openssl,一般mac系统安装后都会自动安装!怎么安装??.....请百度...... 安装命令如下: sudo apt-get install openssl 在你的任何 ...

  6. Scala 深入浅出实战经典 第55讲:Scala中Infix Type实战详解

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...

  7. WinDbg使用介绍

    Windbg工作空间 WinDbg使用工作空间来描述和存储调试项目的属性.参数及调试器设置等信息.工作空间与vc中的项目文件很相似.WinDbg定义了两种工作空间,一种为默认工作空间,另一种为命名的工 ...

  8. javascript - 二叉树

    都是些简单的东西,所以直接上代码了. /** * Created by huangjacky on 14-10-3. */ function Node(element, left, right) { ...

  9. 给VMware下的Linux扩展磁盘空间(以CentOS6.3为例)转

    #查看挂载点:df -h#显示:文件系统 容量 已用 可用 已用%% 挂载点/dev/mapper/vg_dc01-lv_root 47G 12G 34G 25% /tmpfs 504M 88K 50 ...

  10. 《objective-c基础教程》学习笔记(十一)—— 类别

    在编写面向对象程序的时候,我们经常想为现有的类添加一些新的行为.有些时候,我们可以创建这个类的子类.但是,如果我们用到工具集或者类库的时候,无法处理新建的子类.这时,Objective-C就给我们提供 ...