新浪微博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 爬取收藏.可是未登录 ...
随机推荐
- get请求的最大字符长度
各浏览器HTTP Get请求URL最大长度并不相同,几类常用浏览器最大长度及超过最大长度后提交情况如下: IE6.0 :url最大长度2083个字符,超过最大长度后无法提 ...
- MySql的基本操作以及以后开发经常使用的常用指令
第一章:数据类型和操作数据表MySQL语句的规范(1):关键字与函数名称全部大写(2):数据库名称,表名称,字段名称全部小写(3):SQL语句必须以分号结尾 1:命令行模式启动mysql服务net s ...
- JAVA学习Swing绝对局部简单学习
package com.swing; import java.awt.Container; import javax.swing.JButton; import javax.swing.JFrame; ...
- 匿名管道读取CMD回显信息
之前用了很坑爹的做法去读取了cmd命令的回显信息,现在发现了用匿名管道的实现方法,由于楼主没有学过Windows核心编程,找了一个代码来凑数 存下来以后研究 #include <windows. ...
- PHP类与面向对象
PHP常量PHP常量大写PHP常量用define函数或const关键字定义一个常量一旦被定义,就不能再改变或者取消定义.在 PHP 5.3.0 以后,可以使用 const 关键字在类定义之外定义常量. ...
- [轉載]史上最强php生成pdf文件,html转pdf文件方法
之前有个客户需要把一些html页面生成pdf文件,然后我就找一些用php把html页面围成pdf文件的类.方法是可谓是找了很多很多,什么html2pdf,pdflib,FPDF这些都试过了,但是都没有 ...
- NAS服务器局域网内IPad、手机、电视盒子等联网播放
为把各个移动硬盘和不同电脑的数据进行统一管理,入手了一台希捷 Seagate Business 无内置硬盘 商业级 2盘位 云存储网路存储,经过卖家指点和不断摸索,终于能用了,主要步骤如下: 1. 系 ...
- 转:电子取证中AVI文件的文件雕复
电子取证中AVI文件的文件雕复 收藏本文 分享 1引言在电子取证工作中,恢复数字设备中被删除的数据是极为重要的工作之一,恢复数据又分依赖系统元信息的传统数据恢复技术和不依赖系统元信息的文件雕刻.文件雕 ...
- 安装配置NFS服务
超级好的配置centos下服务的链接 http://www.server-world.info/en/note?os=CentOS_6&p=nfs http://linux.vbird.org ...
- Win7版IE10浏览器正式版官方下载地址
• 简体中文,Win7 SP1 32位版IE10下载: http://download.microsoft.com/download/4/1/4/4149BFB1-AC27-401D-943F-DA1 ...