实现新浪微博授权一次多次登录的功能
目录(?)[-]
- 实现新浪微博授权一次多次登录的功能
- 原文有删改原文地址Android笔记 Sina API保存Oauth验证信息
- 正文
- 客户端的验证授权Resource Owner Password Credentials
- 高级接口及特殊权限
实现新浪微博授权一次多次登录的功能
原文有删改,原文地址:[Android笔记] Sina API保存Oauth验证信息
对于入手开发基于Sina Weibo客户端的开发人员来说,最大感慨我想就是文档 + 代码 + API接口
3、API 听说很多都遇到 API 封闭情况或者异常!(至少我没遇到)
正文:
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隐式授权认证方式 来验证,很简单,依葫芦画瓢嘛
- // 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 可以用来发微博等一系列操作
在有这样一段代码:
- 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) 就是处理的类啦
- 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 方法,这个就是发表文字和图片方法
- 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;
- }
- /**
- * 发表微博
- *
- * @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":"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
- 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 读写)
- 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);
- }
-------------------------------------------------------本文转自于网络,感谢原作者--------------------------------------------------------------------
实现新浪微博授权一次多次登录的功能相关推荐
- 使用share SDK实现新浪微博授权登录分享(1.x版本)
随时随地技术实战干货,获取项目源码.学习资料,请关注源代码社区公众号(ydmsq666) 操作步骤: 1.在share官网注册应用生成AppKey并下载SDK 网址:http://www.sh ...
- 新浪微博授权失败:applications over the unaudited use restrictions
在用新浪微博授权第三方app时,授权失败,log显示 com.sina.weibo.sdk.exception.WeiboHttpException: {"error":" ...
- 友盟新浪微博授权提示“找不到文件C8998”的解决办法
探索Android软键盘的疑难杂症 深入探讨Android异步精髓Handler 详解Android主流框架不可或缺的基石 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架 ...
- 新浪微博授权提示:文件不存在(C8998)的解决方法
在使用新浪微博登录的时候,获取新浪微博授权,出现了文件不存在(C8998)的问题 友盟SDK解决办法 添加友盟appkey <?xml version="1.0" encod ...
- 新浪微博 爬取实现之微博登录
实验需要新浪微博关于某一主题(如"云计算"."大数据"等)的内容数据,原本打算是直接使用新浪微博的API去抓取,被审核不过和授权机制完全击倒.所以索性直接用Ht ...
- Android第三方授权分享在新浪微博授权提示:文件不存在 C8998 的解决方法
最近项目集成第三方分享,碰到的一些问题,记录下,也希望有同样问题的朋友可以有所帮助 在新浪微博授权时出现下面的问题 点击一直提示文件不存在c8998什么鬼,再仔细核对过应用签名配置确认无误后还是出现这 ...
- iOS基础:新浪微博授权机制、 版本新特性
文章目录 前言 1. 版本新特性 II. 新浪微博授权机制 2. 1.http://open.weibo.com/wiki/微博API 前言 新浪微博分享SDK 1. 版本新特性 HWNewFeatu ...
- 新浪微博授权失败,redirect_url与应用注册的网址不一致
新浪微博授权失败,主要由于安全域名和授权回调页没有设置 设置位置: http://open.weibo.com/apps/ 选择应用信息--基本信息 将安全域名填写为sns.whalecloud.co ...
- 新浪微博授权登陆获取个人信息
新浪微博授权登陆获取个人信息 http://pan.baidu.com/s/1eQ7tNSA 这个是接入的phpsdk 和demo 一.phpsdk的组成 里面看到6个文件:callback.php. ...
最新文章
- SAP PM 入门系列18 - IP25为维护计划 Set Deletion Flag
- Angularjs $scope 里面的$apply 方法 和 $watch 方法
- BCH粉必转 | 围绕BCH建立的相关项目和应用列表汇总
- 人人出售56不亏:三方得利
- 实现 对象在内存中的引用一致性 之第一步
- linux的wc是什么命令,linux中的wc命令
- 【干货】工作邮件高段位写法
- pytorch教程龙曲良31-35
- Linux C目标文件
- 解决 transaction-manager Attribute transaction-manager is not allowed here
- 访问文件服务器提示“服务器存储空间不足”的解决方法
- dede自定义表单html,织梦自定义表单制作在线订单详细解说
- centOS6.6虚拟机启动后登陆界面无法显示
- CMMI3-CMMI5评估认证需要遵循七大原则
- NDK-r25交叉编译glib-2.73.3
- js 年会大屏_ECharts + Jquery 做大屏展示
- IPv4与IPv6区别
- 计算机桌面不满屏怎样解决,图文教您电脑屏幕显示不满屏【操作措施】
- Jetpack Paging3 基本使用
- maven setting,xml
热门文章
- 基于d3.js的组织结构图实现
- js中获取随机数的方法
- 光子计数器的线性测量和修正
- 手机连上无线却手机不显示连接服务器,手机连接上wifi却上不了网该怎么处理...
- 如何使用NFC手机的支付功能
- 7.HDFS之——NameNode的概述、自动Name的概述、NameNode HA 集群搭建
- 内蒙古8项制度保障农牧民工工资支付
- java 生成pdf文件_Java 中HTTP响应数据生成PDF,PDF文件的读取
- dataframe的loc与iloc
- 本地预览 @mdi/font Material Design Icons 字体图标库