新浪微博客户端开发之OAuth认证篇
新浪微博客户端开发之OAuth认证篇
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2. /OauthTest/src/com/weibo/sdk/android/demo/MainActivity.java
package com.weibo.sdk.android.demo; import java.text.SimpleDateFormat;
import java.util.Date; import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast; import com.weibo.sdk.android.Oauth2AccessToken;
import com.weibo.sdk.android.Weibo;
import com.weibo.sdk.android.WeiboAuthListener;
import com.weibo.sdk.android.WeiboDialogError;
import com.weibo.sdk.android.WeiboException;
import com.weibo.sdk.android.keep.AccessTokenKeeper; public class MainActivity extends Activity { private Weibo mWeibo; //Weibo引用对象
public static Oauth2AccessToken accessToken; //访问token private Button oauthBtn;
private TextView mText; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取Weibo引用对象,传入appkey和回调url
mWeibo = Weibo.getInstance(ConstantS.APP_KEY, ConstantS.REDIRECT_URL);
mText = (TextView) findViewById(R.id.show);
oauthBtn = (Button) findViewById(R.id.oauthBtn);
MainActivity.accessToken = AccessTokenKeeper.readAccessToken(this); oauthBtn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
mWeibo.authorize(MainActivity.this, new AuthDialogListener());
}
}); } public class AuthDialogListener implements WeiboAuthListener { @Override
public void onCancel() {
//Oauth2.0认证过程中,如果认证窗口被关闭或认证取消时调用
Toast.makeText(getApplicationContext(), "Auth cancel" , Toast.LENGTH_LONG).show(); } @Override
public void onComplete(Bundle values) {
// 认证结束后调用此方法
String token = values.getString("access_token");// 表明用户身份的token,用于微博API的调用
String expires_in = values.getString("expires_in");// 过期时间,用于判断登录是否过程
System.out.println(expires_in);
MainActivity.accessToken = new Oauth2AccessToken(token, expires_in);
String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")
.format(new java.util.Date(MainActivity.accessToken
.getExpiresTime()));
mText.setText("认证成功: \r\n access_token: " + token + "\r\n"
+ "expires_in: " + expires_in + "\r\n有效期:" + date); AccessTokenKeeper.keepAccessToken(MainActivity.this, accessToken);
Toast.makeText(MainActivity.this, "认证成功", Toast.LENGTH_SHORT)
.show();
} @Override
public void onError(WeiboDialogError e) {
//Oauth2.0认证过程中,当认证对话框中的webView接收数据出现错误时调用此方法
Toast.makeText(getApplicationContext(), "Auth error:" + e.getMessage(), Toast.LENGTH_LONG).show();
} @Override
public void onWeiboException(WeiboException e) {
//当认证过程中捕获到WeiboException时调用
Toast.makeText(getApplicationContext(), "Auth exception:" + e.getMessage(), Toast.LENGTH_LONG).show(); } }
}
3. /OauthTest/src/com/weibo/sdk/android/demo/ConstantS.java
package com.weibo.sdk.android.demo; /**
* 定义一个常量接口,方便管理常量
* @author wwj
*
*/
public interface ConstantS {
// 应用的key请到官方申请正式的appkey替换APP_KEY
public static final String APP_KEY = "249239496";
// 替换为开发者REDIRECT_URL
public static final String REDIRECT_URL = "http://www.sina.com";
// 新支持scope,支持传入多个scope权限,用逗号分隔
public static final String SCOPE = "email,direct_messages_read,direct_messages_write," +
"friendships_groups_read,friendships_groups_write,statuses_to_me_read," +
"follow_app_official_microblog"; }
public static Weibo getInstance(java.lang.String appKey,
java.lang.String redirectUrl,
java.lang.String aScope)
- 微博初始化函数,需要优先其他函数调用.如果appKey或redirectUrl为空,默认抛出RuntimeException
-
- 参数:
appKey- 第三方应用的appkeyredirectUrl- 第三方应用的回调页- 返回:
- Weibo的实例
- 抛出:
java.lang.RuntimeException
package com.weibo.sdk.android.keep; import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor; import com.weibo.sdk.android.Oauth2AccessToken; /**
* 该类用于保存Oauth2AccessToken到sharepreference,并提供读取功能
*
* @author wwj
*
*/
public class AccessTokenKeeper { private static final String PREFERENCES_NAME = "com_weibo_sdk_android"; /**
* 保存accsssToken到SharedPreferences
* @param context 上下文对象
* @param token Oauth2AccessToken
*/
public static void keepAccessToken(Context context, Oauth2AccessToken token) {
SharedPreferences pref = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_APPEND);
Editor editor = pref.edit();
editor.putString("token", token.getToken());
editor.putLong("expiresTime", token.getExpiresTime());
editor.commit();
}
/**
* 清空sharedPreferences
* @param context
*/
public static void clear(Context context) {
SharedPreferences pref = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_APPEND);
Editor editor = pref.edit();
editor.clear();
editor.commit();
}
/**
* 从SharedPreferences读取accessToken
* @param context
* @return Oauth2AccessToken
*/
public static Oauth2AccessToken readAccessToken(Context context) {
Oauth2AccessToken token = new Oauth2AccessToken();
SharedPreferences pref = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_APPEND);
token.setToken(pref.getString("token", ""));
token.setExpiresTime(pref.getLong("expiresTime", 0));
return token;
}
}
新浪微博客户端开发之OAuth认证篇的更多相关文章
- .NET Core 跨平台 GUI 开发之 GTtkSharp 初级篇
.NET Core 跨平台 GUI 开发之 GTtkSharp 初级篇 本文作为初级篇,适合已经安装好.NET Core 环境以及 Gtk 环境,并具备了 C#开发基础知识,能跑一些简单的例子,希望更 ...
- [转载]敏捷开发之Scrum扫盲篇
现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP... 为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述S ...
- 敏捷开发之Scrum扫盲篇
现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP... 为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述Scrum中 ...
- 敏捷开发之Scrum扫盲篇(转)
转:http://www.cnblogs.com/taven/archive/2010/10/17/1853386.html 现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP.. ...
- ios即时通讯客户端开发之-mac上搭建openfire服务器
一.下载并安装openfire 1.到http://www.igniterealtime.org/downloads/index.jsp下载最新openfire for mac版 比如:Openfir ...
- koa+mysql+vue+socket.io全栈开发之web api篇
目标是建立一个 web QQ的项目,使用的技术栈如下: 后端是基于koa2 的 web api 服务层,提供curd操作的http接口,登录验证使用的是 json web token,跨域方案使用的是 ...
- 转:敏捷开发之Scrum扫盲篇
现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP... 为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述Scrum中 ...
- 敏捷开发之Scrum扫盲篇(转)
现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP... 为了不落后于他人,我也开始学习Scrum.今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的语言来描述Scrum中 ...
- 【转】敏捷开发之Scrum扫盲篇
现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP... 为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述Scrum中 ...
随机推荐
- utf-8的mysql表笔记
链接数据库指定编码集jdbc:mysql://192.168.2.33:3306/mybase?useUnicode=true&characterEncoding=UTF-8 mysql默认链 ...
- chart.js 示例
一个简单的例子. 1.html代码 <div id="pie" style="width: 250px;float:left"> <h3> ...
- 为什么要采用外部js文件
这篇文章主要讲的是为什么要采用外部js文件,有什么好处. 为什么不把js内嵌在html中呢,这样不是好分析吗?对,这样你是好分析,同样的别人呢?不内嵌在html中有如下原因: 安全性: 只要查看页 ...
- [转载]移动终端浏览器初始设置apple-mobile-web-app-capable
这两句话的确很有用,有了它,手机访问的时候像样了. 原文地址:移动终端浏览器初始设置apple-mobile-web-app-capable作者:素水凌心 移动终端浏览器默认设置视口的宽度和初始规模. ...
- Python核心编程(第九章)--文件和输入输出
文件内建函数: open()函数提供了初始化输入/输出操作的通用接口 open()基本语法:file_object = open(filename,access_mode='r',buffering= ...
- 为什么说 Git 比 SVN 更好
为什么说 Git 比 SVN 更好 在版本控制系统的选型上,是选择Git还是SVN? 对于开源项目来说这不算问题.使用Git极大地提高了开发效率.扩大了开源项目的参与度. 增强了版本控制系统的安全性, ...
- Block(一)基础-备
一.概述 Block是C级别的语法和运行时特性.Block比较类似C函数,但是Block比之C函数,其灵活性体现在栈内存.堆内存的引用,我们甚至可以将一个Block作为参数传给其他的函数或者Block ...
- MySQL强制性操作
1.强制索引FORCE INDEX SELECT * FROM TABLE1 FORCE INDEX (FIELD1) … 只使用建立在FIELD1上的索引,而不使用其它字段上的索引. 2.忽略索引 ...
- 在Struts2中集成Spring详细讲解
Spring的官方定义是:一个轻量级的IoC和Aop容器框架,它使用了一种叫做依赖注入的技术. 所谓依赖注入,就是指将创建对象以及协议依赖对象之间合作的责任从对象自身中转移到"工厂" ...
- MySQL存储过程事务处理
BEGIN ; ; START TRANSACTION; #这边放sql语句,涉及到的表必须都为InnoDB THEN ROLLBACK; ELSE COMMIT; END IF; END 转自:ht ...