目录(?)[-]

  1. 实现新浪微博授权一次多次登录的功能

    1. 原文有删改原文地址Android笔记 Sina API保存Oauth验证信息
  2. 正文
  3. 客户端的验证授权Resource Owner Password Credentials
  4. 高级接口及特殊权限

实现新浪微博授权一次多次登录的功能

原文有删改,原文地址:[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 plain copy
  1. // consumer_key, consumer_secret, callback_url 自改
  2. this.weibo.setupConsumerConfig(consumer_key, consumer_secret);
  3. this.weibo.setRedirectUrl(callback_url);
  4. weibo.authorize((Activity) this.context, new AuthDialogListener()); // 【备注1】

【备注1】:AuthDialogListener 继承 WeiboDialogListener 监听授权结果,包括 onComplete、 onError、onCancel、onWeiboException

显示一个授权窗口输入用户名密码

验证好了之后,其实他内部就已经帮你设置好了 AccessToken了,在 WeiBo 类为回收的时候,AccessToken 可以用来发微博等一系列操作

在有这样一段代码:

[java] view plain copy
  1. public void onComplete(Bundle values) {
  2. String token = values.getString("access_token");
  3. String expires_in = values.getString("expires_in");
  4. AccessToken accessToken = new AccessToken(token, CONSUMER_SECRET);
  5. Weibo.getInstance().setAccessToken(accessToken);
  6. Intent intent = new Intent();
  7. intent.setClass(AuthorizeActivity.this, TestActivity.class);// 进入TestActivity
  8. startActivity(intent);
  9. }

TestActivity.java 的 OnClick 中就是发表的处理了(只发表文字),代码中可以看到 ShareActivity (com_weibo_android) 就是处理的类啦

[java] view plain copy
  1. try {
  2. Intent i = new Intent(TestActivity.this, ShareActivity.class);
  3. TestActivity.this.startActivity(i);
  4. } catch (WeiboException e) {
  5. // TODO Auto-generated catch block
  6. e.printStackTrace();
  7. }

在 ShareActivity 中有一个 update 方法,这个就是发表文字和图片方法

[java] view plain copy
  1. private String update(Weibo weibo, String source, String status,
  2. String lon, String lat) throws MalformedURLException, IOException,
  3. WeiboException {
  4. WeiboParameters bundle = new WeiboParameters();
  5. bundle.add("source", source);
  6. bundle.add("status", status);
  7. if (!TextUtils.isEmpty(lon)) {
  8. bundle.add("lon", lon);
  9. }
  10. if (!TextUtils.isEmpty(lat)) {
  11. bundle.add("lat", lat);
  12. }
  13. String rlt = "";
  14. String url = Weibo.SERVER + "statuses/update.json";
  15. AsyncWeiboRunner weiboRunner = new AsyncWeiboRunner(weibo);
  16. weiboRunner.request(this, url, bundle, Utility.HTTPMETHOD_POST, this);
  17. return rlt;
  18. }
下面是我 copy 改后代码:(精简后)

[java] view plain copy
  1. /**
  2. * 发表微博
  3. *
  4. * @param content
  5. *            文字信息
  6. */
  7. public void shareWeibo(String content) {
  8. WeiboParameters bundle = new WeiboParameters();
  9. bundle.add("source", Weibo.getAppKey());
  10. bundle.add("status", content);
  11. String url = Weibo.SERVER + "statuses/update.json";
  12. AsyncWeiboRunner weiboRunner = new AsyncWeiboRunner(weibo);
  13. weiboRunner.request(this.context, url, bundle, Utility.HTTPMETHOD_POST,
  14. this);
  15. }

基本上就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":"SlAV32hkKG", "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 plain copy
  1. class AuthDialogListener implements WeiboDialogListener {
  2. public void onComplete(Bundle values) {
  3. String token = values.getString(SF_TOKEN);
  4. String expires_in = values.getString(EXPIRES_IN);
  5. AccessToken accessToken = new AccessToken(token, consumer_secret);
  6. accessToken.setExpiresIn(expires_in);
  7. Weibo.getInstance().setAccessToken(accessToken);
  8. // 保存OAuth授权
  9. SharedPreferences preferences = context.getSharedPreferences(
  10. WEIBO_OAUTH, 0);
  11. SharedPreferences.Editor editor = preferences.edit();
  12. editor.putString(SF_TOKEN, token);
  13. editor.putString(EXPIRES_IN, expires_in);
  14. editor.commit();
  15. // 通知授权成功
  16. uihHandler.sendEmptyMessage(AUTHORIZE_FINISH);
  17. }
  18. public void onError(DialogError e) {
  19. Toast.makeText(context, "网络连接错误 : " + e.getMessage(),
  20. Toast.LENGTH_LONG).show();
  21. }
  22. public void onCancel() {
  23. Toast.makeText(context, "授权取消", Toast.LENGTH_LONG).show();
  24. }
  25. public void onWeiboException(WeiboException e) {
  26. Toast.makeText(context, "出现异常 : " + e.getMessage(),
  27. Toast.LENGTH_LONG).show();
  28. }
  29. }

登录的时候做了一下判断:(就是 SharePreferences 读写)

[java] view plain copy
  1. if(preferences.getString(SF_TOKEN, null) == null) {
  2. this.weibo.setupConsumerConfig(this.consumer_key, this.consumer_secret);
  3. this.weibo.setRedirectUrl(this.callback_url);
  4. weibo.authorize((Activity) this.context, new AuthDialogListener());
  5. } else {
  6. this.weibo.setupConsumerConfig(this.consumer_key, this.consumer_secret);
  7. this.weibo.setRedirectUrl(this.callback_url);
  8. String token = preferences.getString(SF_TOKEN, null);
  9. String expires_in = preferences.getString(EXPIRES_IN, null);
  10. AccessToken accessToken = new AccessToken(token, consumer_secret);
  11. accessToken.setExpiresIn(expires_in);
  12. // 这一句很重要,因为会爆出WeiboException: auth faild! 21301 【备注4】
  13. Utility.setAuthorization(new Oauth2AccessTokenHeader());
  14. this.weibo.setAccessToken(accessToken);
  15. Weibo.setSERVER("https://api.weibo.com/2/");
  16. // 通知验证成功
  17. uihHandler.sendEmptyMessage(AUTHORIZE_FINISH);
  18. }

-------------------------------------------------------本文转自于网络,感谢原作者--------------------------------------------------------------------

实现新浪微博授权一次多次登录的功能相关推荐

  1. 使用share SDK实现新浪微博授权登录分享(1.x版本)

    随时随地技术实战干货,获取项目源码.学习资料,请关注源代码社区公众号(ydmsq666) 操作步骤: 1.在share官网注册应用生成AppKey并下载SDK     网址:http://www.sh ...

  2. 新浪微博授权失败:applications over the unaudited use restrictions

    在用新浪微博授权第三方app时,授权失败,log显示 com.sina.weibo.sdk.exception.WeiboHttpException: {"error":" ...

  3. 友盟新浪微博授权提示“找不到文件C8998”的解决办法

    探索Android软键盘的疑难杂症 深入探讨Android异步精髓Handler 详解Android主流框架不可或缺的基石 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架 ...

  4. 新浪微博授权提示:文件不存在(C8998)的解决方法

    在使用新浪微博登录的时候,获取新浪微博授权,出现了文件不存在(C8998)的问题 友盟SDK解决办法 添加友盟appkey <?xml version="1.0" encod ...

  5. 新浪微博 爬取实现之微博登录

    实验需要新浪微博关于某一主题(如"云计算"."大数据"等)的内容数据,原本打算是直接使用新浪微博的API去抓取,被审核不过和授权机制完全击倒.所以索性直接用Ht ...

  6. Android第三方授权分享在新浪微博授权提示:文件不存在 C8998 的解决方法

    最近项目集成第三方分享,碰到的一些问题,记录下,也希望有同样问题的朋友可以有所帮助 在新浪微博授权时出现下面的问题 点击一直提示文件不存在c8998什么鬼,再仔细核对过应用签名配置确认无误后还是出现这 ...

  7. iOS基础:新浪微博授权机制、 版本新特性

    文章目录 前言 1. 版本新特性 II. 新浪微博授权机制 2. 1.http://open.weibo.com/wiki/微博API 前言 新浪微博分享SDK 1. 版本新特性 HWNewFeatu ...

  8. 新浪微博授权失败,redirect_url与应用注册的网址不一致

    新浪微博授权失败,主要由于安全域名和授权回调页没有设置 设置位置: http://open.weibo.com/apps/ 选择应用信息--基本信息 将安全域名填写为sns.whalecloud.co ...

  9. 新浪微博授权登陆获取个人信息

    新浪微博授权登陆获取个人信息 http://pan.baidu.com/s/1eQ7tNSA 这个是接入的phpsdk 和demo 一.phpsdk的组成 里面看到6个文件:callback.php. ...

最新文章

  1. SAP PM 入门系列18 - IP25为维护计划 Set Deletion Flag
  2. Angularjs $scope 里面的$apply 方法 和 $watch 方法
  3. BCH粉必转 | 围绕BCH建立的相关项目和应用列表汇总
  4. 人人出售56不亏:三方得利
  5. 实现 对象在内存中的引用一致性 之第一步
  6. linux的wc是什么命令,linux中的wc命令
  7. 【干货】工作邮件高段位写法
  8. pytorch教程龙曲良31-35
  9. Linux C目标文件
  10. 解决 transaction-manager Attribute transaction-manager is not allowed here
  11. 访问文件服务器提示“服务器存储空间不足”的解决方法
  12. dede自定义表单html,织梦自定义表单制作在线订单详细解说
  13. centOS6.6虚拟机启动后登陆界面无法显示
  14. CMMI3-CMMI5评估认证需要遵循七大原则
  15. NDK-r25交叉编译glib-2.73.3
  16. js 年会大屏_ECharts + Jquery 做大屏展示
  17. IPv4与IPv6区别
  18. 计算机桌面不满屏怎样解决,图文教您电脑屏幕显示不满屏【操作措施】
  19. Jetpack Paging3 基本使用
  20. maven setting,xml

热门文章

  1. 基于d3.js的组织结构图实现
  2. js中获取随机数的方法
  3. 光子计数器的线性测量和修正
  4. 手机连上无线却手机不显示连接服务器,手机连接上wifi却上不了网该怎么处理...
  5. 如何使用NFC手机的支付功能
  6. 7.HDFS之——NameNode的概述、自动Name的概述、NameNode HA 集群搭建
  7. 内蒙古8项制度保障农牧民工工资支付
  8. java 生成pdf文件_Java 中HTTP响应数据生成PDF,PDF文件的读取
  9. dataframe的loc与iloc
  10. 本地预览 @mdi/font Material Design Icons 字体图标库