Android 使用新浪微博SSO授权
Android 使用新浪微博SSO授权
发布时间:2015-06-05 来源:查字典编辑
摘要:新浪微博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@) 这位是新浪SSO认证的开发者,很优秀的开发者

*/

public class MainActivity extends Activity {

private Weibo mWeibo;

private static final String CONSUMER_KEY = "966056985";// 替换为开发者的appkey,例如"1646212860";

private static final String REDIRECT_URL = "";

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(yout.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);

}

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新安卓软件开发学习
热门安卓软件开发学习
编程开发子分类