新浪开发平台:http://open.weibo.com

新浪微博分享目前分为两种途径:

1,直接在自己的APP,弹出类似Dialog(sina集成)来完成授权,授权成功后可直接分享内容,全程都是在自己APP里完成分享。老版本的微博SDK中集成了弹出分享Dialog(WebView)的视图,以及插入文字、图片、URL等API,直接调用接口中的update就可以分享,此方法是在自己的APP中弹出类似Dialog的形式来完成的,分享的所有过程都在一个界面。

【APP分享-弹出sina封装好的Dialog-(授权)--分享---Dialog消失】

2,最新版的微博SDK,建议移动开发者使用SSO授权机制,这种机制牵引用户在分享时,跳转到手机中的新浪微博客户端,然后授权验证以及发送微博。
【APP携带要分享的数据-----跳转到微博客户端----(授权或登录)----分享-----返回APP】

如果使用老版本的SDK,代码量很少,就可以很简单的分享一条微博,但是授权验证时:Failed to receive access token,始终无法获得授权token,初步认为sina不再支持这种方式了。

如果使用新版本的SDK,带来的问题就是用户的手机一定要安装了 新浪微博客户端 否则无法分享。

本文是sina建议的SSO机制,APP间跳转和回调,跟着我的步骤走,让你很快实现分享功能。

成为开发者

打开新浪开发平台,都应该有新浪微博账号吧,登录好后,在网页右上角点击个人信息-编辑开发者信息:

首先你要成为一名开发者,类型的话我选择的是个人,公司性质还需要一系列审核,很麻烦,我只是为了在APP里实现分享功能,并不会延伸到支付等高级API,所以选择了个人开发者,完成后会给邮箱发邮件,一系列的动作,相信你没问题。(至于身份认证,需要上传开发者证件,我认为无所谓,目前只是分享功能)

创建应用

开发平台,点击管理中心,在这个界面我们需要创建一个应用,以供sina识别我们自己的APP。

sina说的很明确了,创建一个应用,得到appkey,就能测试了,至于之后的审核、上线,就看你的需求了,不需要审核,就可以实现分享的功能!

创建应用

创建应用-移动APP应用地址什么之类的可以随意写(如果你只是demo)。

编辑应用

创建好后,记住APP_KEY,这是你身份标识,然后编辑应用:

你的APP是什么包名,这里就填什么,不一致的话,不能通过验证。

Android签名是sina让你使用它的APk,输入包名,生成一个唯一的MD5校验码

http://open.weibo.com/wiki/SDK 寻找Android SDK,下载下来,打开后有一个app_signatures.apk,部署到手机里,运行生成一个DM5签名,复制到网页中来。

Android下载地址就无所谓了,可以随意写。

高级信息

打开高级信息,编辑OAuth2.0 授权设置,因为是移动APP,我们要填写一个授权回调页,否则获取不到access_token,在这里我填写的是www.sina.com,【注意哦,这里填写什么,项目中的REDIRECT_URL的值就是什么,这俩得保持一直,否则验证不通过,就会遇到error:redicect_uri_mismatch 错误】,取消授权页这里可以什么都不输入,目前用不到。

关联账号

打开测试账号,输入自己的微博名称,关联一下,到此为止,已经成功了一半。

开发测试

导入jar包

把下载好的weibo_sdk.jar导入到项目中的libs。

配置跳转Action

在AndroidManifest.xml中,在需要接受消息(微博APP分享成功返回到自己APP)的类里声明对应的Action:

com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY如下代码:

     <activityandroid:name=".DemoActivity"android:configChanges="keyboardHidden|orientation"android:launchMode="singleTask"android:screenOrientation="portrait"android:theme="@android:style/Theme.Black.NoTitleBar" ><intent-filter><action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY"/><category android:name="android.intent.category.DEFAULT"/></intent-filter></activity>

对应的Activity要实现IWeiboHandler.Response接口

初始化

 protected Weibo mWeibo;public static final String WEIBO_KEY = "你的APP_KEY";public static final String REDIRECT_URL = "http://www.sina.com";//【和网站自己设置的回调页保持一致】public Oauth2AccessToken mAccessToken;public IWeiboAPI weiboApi;protected Bitmap mSharedPic;protected SsoHandler mSsoHandler;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// TODO initmWeibo = Weibo.getInstance(WEIBO_KEY, REDIRECT_URL, null);weiboApi = WeiboSDK.createWeiboAPI(AppMain.this, WEIBO_KEY);weiboApi.responseListener(getIntent(), this);
     String path = Environment.getExternalStorageDirectory().toString()
                + "/test.png";
        mSharedPic = BitmapFactory.decodeFile(path);}

Callback

在onCreate()和onNewIntent里加入weiboApi.responseListener(intent,this);

 @Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);weiboApi.responseListener(intent, this);}

当从微博发博器界面返回到该 Activity时 , 接 口 函 数 IWeiboHandler.Response.onResponse(...)会被调用,用户可以从该函数内获取成功或失败,以及取消的信息,如下:

 /*** 当从微博返回到该Activity时,此接口函数会被调用*/@Overridepublic void onResponse(BaseResponse baseResp) {switch (baseResp.errCode) {case com.sina.weibo.sdk.constant.Constants.ErrorCode.ERR_OK:Toast.makeText(this, "分享成功", Toast.LENGTH_LONG).show();break;case com.sina.weibo.sdk.constant.Constants.ErrorCode.ERR_FAIL:Toast.makeText(this, baseResp.errMsg + "分享失败!", Toast.LENGTH_LONG).show();break;case com.sina.weibo.sdk.constant.Constants.ErrorCode.ERR_CANCEL:Toast.makeText(this, "取消分享", Toast.LENGTH_LONG).show();break;}}

在onActivityResult里加入回调函数

当用户点击分享按钮时,会进行SSO  登录,登陆完成后,返回该Activity,此时,我们需要在 onActivityResult(…)中调用 mSsoHandler.authorizeCallBack(requestCode, 
resultCode,  data) 函数,整个登陆才能结束。授权成功后,SDK会默认通过 AccessTokenKeeper 将access_token、expires_in信息其保存到SharedPreference 里面, 
用 户 也 可 在 onComplete函 数中通过

Oauth2AccessToken        token  =   AccessTokenKeeper.readAccessToken(getApplicationContext()); 获得 access_token 、 expires_in 信息。

 @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (mSsoHandler != null) {mSsoHandler.authorizeCallBack(requestCode, resultCode, data);}}

实现WeiboAuthListener 接口

授权成功后,SDK 会默认通过AccessTokenKeeper 将access_token、expires_in 信息其保存到SharedPreference 里面,第三方也可在onComplete 函数中获得access_token、expires_in信息。具体如何保存和使用access_token 信息由开发者自行处理。

 /**** 实现WeiboAuthListener接口,返回授权结果* 通过access_token和expires_in获取accesstoken* @author Administrator**/class AuthDialogListener implements WeiboAuthListener {@Overridepublic void onCancel() {Toast.makeText(this, "Auth onCancel", Toast.LENGTH_LONG).show();}@Overridepublic void onComplete(Bundle values) {String token = values.getString("access_token");String expires_in = values.getString("expires_in");mAccessToken = new Oauth2AccessToken(token, expires_in);if (mAccessToken.isSessionValid()) {AccessTokenKeeper.keepAccessToken(this, mAccessToken);Toast.makeText(this, "授权认证成功!", Toast.LENGTH_LONG).show();// TODOreqMsg(mSharedPic);}}@Overridepublic void onError(WeiboDialogError arg0) {Toast.makeText(this, "授权失败:" + arg0.getMessage(), Toast.LENGTH_LONG).show();}@Overridepublic void onWeiboException(WeiboException arg0) {Toast.makeText(this, "Auth Exception:" + arg0.getMessage(),Toast.LENGTH_LONG).show();}}

调用authorize 方法,认证并授权

调用Weibo.authorize(…)方法,弹出授权对话框,进行授权。授权成功后即可获得 access_token。

在分享的按钮事件里添加验证:

 @Overridepublic void onClick(View v) {mAccessToken = AccessTokenKeeper.readAccessToken(AppMain.this);if (mAccessToken.isSessionValid()) {// TODO发微博reqMsg(mSharedPic);} else {/** 不使用SSO方式进行授权验证 */// mWeibo.anthorize(AppMain.this, new AuthDialogListener());/** 使用SSO方式进行授权验证 */mSsoHandler = new SsoHandler(this, mWeibo);mSsoHandler.authorize(new AuthDialogListener(), null);}}

分享微博

 /*** 向weibo 客户端注册发送一个携带:文字、图片等数据* * @param bitmap*/public void reqMsg(Bitmap bitmap) {weiboApi.registerApp();/*图片对象*/ImageObject imageobj = new ImageObject();if (bitmap != null) {imageobj.setImageObject(bitmap);}/*微博数据的message对象*/WeiboMultiMessage multmess = new WeiboMultiMessage();TextObject textobj = new TextObject();textobj.text = "这是我的测试微博分享消息,大家看的到吗?";multmess.textObject = textobj;multmess.imageObject = imageobj;/*微博发送的Request请求*/SendMultiMessageToWeiboRequest multRequest = new SendMultiMessageToWeiboRequest();multRequest.multiMessage = multmess;//以当前时间戳为唯一识别符multRequest.transaction = String.valueOf(System.currentTimeMillis());weiboApi.sendRequest(this, multRequest);}

运行效果图:

授权

SSO模式的授权

登录

分享

分享成功返回自己APP

网页微博效果

weiboSDK老版本和新版本区别:

答案是,新版本已经把类似StatusesAPI这种封装给取消了,也就是说,如果想不跳转微博客户端来分享,在自己APP里直接分享,就需要自己写StatusesAPI,调用微博api接口,实现分享。

到此为止,微博分享就成功啦,遇到errorcode千万不要着急头大,静下心来去openweibo看错误码标识,弄懂流程很容易就可以通过授权了,分享是最基本功能,以后还有很多接口可以调用,大家有什么问题或心得就在这里交流就可以哦~~

SDK:http://open.weibo.com/wiki/SDK

开发平台问答系统:http://open.weibo.com/qa/index.php?qa=20521&qa_1=%E4%BD%BF%E7%94%A8%E6%96%B0%E7%89%88sdk%E4%B8%8D%E6%83%B3%E8%B7%B3%E8%BD%AC%E5%BE%AE%E5%8D%9A%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%83%BD%E5%90%A6%E7%9B%B4%E6%8E%A5%E5%8F%91%E9%80%81%E5%BE%AE%E5%8D%9A%E5%88%86%E4%BA%AB%EF%BC%9F

仿Oauth实现微博发文字图片:http://www.cnblogs.com/snake-hand/archive/2012/04/06/2454362.html

OAuth2.0授权机制:http://open.weibo.com/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E#.E7.A7.BB.E5.8A.A8.E5.BA.94.E7.94.A8.E7.9A.84.E9.AA.8C.E8.AF.81.E6.8E.88.E6.9D.83

Android SDK:https://github.com/mobileresearch/weibo_android_sdk

Scope接口:http://open.weibo.com/wiki/Scope

API文档:http://open.weibo.com/wiki/API%E6%96%87%E6%A1%A3

微博API:http://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI

Error code:http://open.weibo.com/wiki/Error_code

Android实现新浪微博SSO授权登录分享文字图片等功能(WEIBO_ANDROID_SDK V2.3.0 )相关推荐

  1. Android 使用新浪微博SSO授权

    新浪微博SSO授权,很早就做好了,只是一直没有时间整理博客,今天加班,晚上闲暇之时便想到整理一下.由于整个七月份很忙,加班很多.前段时间把腾讯微博的SSO认证整理好了.想在七月份翻篇之前再写点东西.好 ...

  2. 全军尽墨的Android应用:社会化授权登录及分享安全漏洞

    随着微信微博等社会化媒体的火热,第三方登录迅速成为一种快捷注册的方式,社会化分享也成为一种知识快速传播的渠道.在移动端,几乎大多数应用都接入了第三方登录或者分享组件,尤其是微信.QQ.微博三大巨头.这 ...

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

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

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

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

  5. 有奖试读 使用share SDK实现腾讯微博授权登录分享(1.x版本)

    操作步骤: 1.在share官网注册应用生成AppKey并下载SDK     网址:http://www.shareSDK.cn 2.在腾讯微博平台注册应用生成AppId和AppKey    网址:h ...

  6. iOS- 无处不在,详解iOS集成第三方登录(SSO授权登录无需密码)

    1.前言 不多说,第三登录无处不在!必备技能,今天以新浪微博为例. 这是上次写的iOS第三方社交分享: http://www.cnblogs.com/qingche/p/3727559.html 可以 ...

  7. iOS无处不在详解iOS集成第三方登录(SSO授权登录无需密码)

    链接地址:http://www.it165.net/pro/html/201408/18884.html 1.前言 不多说,第三登录无处不在!必备技能,今天以新浪微博为例. 这是上次写的iOS第三方社 ...

  8. 使用share SDK实现人人网授权登录分享(1.x版本)

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

  9. android 随手记 第三方授权登录,获取资料,分享

    帖子原文URL: http://blog.csdn.net/yangyu20121224/article/details/9057257 由于公司项目的需要,要实现在项目中使用第三方授权登录以及分享文 ...

最新文章

  1. jquery 实现表单验证功能代码(简洁)
  2. Hibernate和JDBC、EJB比较
  3. php 三元运算符 为空,PHP中三元运算符和Null合并运算符的简单比较
  4. JavaScript越来越简单啦啦啦
  5. 用不同显卡训练gan的区别_面霜质地这么多,到底哪一种最好用?不同质地面霜有什么区别?...
  6. 机器学习中目标函数、损失函数以及正则项的通俗解释
  7. Linux用户和用户组和文件权限介绍
  8. java 狗带风波_养狗风波作文
  9. php+高德地图webapi 高德jsapi 实现 当前位置与目标位置距离 并按照距离排序(坐标逆转换)...
  10. 数据挖掘之模型选择和融合
  11. 最大似然估计(MLE)的一些公式与定理(python实践)
  12. 【渝粤教育】国家开放大学2018年秋季 0133-21T大学物理 参考试题
  13. HTML5权威指南 6.多媒体相关API
  14. html弹窗无限循环,html恶搞之无限弹窗
  15. bootdo图片上传
  16. 国内/国外常见搜索引擎
  17. duilib库combo box提供输入字符模糊查询
  18. 知乎APP使用 产品体验报告
  19. 七牛 回调 java_七牛回调验证(java,php源码)
  20. 网页功能升华必备播放器

热门文章

  1. galaxy 生信安装软件_如何在三星Galaxy Smartwatches上安装Google Assistant
  2. i.MX6多路视频采集系统
  3. Android设置铃声实现代码
  4. Atlas 200dk官方镜像制作
  5. PySNMP实现自定义trap(SNMPv3)
  6. linux体验服务器,LINUX架设服务器的初级体验
  7. xp系统设置锁定计算机,xp如何锁定计算机?xp系统快速锁定计算机的方法
  8. OAuth 1.0 简介
  9. python打印随机验证码,包含大小写字母和随机数字
  10. java如何添加一个网段,java 判断ip是不是属于一个网段