如何使新浪微博 sso支持SSO授权

8178人阅读
android 开源及第三方项目(29)
sso授权,指的是通过一键点击的简单方式唤起微博客户端行为的授权的方式,因为操作简单,所以作为很多应用的第三方登录的选择。
当然,你想使用这个功能,首先你得有本地客户端,否则的话,会使用web的授权方式,慢慢的输入你的账户和密码来获取授权。
在编码前,你得为此做些简单的准备工作。
&&&&&&& 1.下载官方的SDK,在里面有实例和MD5的签名工具。
在里面的签名工具,根据你输入的包名来得到MD5值,你需要这个值来正确的创建应用。
在里面的还有weiboSDK,你需要把它加入你的应用中,引用其中的方法。
&&&&&&& 2.在清单中加入访问网络的权限
&&&&&&& 3.你需要在新浪的开放平台创建应用。
定义授权参数的接口:
(老实说,我是直接copy的demo,改为自己的授权信息就可以了)。
public interface Constants {
/** 当前 DEMO 应用的 APP_KEY,第三方应用应该使用自己的 APP_KEY 替换该 APP_KEY */
public static final String APP_KEY
public static final String REDIRECT_URL = &&;
public static final String SCOPE =
&email,direct_messages_read,direct_messages_write,&
+ &friendships_groups_read,friendships_groups_write,statuses_to_me_read,&
+ &follow_app_official_microblog,& + &invitation_write&;
缓存授权信息:
* 该类定义了微博授权时所需要的参数。
public class AccessTokenKeeper {
private static final String PREFERENCES_NAME = &com_weibo_sdk_android&;
private static final String KEY_UID
private static final String KEY_ACCESS_TOKEN
= &access_token&;
private static final String KEY_EXPIRES_IN
= &expires_in&;
* 保存 Token 对象到 SharedPreferences。
* @param context 应用程序上下文环境
* @param token
Token 对象
public static void writeAccessToken(Context context, Oauth2AccessToken token) {
if (null == context || null == token) {
SharedPreferences pref = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_APPEND);
Editor editor = pref.edit();
editor.putString(KEY_UID, token.getUid());
editor.putString(KEY_ACCESS_TOKEN, token.getToken());
editor.putLong(KEY_EXPIRES_IN, token.getExpiresTime());
* 从 SharedPreferences 读取 Token 信息。
* @param context 应用程序上下文环境
* @return 返回 Token 对象
public static Oauth2AccessToken readAccessToken(Context context) {
if (null == context) {
Oauth2AccessToken token = new Oauth2AccessToken();
SharedPreferences pref = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_APPEND);
token.setUid(pref.getString(KEY_UID, &&));
token.setToken(pref.getString(KEY_ACCESS_TOKEN, &&));
token.setExpiresTime(pref.getLong(KEY_EXPIRES_IN, 0));
* 清空 SharedPreferences 中 Token信息。
* @param context 应用程序上下文环境
public static void clear(Context context) {
if (null == context) {
SharedPreferences pref = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_APPEND);
Editor editor = pref.edit();
editor.clear();
集成的sso授权 +获取用户名:
* 该类主要演示如何进行授权、SSO登陆。
public class WBAuthActivity extends Activity implements OnClickListener {
/** 显示认证后的信息,如 AccessToken */
private TextView mTokenT
/** 微博 Web 授权类,提供登陆等功能 */
private WeiboAuth mWeiboA
/** 封装了 &access_token&,&expires_in&,&refresh_token&,并提供了他们的管理功能 */
private Oauth2AccessToken mAccessT
/** 注意:SsoHandler 仅当 SDK 支持 SSO 时有效 */
private SsoHandler mSsoH
/** 用户信息接口 */
private UsersAPI mUsersAPI;
private Button ssoB
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.acy_sinasso);
initView();
public void initView() {
mTokenText = (TextView) findViewById(R.id.tv_txt);
// SSO 授权
ssoBtn = (Button) findViewById(R.id.btn_sso);
// 创建微博实例
mWeiboAuth = new WeiboAuth(this, Constants.APP_KEY,
Constants.REDIRECT_URL, Constants.SCOPE);
// 从 SharedPreferences 中读取上次已保存好 AccessToken 等信息,
// 第一次启动本应用,AccessToken 不可用
mAccessToken = AccessTokenKeeper.readAccessToken(this);
if (mAccessToken.isSessionValid()) {
updateTokenView(true);
ssoBtn.setOnClickListener(this);
* 当 SSO 授权 Activity 退出时,该函数被调用。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// SSO 授权回调
// 重要:发起 SSO 登陆的 Activity 必须重写 onActivityResult
if (mSsoHandler != null) {
mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
* 微博认证授权回调类。 1. SSO 授权时,需要在 {@link #onActivityResult} 中调用
* {@link SsoHandler#authorizeCallBack} 后, 该回调才会被执行。 2. 非 SSO
* 授权时,当授权结束后,该回调就会被执行。 当授权成功后,请保存该 access_token、expires_in、uid 等信息到
* SharedPreferences 中。
class AuthListener implements WeiboAuthListener {
// 授权完成
public void onComplete(Bundle values) {
// 从 Bundle 中解析 Token
mAccessToken = Oauth2AccessToken.parseAccessToken(values);
if (mAccessToken.isSessionValid()) {
// 显示 Token
updateTokenView(false);
// 保存 Token 到 SharedPreferences
AccessTokenKeeper.writeAccessToken(WBAuthActivity.this,
mAccessToken);
Toast.makeText(WBAuthActivity.this, &success!!&,
Toast.LENGTH_SHORT).show();
// 根据uid 获取用户的昵称,因为uid是在回调方法从服务器传递过来的数据中。
long uid = Long.parseLong(mAccessToken.getUid());
mUsersAPI.show(uid, mListener);
// 以下几种情况,您会收到 Code:
// 1. 当您未在平台上注册的应用程序的包名与签名时;
// 2. 当您注册的应用程序包名与签名不正确时;
// 3. 当您在平台上注册的包名和签名与您当前测试的应用的包名和签名不匹配时。
Toast.makeText(WBAuthActivity.this, &fail&, Toast.LENGTH_LONG)
// 取消授权
public void onCancel() {
Toast.makeText(WBAuthActivity.this, &cancel&, Toast.LENGTH_LONG)
// 授权异常
public void onWeiboException(WeiboException e) {
Toast.makeText(WBAuthActivity.this,
&Auth exception : & + e.getMessage(), Toast.LENGTH_LONG)
* 显示当前 Token 信息。 配置文件中是否已存在 token 信息并且合法
public void updateTokenView(boolean hasExisted) {
// 获取用户信息接口
mUsersAPI = new UsersAPI(mAccessToken);
String date = new SimpleDateFormat(&yyyy/MM/dd HH:mm:ss&)
.format(new java.util.Date(mAccessToken.getExpiresTime()));
String format = getString(R.string.weibosdk_demo_token_to_string_format_1);
mTokenText
.setText(String.format(format, mAccessToken.getToken(), date));
String message = String.format(format, mAccessToken.getToken(), date);
if (hasExisted) {
message = getString(R.string.weibosdk_demo_token_has_existed)
// 根据uid 获取用户的昵称,因为uid是在回调方法从服务器传递过来的数据中。
long uid = Long.parseLong(mAccessToken.getUid());
mUsersAPI.show(uid, mListener);
mTokenText.setText(message);
* 微博 OpenAPI 回调接口。
private RequestListener mListener = new RequestListener() {
public void onComplete(String response) {
if (!TextUtils.isEmpty(response)) {
// 调用 User#parse 将JSON串解析成User对象
User user = User.parse(response);
if (user != null) {
Toast.makeText(WBAuthActivity.this,
&获取User信息成功,用户昵称:& + user.screen_name,
Toast.LENGTH_LONG).show();
mTokenText.setText(user.screen_name);
Toast.makeText(WBAuthActivity.this, response,
Toast.LENGTH_LONG).show();
public void onWeiboException(WeiboException e) {
ErrorInfo info = ErrorInfo.parse(e.getMessage());
Toast.makeText(WBAuthActivity.this, info.toString(),
Toast.LENGTH_LONG).show();
public void onClick(View v) {
// TODO Auto-generated method stub
if (v == ssoBtn) {
mSsoHandler = new SsoHandler(WBAuthActivity.this, mWeiboAuth);
mSsoHandler.authorize(new AuthListener());
&?xml version=&1.0& encoding=&utf-8&?&
&LinearLayout xmlns:android=&/apk/res/android&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:orientation=&vertical& &
&com.sina.weibo.sdk.widget.LoginButton
android:id=&@+id/btn_sso&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:layout_marginLeft=&10dp& /&
android:id=&@+id/tv_txt&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&info& /&
&/LinearLayout&
1.md5签名工具不能使用
你在使用签名工具前,需要先在你的设备上安装该应用。
2.认证消息出错
检查自己的回调页和自己应用中的回调页是否一致。
3.如果你的开发者身份没有认证,那么昨天申请的签名,今天可能不能用了,需要重新申请签名。
4.sso package or sign error:
有可能是签名失效了,你重新用md5签名工具申请个新的就可以了。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:453980次
积分:5869
积分:5869
排名:第2638名
原创:195篇
评论:151条
(1)(1)(1)(1)(2)(3)(1)(9)(6)(2)(9)(7)(6)(5)(5)(5)(3)(8)(10)(15)(16)(8)(14)(17)(10)(17)(10)(5)新浪微博移动应用授权机制(@疯子超人)_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
新浪微博移动应用授权机制(@疯子超人)
上传于||文档简介
&&新​浪​微​博​移​动​应​用​授​权​机​制
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩14页未读,继续阅读
你可能喜欢&&&您需要以后才能回答,未注册用户请先。君,已阅读到文档的结尾了呢~~
新浪微博如何实现 SSO (单..
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
新浪微博如何实现 SSO (单点登录)的分析
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 新浪sso授权 的文章

 

随机推荐