新浪微博OAuth2.0的用法
最近学习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的用法的更多相关文章
- 工作笔记—新浪微博Oauth2.0授权 获取Access Token (java)
java发送新浪微博,一下博客从注册到发布第一条微博很详细 利用java语言在eclipse下实现在新浪微博开发平台发微博:http://blog.csdn.net/michellehsiao/art ...
- 新浪微博Oauth2.0授权认证及SDK、API的使用(Android)
---------------------------------------------------------------------------------------------- [版权申明 ...
- 新浪微博 oauth2.0 redirect_uri_mismatch
新浪微博开放平台出来很久了,现在才开始研究,貌似有点晚了.... 第一次折腾,总是出现这样那样的问题,即使照着别人成功的例子也是一样,这不,开始运行的时候,运行下面的例子,总是报error:redir ...
- 新浪微博Oauth2.0授权 获取Access Token
新浪微博开放平台提供了丰富的API接口,利用这些接口,开发者能够开发出独具特色的微博应用.但是,大部分接口都需要用户授权给应用,应用利用授权得到的Access Token来调用相应的接口来获取内容. ...
- iOS新浪微博OAuth2.0认证代码
#import "ViewController.h" #import "AFNetworking.h" @interface ViewController () ...
- OAuth2.0 微博登陆网站功能的实现(一)获取用户授权及令牌 Access Token
在登陆一些网站的时候,可以选择登陆方式为第三方登陆,例如微博登陆,以爱奇艺为例,进入首页,点击 ”登陆“,会弹出登录框: 除了本站登陆外,还可以选择其他第三方登陆,比如微博登陆.QQ 登陆.微信登陆等 ...
- OAuth2.0 错误码
http://open.taobao.com/doc/detail.htm?id=118 OAuth2.0 错误码 新浪微博OAuth2.0实现中,授权服务器在接收到验证授权请求时,会按照OAuth2 ...
- 新浪微博 使用OAuth2.0调用API
# -*- coding: cp936 -*- #python 2.7.10 #xiaodeng #新浪微博 使用OAuth2.0调用API #微博开放接口的调用,都需要获取用户的身份认证.目前微博开 ...
- 新浪微博API Oauth2.0 认证
原文链接: http://rsj217.diandian.com/post/2013-04-17/40050093587 本意是在注销账号前保留之前的一些数据.决定用python 爬取收藏.可是未登录 ...
随机推荐
- atitit groovy 总结java 提升效率
atitit groovy 总结java 提升效率 #---环境配置 1 #------安装麻烦的 2 三.创建groovy项目 2 3. 添加 Groovy 类 2 4. 编译运行groovy类 ...
- C# winform的WebBrowser非常规编程(强烈推荐)
本文章被今日头条推荐 1.在WebBrowser中实现抓取301和302协议 在WebBrowser中抓取301和302协议目前官方提供的组件远远不够,需要借助HttpMonitor.dll.这个组件 ...
- 数据采集:完美下载淘宝Ip数据库 简单的程序节省60元人民币而不必购买数据库
曾经做网站类型的程序时,经常需要收集客户端的访问数据,然后加以分析.这需要一个Ip数据库,数据表中显示Ip所在的省份市区等信息.网络上有流传的Ip纯真数据库,一些公开的Web服务也可以查询Ip地址信息 ...
- 《软件性能测试与LoadRunner实战教程》新书上市
作者前三本书<软件性能测试与LoadRunner实战>.<精通软件性能测试与LoadRunner实战>和<精通软件性能测试与LoadRunner最佳实战>面市后,受 ...
- AP6181 正基 WIFI 模块
a. Module size: 12*12mm (pin to pin compatible) Package: Stamp type 44pins AP6181: WiFiAP6210: WiFi/ ...
- mssql 获取表空间大小
create table #Data(name varchar(100),row varchar(100),reserved varchar(100),data varchar(100),index_ ...
- 翻译:使用tbb实现特征检测的例子
A feature-detection example using the Intel® Threading Building Blocks flow graph By Michael V. (Int ...
- SMON功能(二):合并空闲区间
SMON的作用还包括合并空闲区间(coalesces free extent) 触发场景 早期Oracle采用DMT字典管理表空间,不同于今时今日的LMT本地管理方式,DMT下通过对FET$和UET$ ...
- Md5加密方法
package com.atguigu.surveypark.util; import java.security.MessageDigest; /** * 数据 */ public class Da ...
- 如何利用OCS缓存TomcatSession全局变量(转)
转: 首先非常感谢阿里云给我们提供了一个如此省事的平台. 我们公司是一家物流公司,主要提供运输和仓储的服务.我们现在正在把我们的系统往阿里云迁移.当然,还在迁移过程中,所以还有很多是没办法现在说得太清 ...