100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Android上开发新浪微博OAuth2.0认证

Android上开发新浪微博OAuth2.0认证

时间:2021-06-22 10:28:36

相关推荐

Android上开发新浪微博OAuth2.0认证



由于新浪微博的认证已经更新到OAuth2.0,以前的有些东西已不能使用,在网上找的资料大多都是基于1.0的认证,故只能自己摸索,现把DEMO分享出来给大家共享。这里注意,该DEMO只是初步实现了发新微博,转发微博,评论微博和查询最新的微博的功能,和实际项目还有很大差距,我直接使用了新浪微博提供的SDK,大牛们可以直接无视掉了,呵呵

先说一下新浪微博的SDK的导入吧,新浪微博的SDK是源码方式开放的,和我们平时使用的有些不一样,我在这里卡了很久,当然和我没仔细看SDK的文档有关系,为了减少大家走的弯路,这里着重提一下。导入步骤如下:

1)新浪微博官方的SDK包中一般有2个目录,一个是SDK的源码包(此包中有Android平台微博SDK说明文档),另一个是例子。首先需要将源码包导入到eclipse中。SDK工程的编码格式为UTF-8。

2)在需要集成新浪微博SDK包的工程项目中添加Library,右键 -> Properties -> Android。设置Library属性。

下面说下如何认证,里面的代码大部分用的是新浪提供的例子[html]view plain copy print ? privatestaticfinalStringCONSUMER_KEY="*******";//替换成你自己申请的KEYprivatestaticfinalStringCONSUMER_SECRET="**************************";//替换陈你自己申请的SECRETWeiboweibo=Weibo.getInstance();weibo.setupConsumerConfig(CONSUMER_KEY,CONSUMER_SECRET);//Oauth2.0隐式授权认证方式weibo.setRedirectUrl("");//此处使用的URL必须和新浪微博上应用提供的回调地址一样weibo.authorize(OAuthWeiboActivity.this,newAuthDialogListener());

private static final String CONSUMER_KEY = "*******";// 替换成你自己申请的KEY private static final String CONSUMER_SECRET = "**************************"; // 替换陈你自己申请的SECRETWeibo weibo = Weibo.getInstance();weibo.setupConsumerConfig(CONSUMER_KEY, CONSUMER_SECRET);// Oauth2.0 隐式授权认证方式weibo.setRedirectUrl("");// 此处使用的URL必须和新浪微博上应用提供的回调地址一样weibo.authorize(OAuthWeiboActivity.this, new AuthDialogListener());

对于Mobile客户端应用来说,是不存在Server的,故此处的应用回调页地址只要与新浪微博开放平台->我的应用->应用信息->高级应用->授权设置->应用回调页中的url地址保持一致就可以了。

以下代码实现WeiboDialogListener接口,授权成功后可在onComplete函数中获得AccessToken信息。具体如何保存、使用AccessToken信息由开发者自行处理,比如存放在SharedPreferences中,但是AccessToken的有效期有限制,一般正常情况下是7天存活期,过期后需要重新获得。

[html]view plain copy print ? classAuthDialogListenerimplementsWeiboDialogListener{@OverridepublicvoidonComplete(Bundlevalues){Stringtoken=values.getString("access_token");Stringexpires_in=values.getString("expires_in");Log.i(“info”,"access_token:"+token+"expires_in:"+expires_in);AccessTokenaccessToken=newAccessToken(token,CONSUMER_SECRET);accessToken.setExpiresIn(expires_in);Weibo.getInstance().setAccessToken(accessToken);Intentintent=newIntent();intent.setClass(OAuthWeiboActivity.this,MySinaWeiboActivity.class);startActivity(intent);}@OverridepublicvoidonError(DialogErrore){Toast.makeText(getApplicationContext(),"Autherror:"+e.getMessage(),Toast.LENGTH_LONG).show();}@OverridepublicvoidonCancel(){Toast.makeText(getApplicationContext(),"Authcancel",Toast.LENGTH_LONG).show();}@OverridepublicvoidonWeiboException(WeiboExceptione){Toast.makeText(getApplicationContext(),"Authexception:"+e.getMessage(),Toast.LENGTH_LONG).show();}}

class AuthDialogListener implements WeiboDialogListener {@Overridepublic void onComplete(Bundle values) {String token = values.getString("access_token");String expires_in = values.getString("expires_in");Log.i(“info”,"access_token : " + token + " expires_in: " + expires_in);AccessToken accessToken = new AccessToken(token, CONSUMER_SECRET);accessToken.setExpiresIn(expires_in);Weibo.getInstance().setAccessToken(accessToken);Intent intent = new Intent();intent.setClass(OAuthWeiboActivity.this, MySinaWeiboActivity.class);startActivity(intent);}@Overridepublic void onError(DialogError e) {Toast.makeText(getApplicationContext(), "Auth error : " + e.getMessage(),Toast.LENGTH_LONG).show();}@Overridepublic void onCancel() {Toast.makeText(getApplicationContext(), "Auth cancel", Toast.LENGTH_LONG).show();}@Overridepublic void onWeiboException(WeiboException e) {Toast.makeText(getApplicationContext(), "Auth exception : " + e.getMessage(),Toast.LENGTH_LONG).show();}}

发新微博

[html]view plain copy print ? privateStringupdate(Weiboweibo,Stringsource,Stringstatus,Stringlon,Stringlat)throwsWeiboException{WeiboParametersbundle=newWeiboParameters();bundle.add("status",status);if(!TextUtils.isEmpty(lon)){bundle.add("lon",lon);}if(!TextUtils.isEmpty(lat)){bundle.add("lat",lat);}Stringrlt="";Stringurl=Weibo.SERVER+"statuses/update.json";rlt=weibo.request(this,url,bundle,Utility.HTTPMETHOD_POST,weibo.getAccessToken());returnrlt;}

private String update(Weibo weibo, String source, String status, String lon, String lat)throws WeiboException {WeiboParameters bundle = new WeiboParameters();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";rlt = weibo.request(this, url, bundle, Utility.HTTPMETHOD_POST, weibo.getAccessToken());return rlt;}

转发微博[html]view plain copy print ? privateStringrepost(Stringstr,Stringid)throwsMalformedURLException,IOException,WeiboException{Stringurl=Weibo.SERVER+"statuses/repost.json";WeiboParametersbundle=newWeiboParameters();bundle.add("id",id);bundle.add("status",str);Stringrlt=weibo.request(RepostWeiboActivity.this,url,bundle,"POST",weibo.getAccessToken());returnrlt;}

private String repost(String str, String id) throws MalformedURLException, IOException, WeiboException{String url = Weibo.SERVER + "statuses/repost.json";WeiboParameters bundle = new WeiboParameters();bundle.add("id", id);bundle.add("status", str);String rlt = weibo.request(RepostWeiboActivity.this, url, bundle, "POST", weibo.getAccessToken());return rlt;}

评论微博

[html]view plain copy print ? privateStringcomment(Stringid)throwsMalformedURLException,IOException,WeiboException{Stringurl=Weibo.SERVER+"comments/create.json";WeiboParametersbundle=newWeiboParameters();bundle.add("comment","测试");bundle.add("id",id);Stringrlt=weibo.request(CommentWeiboActivity.this,url,bundle,"POST",weibo.getAccessToken());eturnrlt;}

private String comment(String id) throws MalformedURLException, IOException, WeiboException{String url = Weibo.SERVER + "comments/create.json"; WeiboParameters bundle = new WeiboParameters();bundle.add("comment", "测试");bundle.add("id", id);String rlt = weibo.request(CommentWeiboActivity.this, url, bundle, "POST", weibo.getAccessToken());eturn rlt;}

查询最新的微博[html]view plain copy print ? privateStringgetPublicTimeline()throwsMalformedURLException,IOException,WeiboException{Stringurl=Weibo.SERVER+"statuses/public_timeline.json";WeiboParametersbundle=newWeiboParameters();bundle.add("count","1");Stringrlt=weibo.request(QueryWeiboActivity.this,url,bundle,"GET",weibo.getAccessToken());returnrlt;}

private String getPublicTimeline() throws MalformedURLException, IOException, WeiboException{String url = Weibo.SERVER + "statuses/public_timeline.json";WeiboParameters bundle = new WeiboParameters();bundle.add("count", "1"); String rlt = weibo.request(QueryWeiboActivity.this, url, bundle, "GET", weibo.getAccessToken());return rlt;}

差不多就这些了,其他的没继续研究,还有返回的JSON的数据如何处理这里都没有处理,等有空再研究下

DEMO下载地址:/detail/zingck/4174074

转贴请保存源地址:/zingck/article/details/7395539

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。