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

新浪微博比较简单,而且很方便使用。由于在腾讯微博中我有讲到SSO认证的过程,这里主要是看看新浪微博demo中的MainActivity,这个类中告诉我们如何进行新浪微博的授权,按照这个范例来做就可以的。下面是这个类的源码

package com.weibo.sdk.android.demo;

import java.text.SimpleDateFormat;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast; import com.weibo.sdk.android.Oauth2AccessToken;
import com.weibo.sdk.android.Weibo;
import com.weibo.sdk.android.WeiboAuthListener;
import com.weibo.sdk.android.WeiboDialogError;
import com.weibo.sdk.android.WeiboException;
import com.weibo.sdk.android.keep.AccessTokenKeeper;
import com.weibo.sdk.android.sso.SsoHandler;
import com.weibo.sdk.android.util.Utility;
/**
*
* @author liyan (liyan9@staff.sina.com.cn) 这位是新浪SSO认证的开发者,很优秀的开发者
*/
public class MainActivity extends Activity { private Weibo mWeibo;
private static final String CONSUMER_KEY = "966056985";// 替换为开发者的appkey,例如"1646212860";
private static final String REDIRECT_URL = "http://www.sina.com";
private Button authBtn, apiBtn, ssoBtn, cancelBtn;
private TextView mText;
public static Oauth2AccessToken accessToken;
public static final String TAG = "sinasdk";
/**
* SsoHandler 仅当sdk支持sso时有效,
*/
SsoHandler mSsoHandler; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWeibo = Weibo.getInstance(CONSUMER_KEY, REDIRECT_URL); authBtn = (Button) findViewById(R.id.auth);
authBtn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
mWeibo.authorize(MainActivity.this, new AuthDialogListener());
}
});
ssoBtn = (Button) findViewById(R.id.sso);// 触发sso的按钮
try {
Class sso = Class.forName("com.weibo.sdk.android.sso.SsoHandler");
ssoBtn.setVisibility(View.VISIBLE);
} catch (ClassNotFoundException e) {
Log.i(TAG, "com.weibo.sdk.android.sso.SsoHandler not found"); }
ssoBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
/**
* 下面两个注释掉的代码,仅当sdk支持sso时有效,
*/ mSsoHandler = new SsoHandler(MainActivity.this, mWeibo);
mSsoHandler.authorize(new AuthDialogListener());
}
});
cancelBtn = (Button) findViewById(R.id.apiCancel);
cancelBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AccessTokenKeeper.clear(MainActivity.this);
authBtn.setVisibility(View.VISIBLE);
ssoBtn.setVisibility(View.VISIBLE);
cancelBtn.setVisibility(View.INVISIBLE);
mText.setText("");
}
}); mText = (TextView) findViewById(R.id.show);
MainActivity.accessToken = AccessTokenKeeper.readAccessToken(this);
if (MainActivity.accessToken.isSessionValid()) {
Weibo.isWifi = Utility.isWifi(this);
try {
Class sso = Class.forName("com.weibo.sdk.android.api.WeiboAPI");// 如果支持weiboapi的话,显示api功能演示入口按钮
apiBtn.setVisibility(View.VISIBLE);
} catch (ClassNotFoundException e) {
// e.printStackTrace();
Log.i(TAG, "com.weibo.sdk.android.api.WeiboAPI not found"); }
authBtn.setVisibility(View.INVISIBLE);
ssoBtn.setVisibility(View.INVISIBLE);
cancelBtn.setVisibility(View.VISIBLE);
String date = new java.text.SimpleDateFormat("yyyy/MM/dd hh:mm:ss")
.format(new java.util.Date(MainActivity.accessToken
.getExpiresTime()));
mText.setText("access_token 仍在有效期内,无需再次登录: \naccess_token:"
+ MainActivity.accessToken.getToken() + "\n有效期:" + date);
} else {
mText.setText("使用SSO登录前,请检查手机上是否已经安装新浪微博客户端,目前仅3.0.0及以上微博客户端版本支持SSO;如果未安装,将自动转为Oauth2.0进行认证");
} } @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
} class AuthDialogListener implements WeiboAuthListener { @Override
public void onComplete(Bundle values) {
String token = values.getString("access_token");
String expires_in = values.getString("expires_in");
MainActivity.accessToken = new Oauth2AccessToken(token, expires_in);
if (MainActivity.accessToken.isSessionValid()) {
String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")
.format(new java.util.Date(MainActivity.accessToken
.getExpiresTime()));
mText.setText("认证成功: \r\n access_token: " + token + "\r\n"
+ "expires_in: " + expires_in + "\r\n有效期:" + date);
try {
Class sso = Class
.forName("com.weibo.sdk.android.api.WeiboAPI");// 如果支持weiboapi的话,显示api功能演示入口按钮
apiBtn.setVisibility(View.VISIBLE);
} catch (ClassNotFoundException e) {
// e.printStackTrace();
Log.i(TAG, "com.weibo.sdk.android.api.WeiboAPI not found"); }
cancelBtn.setVisibility(View.VISIBLE);
AccessTokenKeeper.keepAccessToken(MainActivity.this,
accessToken);
Toast.makeText(MainActivity.this, "认证成功", Toast.LENGTH_SHORT)
.show();
}
} @Override
public void onError(WeiboDialogError e) {
Toast.makeText(getApplicationContext(),
"Auth error : " + e.getMessage(), Toast.LENGTH_LONG).show();
} @Override
public void onCancel() {
Toast.makeText(getApplicationContext(), "Auth cancel",
Toast.LENGTH_LONG).show();
} @Override
public void onWeiboException(WeiboException e) {
Toast.makeText(getApplicationContext(),
"Auth exception : " + e.getMessage(), Toast.LENGTH_LONG)
.show();
} } @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data); /**
* 下面两个注释掉的代码,仅当sdk支持sso时有效,
*/
if (mSsoHandler != null) {
mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
}
} }

Android 使用新浪微博SSO授权的更多相关文章

  1. iOS做新浪微博sso授权登录遇到的一些坑

    新浪微博sso授权第三方登录,这里没有借助第三方框架,如shareSKD和友盟等,直接参考新浪官方SDK和文档. 过程中遇到几个坑,找了很久,好歹最后解决了,记录如下 问题1: _NSInlineDa ...

  2. 新浪微博SSO授权后回调客户端没有执行sinaweiboDidLogIn&无法返回应用

    TARGETS --> URL Types --> 添加  --> 在URL Schemes里填上sinaweibosso.XXXX(AppKey),Identifier这里可以随机 ...

  3. 应用程序间跳转 (友盟SSO 授权 与系统自带的分享)

    应用程序间跳转的应用场景 使用第三方用户登录,如微信登录,返回用户名和密码 需要用户授权,返回到调用程序,同时返回授权的用户名 应用程序推广,跳转到itunes并显示指定app下载页 第三方支付,跳转 ...

  4. iOS OAuth2.0认证和SSO授权

    OAuth2.0和SSO授权   一.OAuth2.0授权协议 一种安全的登陆协议,用户提交的账户密码不提交到本APP,而是提交到授权服务器,待服务器确认后,返回本APP一个访问令牌,本APP即可用该 ...

  5. OAuth2.0和SSO授权

    一.OAuth2.0授权协议 一种安全的登陆协议,用户提交的账户密码不提交到本APP,而是提交到授权服务器,待服务器确认后,返回本APP一个访问令牌,本APP即可用该访问令牌访问资源服务器的资源.由于 ...

  6. OAuth2.0和SSO授权的区别

    OAuth2.0和SSO授权   一.OAuth2.0授权协议 一种安全的登陆协议,用户提交的账户密码不提交到本APP,而是提交到授权服务器,待服务器确认后,返回本APP一个访问令牌,本APP即可用该 ...

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

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

  8. iOS配置SSO授权

    禁止/激活SSO授权 用于控制平台是否使用SSO方式进行授权(目前只支持新浪微博.Facebook.QQ空间.腾讯微博.人人网.Pocket.默认情况下是激活SSO授权方式.),代码如下: //激活S ...

  9. android开发新浪微博客户端 完整攻略 [新手必读]

    开始接触学习android已经有3个礼拜了,一直都是对着android的sdk文档写Tutorials从Hello World到Notepad Tutorial算是初步入门了吧,刚好最近对微博感兴趣就 ...

随机推荐

  1. 真机测试,Xcode报错:process launch failed: Security

    解决办法:手机->通用->设备管理->信任开发商应用即可

  2. 关于Visual Studio中的TraceDebugging文件夹

    最近一段时间发现C盘莫名其妙的变小了,各种清理各种卸载还是没用,电脑慢的是在无法使用 .最后只能一个文件夹一个文件夹的找,最后针对“C:\Documents and Settings\All User ...

  3. CListBox控件基本功能

    创建CListBox对象 CListBox m_ListBox;关联控件 ,同时注意行数从  0  开始计算 1.向控件中添加内容 int AddString(LPCTSTR lpszItem ); ...

  4. 编辑一个类库项目 即*.csproj这个文件的正确方式

    以前总是用记事本打开,删除一些或增加一些已修改的文件 今天才知道,正确的方式为: 右键单击类库,选择“卸载项目”,然后再右键单击已卸载变为灰色的类库,选择“编辑*.csproj” 编辑完了重新加载一下 ...

  5. 函数式编程做用户登陆注册练习-pycharm上

    def login(username,password): """ 用户登陆 :param username: 用户名 :param password:密码 :retur ...

  6. 无法将类型“System.Nullable`1”强制转换为类型“System.Object”。LINQ to Entities 仅支持强制转换 EDM 基元或枚举类型。

    在一个项目中使用LINQ和EF时出现了题目所示的异常,搜索了很多资料都找不到解决办法,主要是因为EF方面的知识欠缺. 先将情况记录如下,以供以后参考. 查询主要设计两张表,由外键关联: 在进行下面的查 ...

  7. 01 - 概述 VTK 6.0 迁移

    摘要 对vtk版本4和5的管道机制重新架架构的主要目的是:迁移数据对象和算法对象中的管道执行逻辑到一个新集合的类中,我们称这个集合类叫executives.分离数据和执行模型的代码后,可以双双简化修改 ...

  8. 开发自定义View

    当开发者打算派生自己的UI组件时,首先定义一个继承View基类的子类,然后重写View类的一个或多个方法,通常可以被用户重写的方法如下:构造器:重写构造器是定制View的最基本方法,当Java代码创建 ...

  9. 【转】VirtualBox direct access to SD Card in Windows--不错

    原文网址:http://www.sandyscott.net/2013/08/14/virtualbox-direct-drive-access/ I’ve trying to get my Rasp ...

  10. HDOJ 1335 Basically Speaking(进制转换)

    Problem Description The Really Neato Calculator Company, Inc. has recently hired your team to help d ...