实现新浪微博授权一次多次登录的功能
2013-01-07 12:21
579 查看
目录(?)[-]
实现新浪微博授权一次多次登录的功能
原文有删改原文地址Android笔记 Sina API保存Oauth验证信息
正文
客户端的验证授权Resource Owner Password Credentials
高级接口及特殊权限
Sina API保存Oauth验证信息
感慨:
对于入手开发基于Sina Weibo客户端的开发人员来说,最大感慨我想就是文档 + 代码 + API接口
1、文档解释不全
2、代码注释很少
3、API 听说很多都遇到 API 封闭情况或者异常!(至少我没遇到)
不过丝毫没有消灭开发者的热情,因为 --> 微博很火!
4.由于新浪强制用户从V1接口转到V2接口,而V2接口中access Token新增了有效期,更多 资料:http://blog.csdn.net/logan676/article/details/7880274
1、先到 Open Weibo 注册开发者帐号信息,获取 APP_KEY, APP_SECRET
2、查看 Sina 提供的 API ,不过最好下 SDK 看,因为很快就能上手,如果有时间,要看一下他们的源代码 ^_^
3、了解 Oauth、Basic Oauth, Xauth ..
and so on!
下面是开始着手开发:我想实现微博登录然后发微博,@其他用户
SDK 的目录结构:
---- com_weibo_android (这是一个Liberary)
---- com_weibo_android_example(主要Activity)
在 com_weibo_android_example 中 AuthorizeActivity.java OnClick 方法中提供了3种授权方式:
OAuth2.0隐式授权认证方式, OAuth2.0认证方式, Xauth认证方式
写了一个 WeiboUtil.java 操作类,用 OAuth2.0隐式授权认证方式 来验证,很简单,依葫芦画瓢嘛
[java]
view plaincopy
// consumer_key, consumer_secret, callback_url 自改
this.weibo.setupConsumerConfig(consumer_key, consumer_secret);
this.weibo.setRedirectUrl(callback_url);
weibo.authorize((Activity) this.context, new AuthDialogListener()); // 【备注1】
【备注1】:AuthDialogListener 继承 WeiboDialogListener 监听授权结果,包括 onComplete、 onError、onCancel、onWeiboException
显示一个授权窗口输入用户名密码
验证好了之后,其实他内部就已经帮你设置好了 AccessToken了,在 WeiBo 类为回收的时候,AccessToken 可以用来发微博等一系列操作
在有这样一段代码:
[java]
view plaincopy
public void onComplete(Bundle values) {
String token = values.getString("access_token");
String expires_in = values.getString("expires_in");
AccessToken accessToken = new AccessToken(token, CONSUMER_SECRET);
Weibo.getInstance().setAccessToken(accessToken);
Intent intent = new Intent();
intent.setClass(AuthorizeActivity.this, TestActivity.class);// 进入TestActivity
startActivity(intent);
}
TestActivity.java 的 OnClick 中就是发表的处理了(只发表文字),代码中可以看到 ShareActivity (com_weibo_android) 就是处理的类啦
[java]
view plaincopy
try {
Intent i = new Intent(TestActivity.this, ShareActivity.class);
TestActivity.this.startActivity(i);
} catch (WeiboException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
在 ShareActivity 中有一个 update 方法,这个就是发表文字和图片方法
[java]
view plaincopy
private String update(Weibo weibo, String source, String status,
String lon, String lat) throws MalformedURLException, IOException,
WeiboException {
WeiboParameters bundle = new WeiboParameters();
bundle.add("source", source);
bundle.add("status", status);
if (!TextUtils.isEmpty(lon)) {
bundle.add("lon", lon);
}
if (!TextUtils.isEmpty(lat)) {
bundle.add("lat", lat);
}
String rlt = "";
String url = Weibo.SERVER + "statuses/update.json";
AsyncWeiboRunner weiboRunner = new AsyncWeiboRunner(weibo);
weiboRunner.request(this, url, bundle, Utility.HTTPMETHOD_POST, this);
return rlt;
}
下面是我 copy 改后代码:(精简后)
[java]
view plaincopy
/**
* 发表微博
*
* @param content
* 文字信息
*/
public void shareWeibo(String content) {
WeiboParameters bundle = new WeiboParameters();
bundle.add("source", Weibo.getAppKey());
bundle.add("status", content);
String url = Weibo.SERVER + "statuses/update.json";
AsyncWeiboRunner weiboRunner = new AsyncWeiboRunner(weibo);
weiboRunner.request(this.context, url, bundle, Utility.HTTPMETHOD_POST,
this);
}
基本上就ok了,我实现了发文字,不过还是有个问题。我想只登录,授权一次:
第一种方法:下面摘自Sina【备注2】
基本流程
1.调用
返回值 { "access_token":"Sl***32hkKG", "expires_in":3600 }
2. 使用获得的OAuth2.0 Access Token调用API
注:客户端的验证授权需要申请
【备注2】:不过无论怎么试,结果还是失败,不是Auth Fail,就是 400 Bad required,所以放弃
第二种方法:下面摘自Sina【备注3】
(接口已接受线上申请)
1、OAuth认证时,要到授权网页获取授权码后才能获取AccessToken,请问是不是每次登录DIY客户端,都需要做这样一个认
证流程?
同一个的用户的话,可以直接存取对应的Accesstoken。直接调用接口即可。
【备注3】:亲手试了一下,用 SharePreferences,下面贴代码,在授期结果监听器中获取accessToken
[java]
view plaincopy
class AuthDialogListener implements WeiboDialogListener {
public void onComplete(Bundle values) {
String token = values.getString(SF_TOKEN);
String expires_in = values.getString(EXPIRES_IN);
AccessToken accessToken = new AccessToken(token, consumer_secret);
accessToken.setExpiresIn(expires_in);
Weibo.getInstance().setAccessToken(accessToken);
// 保存OAuth授权
SharedPreferences preferences = context.getSharedPreferences(
WEIBO_OAUTH, 0);
SharedPreferences.Editor editor = preferences.edit();
editor.putString(SF_TOKEN, token);
editor.putString(EXPIRES_IN, expires_in);
editor.commit();
// 通知授权成功
uihHandler.sendEmptyMessage(AUTHORIZE_FINISH);
}
public void onError(DialogError e) {
Toast.makeText(context, "网络连接错误 : " + e.getMessage(),
Toast.LENGTH_LONG).show();
}
public void onCancel() {
Toast.makeText(context, "授权取消", Toast.LENGTH_LONG).show();
}
public void onWeiboException(WeiboException e) {
Toast.makeText(context, "出现异常 : " + e.getMessage(),
Toast.LENGTH_LONG).show();
}
}
登录的时候做了一下判断:(就是 SharePreferences 读写)
[java]
view plaincopy
if(preferences.getString(SF_TOKEN, null) == null) {
this.weibo.setupConsumerConfig(this.consumer_key, this.consumer_secret);
this.weibo.setRedirectUrl(this.callback_url);
weibo.authorize((Activity) this.context, new AuthDialogListener());
} else {
this.weibo.setupConsumerConfig(this.consumer_key, this.consumer_secret);
this.weibo.setRedirectUrl(this.callback_url);
String token = preferences.getString(SF_TOKEN, null);
String expires_in = preferences.getString(EXPIRES_IN, null);
AccessToken accessToken = new AccessToken(token, consumer_secret);
accessToken.setExpiresIn(expires_in);
// 这一句很重要,因为会爆出WeiboException: auth faild! 21301 【备注4】
Utility.setAuthorization(new Oauth2AccessTokenHeader());
this.weibo.setAccessToken(accessToken);
Weibo.setSERVER("https://api.weibo.com/2/");
// 通知验证成功
uihHandler.sendEmptyMessage(AUTHORIZE_FINISH);
}
-------------------------------------------------------本文转自于网络,感谢原作者--------------------------------------------------------------------
实现新浪微博授权一次多次登录的功能
原文有删改原文地址Android笔记 Sina API保存Oauth验证信息
正文
客户端的验证授权Resource Owner Password Credentials
高级接口及特殊权限
实现新浪微博授权一次多次登录的功能
原文有删改,原文地址:[Android笔记]Sina API保存Oauth验证信息
感慨:
对于入手开发基于Sina Weibo客户端的开发人员来说,最大感慨我想就是文档 + 代码 + API接口
1、文档解释不全
2、代码注释很少
3、API 听说很多都遇到 API 封闭情况或者异常!(至少我没遇到)
不过丝毫没有消灭开发者的热情,因为 --> 微博很火!
4.由于新浪强制用户从V1接口转到V2接口,而V2接口中access Token新增了有效期,更多 资料:http://blog.csdn.net/logan676/article/details/7880274
正文:
基于 WeiBo API 开发一系列工作,流程:1、先到 Open Weibo 注册开发者帐号信息,获取 APP_KEY, APP_SECRET
2、查看 Sina 提供的 API ,不过最好下 SDK 看,因为很快就能上手,如果有时间,要看一下他们的源代码 ^_^
3、了解 Oauth、Basic Oauth, Xauth ..
and so on!
下面是开始着手开发:我想实现微博登录然后发微博,@其他用户
SDK 的目录结构:
---- com_weibo_android (这是一个Liberary)
---- com_weibo_android_example(主要Activity)
在 com_weibo_android_example 中 AuthorizeActivity.java OnClick 方法中提供了3种授权方式:
OAuth2.0隐式授权认证方式, OAuth2.0认证方式, Xauth认证方式
写了一个 WeiboUtil.java 操作类,用 OAuth2.0隐式授权认证方式 来验证,很简单,依葫芦画瓢嘛
[java]
view plaincopy
// consumer_key, consumer_secret, callback_url 自改
this.weibo.setupConsumerConfig(consumer_key, consumer_secret);
this.weibo.setRedirectUrl(callback_url);
weibo.authorize((Activity) this.context, new AuthDialogListener()); // 【备注1】
【备注1】:AuthDialogListener 继承 WeiboDialogListener 监听授权结果,包括 onComplete、 onError、onCancel、onWeiboException
显示一个授权窗口输入用户名密码
验证好了之后,其实他内部就已经帮你设置好了 AccessToken了,在 WeiBo 类为回收的时候,AccessToken 可以用来发微博等一系列操作
在有这样一段代码:
[java]
view plaincopy
public void onComplete(Bundle values) {
String token = values.getString("access_token");
String expires_in = values.getString("expires_in");
AccessToken accessToken = new AccessToken(token, CONSUMER_SECRET);
Weibo.getInstance().setAccessToken(accessToken);
Intent intent = new Intent();
intent.setClass(AuthorizeActivity.this, TestActivity.class);// 进入TestActivity
startActivity(intent);
}
TestActivity.java 的 OnClick 中就是发表的处理了(只发表文字),代码中可以看到 ShareActivity (com_weibo_android) 就是处理的类啦
[java]
view plaincopy
try {
Intent i = new Intent(TestActivity.this, ShareActivity.class);
TestActivity.this.startActivity(i);
} catch (WeiboException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
在 ShareActivity 中有一个 update 方法,这个就是发表文字和图片方法
[java]
view plaincopy
private String update(Weibo weibo, String source, String status,
String lon, String lat) throws MalformedURLException, IOException,
WeiboException {
WeiboParameters bundle = new WeiboParameters();
bundle.add("source", source);
bundle.add("status", status);
if (!TextUtils.isEmpty(lon)) {
bundle.add("lon", lon);
}
if (!TextUtils.isEmpty(lat)) {
bundle.add("lat", lat);
}
String rlt = "";
String url = Weibo.SERVER + "statuses/update.json";
AsyncWeiboRunner weiboRunner = new AsyncWeiboRunner(weibo);
weiboRunner.request(this, url, bundle, Utility.HTTPMETHOD_POST, this);
return rlt;
}
下面是我 copy 改后代码:(精简后)
[java]
view plaincopy
/**
* 发表微博
*
* @param content
* 文字信息
*/
public void shareWeibo(String content) {
WeiboParameters bundle = new WeiboParameters();
bundle.add("source", Weibo.getAppKey());
bundle.add("status", content);
String url = Weibo.SERVER + "statuses/update.json";
AsyncWeiboRunner weiboRunner = new AsyncWeiboRunner(weibo);
weiboRunner.request(this.context, url, bundle, Utility.HTTPMETHOD_POST,
this);
}
基本上就ok了,我实现了发文字,不过还是有个问题。我想只登录,授权一次:
第一种方法:下面摘自Sina【备注2】
客户端的验证授权(Resource Owner Password Credentials)
基本流程1.调用
https://api.weibo.com/oauth2/access_token?client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=password&username=USER_NAME&password=PASSWORD
返回值 { "access_token":"Sl***32hkKG", "expires_in":3600 }
2. 使用获得的OAuth2.0 Access Token调用API
注:客户端的验证授权需要申请
【备注2】:不过无论怎么试,结果还是失败,不是Auth Fail,就是 400 Bad required,所以放弃
第二种方法:下面摘自Sina【备注3】
高级接口及特殊权限
(接口已接受线上申请)1、OAuth认证时,要到授权网页获取授权码后才能获取AccessToken,请问是不是每次登录DIY客户端,都需要做这样一个认
证流程?
同一个的用户的话,可以直接存取对应的Accesstoken。直接调用接口即可。
【备注3】:亲手试了一下,用 SharePreferences,下面贴代码,在授期结果监听器中获取accessToken
[java]
view plaincopy
class AuthDialogListener implements WeiboDialogListener {
public void onComplete(Bundle values) {
String token = values.getString(SF_TOKEN);
String expires_in = values.getString(EXPIRES_IN);
AccessToken accessToken = new AccessToken(token, consumer_secret);
accessToken.setExpiresIn(expires_in);
Weibo.getInstance().setAccessToken(accessToken);
// 保存OAuth授权
SharedPreferences preferences = context.getSharedPreferences(
WEIBO_OAUTH, 0);
SharedPreferences.Editor editor = preferences.edit();
editor.putString(SF_TOKEN, token);
editor.putString(EXPIRES_IN, expires_in);
editor.commit();
// 通知授权成功
uihHandler.sendEmptyMessage(AUTHORIZE_FINISH);
}
public void onError(DialogError e) {
Toast.makeText(context, "网络连接错误 : " + e.getMessage(),
Toast.LENGTH_LONG).show();
}
public void onCancel() {
Toast.makeText(context, "授权取消", Toast.LENGTH_LONG).show();
}
public void onWeiboException(WeiboException e) {
Toast.makeText(context, "出现异常 : " + e.getMessage(),
Toast.LENGTH_LONG).show();
}
}
登录的时候做了一下判断:(就是 SharePreferences 读写)
[java]
view plaincopy
if(preferences.getString(SF_TOKEN, null) == null) {
this.weibo.setupConsumerConfig(this.consumer_key, this.consumer_secret);
this.weibo.setRedirectUrl(this.callback_url);
weibo.authorize((Activity) this.context, new AuthDialogListener());
} else {
this.weibo.setupConsumerConfig(this.consumer_key, this.consumer_secret);
this.weibo.setRedirectUrl(this.callback_url);
String token = preferences.getString(SF_TOKEN, null);
String expires_in = preferences.getString(EXPIRES_IN, null);
AccessToken accessToken = new AccessToken(token, consumer_secret);
accessToken.setExpiresIn(expires_in);
// 这一句很重要,因为会爆出WeiboException: auth faild! 21301 【备注4】
Utility.setAuthorization(new Oauth2AccessTokenHeader());
this.weibo.setAccessToken(accessToken);
Weibo.setSERVER("https://api.weibo.com/2/");
// 通知验证成功
uihHandler.sendEmptyMessage(AUTHORIZE_FINISH);
}
-------------------------------------------------------本文转自于网络,感谢原作者--------------------------------------------------------------------
相关文章推荐
- 实现新浪微博授权一次、多次登录的功能
- php基于登陆时间判断实现一天多次登录只积分一次功能示例
- jmeter 实现登录一次,多次操作登录后的某一个功能
- Android实现新浪微博SSO授权登录分享文字图片等功能(WEIBO_ANDROID_SDK V2.3.0 )
- php实现一天多次登录,只积分一次功能
- Android实现新浪微博SSO授权登录分享文字图片等功能
- Android开发实现新浪账号授权登录的功能
- 使用share SDK实现新浪微博授权登录分享(1.x版本)
- ASP.NET实现QQ、微信、新浪微博OAuth2.0授权登录
- ASP.NET实现QQ、微信、新浪微博OAuth2.0授权登录[原创]_实用技巧_脚本之家
- Android应用中实现了QQ授权登录功能
- ShareSDK实现授权登录和分享功能
- SWING实现新浪微博客户端(1)自动登录功能 (2)提取关注好友信息
- Android多次认证失败登录锁定功能的实现
- 新浪微博开发之授权用户登录的实现
- Shiro实现(一): SSM整合笔记实现登录,授权功能
- 使用share SDK实现新浪微博授权登录分享(1.x版本)
- IOS实现微信授权登录功能
- ASP.NET实现QQ、微信、新浪微博OAuth2.0授权登录 原创
- Atom编辑器折腾记_(5)记住上一次打开的目录及浏览器预览功能实现