Android 使用新浪微博SSO授权

   新浪微博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("认证成功: rn access_token: " + token + "rn"

  + "expires_in: " + expires_in + "rn有效期:" + 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);

  }

  }

  }

时间: 2024-10-31 16:40:45

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

Android仿新浪微博oauth2.0授权界面实现代码(2)_Android

oauth2.0授权界面,大致流程图: 前提准备: 在新浪开放平台申请appkey和appsecret:http://open.weibo.com/. 熟悉oauth2.0协议,相关知识:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html OAuth2的access_token接口:http://open.weibo.com/wiki/OAuth2/access_token 代码详解 大致思路如下:建立一个webview加载授权界面,授权回

Android集成新浪微博第三方登录的方法_Android

本文实例讲述了Android集成新浪微博第三方登录的方法.分享给大家供大家参考.具体实现方法如下: 1.下载微博的sdk ,导入微博的jar包两个 android-support-v4.jar和weibosdkcore.jar两个包 2.把新浪微博中的demo_src中SDK中的com,导入到项目中 3.用demo中的constants,主要是参数设置,将里面的参数改成自己的参数. 4.编写代码,主要步骤如下: 复制代码 代码如下: // 初始化微博对象 mWeiboAuth = new Wei

Android仿新浪微博启动界面或登陆界面(1)_Android

本文为大家分享了Android模仿新浪微博启动界面&登陆界面的具体实现代码,供大家参考,具体内容如下 启动界面 主要有两个功能: 1.加载启动动画 2.判断网络,有者直接进入登陆界面,否则去设置网络 代码较简单,主要采用AlphaAnimation()方法和动画监听器,使一张图片产生渐变动画.在动画启动的时候判断网络,动画结束时完成判断并进入登陆界面. /** * Created by D&LL on 2016/5/25. * 初始页面加载界面 */ public class Splash

Android仿新浪微博启动界面或登陆界面(1)

本文为大家分享了Android模仿新浪微博启动界面&登陆界面的具体实现代码,供大家参考,具体内容如下 启动界面 主要有两个功能: 1.加载启动动画 2.判断网络,有者直接进入登陆界面,否则去设置网络 代码较简单,主要采用AlphaAnimation()方法和动画监听器,使一张图片产生渐变动画.在动画启动的时候判断网络,动画结束时完成判断并进入登陆界面. /** * Created by D&LL on 2016/5/25. * 初始页面加载界面 */ public class Splash

Android端 支付宝第三方授权

问题描述 Android端 支付宝第三方授权 Android端 支付宝第三方授权需要哪些接口权限?我就申请了一个移动支付,然后发送请求没有任何反应,也打不开授权页面.而且授权页面是封装在sdk里的吗?请求成功的话是自动打开的吗?? 解决方案 看一下你的异步回调 以及同步回调

Android仿新浪微博分页管理界面(3)

本文实例为大家分享了Android仿新浪微博分页管理界面的具体代码,供大家参考,具体内容如下 多个activity分页管理,为了方便获取上下文,采用继承TabActivity的传统方法. 大致思路:使用RadioGroup点击触发不同的选卡项,选卡项绑定不同的activiity,进而进行分页管理.详解见注解. /** * 主Activity * 通过点击RadioGroup下的RadioButton来切换不同界面 * Created by D&LL on 2016/7/20. */ public

Android仿新浪微博oauth2.0授权界面实现代码(2)

oauth2.0授权界面,大致流程图: 前提准备: 在新浪开放平台申请appkey和appsecret:http://open.weibo.com/. 熟悉oauth2.0协议,相关知识:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html OAuth2的access_token接口:http://open.weibo.com/wiki/OAuth2/access_token 代码详解 大致思路如下:建立一个webview加载授权界面,授权回

Android仿新浪微博、QQ空间等帖子显示(2)_Android

一.介绍 这是新浪微博的一个帖子,刚好包括了话题.表情.@好友三种显示.显示方法上篇已经阐述了,就是使用SpannableString.这篇主要介绍显示这种帖子的解析工具类. 二.实现 1.字符串表示和对应正则表达式 话题用##号括起来 表情用[]表示 @好友昵称 借助正则匹配来解析帖子信息. 话题 -> #[^#]+# 表情 -> [[^]]+] @好友 -> @好友昵称 2.写一个通用方法,对spanableString进行正则判断,如果符合要求,则将内容变色 private sta

Android仿新浪微博自定义ListView下拉刷新(4)_Android

自定义PullToRefreshListView继承ListView,在ListView头部添加一个下拉的头部布局.跟ListView用法完全一致. 该自定义Listview代码详解具体可参考: http://www.jb51.net/article/97845.htm 此处详细介绍Adapter的详细代码. 1.首先给Adapter绑定ListView布局. 2.其次创建一个层次对应组件的类,将对应的组件和对象进行关联,提高效率. 3.然后跟陆获得的图片路径异步下载图片,由于不知道该微博图片的