Red de conocimiento informático - Material del sitio web - Cómo permitir que Sina Weibo admita la autorización SSO

Cómo permitir que Sina Weibo admita la autorización SSO

Cómo hacer que Sina Weibo admita la autorización SSO:

La autorización SSO se refiere a una forma sencilla de invocar la autorización del comportamiento del cliente Weibo con un solo clic. Muchas aplicaciones la utilizan como aplicación de terceros debido a su simplicidad y. facilidad de uso. Opciones de inicio de sesión.

Por supuesto, si desea utilizar esta función, primero debe tener un cliente local; de lo contrario, utilizará el método de autorización web e ingresará lentamente su número de cuenta y contraseña para obtener la autorización.

Antes de codificar, debes hacer algunos preparativos sencillos para ello.

1. Descargue el SDK oficial, que contiene ejemplos y herramientas de firma MD5.

SDK oficial

La herramienta de firma que contiene obtendrá el valor MD5 según el nombre del paquete que ingrese, que necesita para crear la aplicación correctamente.

También hay weiboSDK dentro, que debes agregar a tu aplicación para hacer referencia a sus métodos.

2. Agregar acceso a la red en el manifiesto

3. Necesitas crear una aplicación en la plataforma abierta de Sina.

¡Crea una aplicación!

Interfaz para definir parámetros de autorización:

(Honestamente, copié la demostración directamente y la cambié a mi propia información de autorización).

[html]¿Ver Plaincopyprint?

Constantes de interfaz pública {

/** La APP_KEY de la aplicación DEMO actual, las aplicaciones de terceros deben usar la suya propia APP_KEY Reemplazar APP_KEY */

cadena final estática pública APP_KEY = "1608434710";

cadena final estática pública REDIRECT_URL = ""; ALCANCE =

"email, direct_messages_read, direct_messages_write",

"friends_groups_read, friends_groups_write, status_to_me_read",

"follow_app_official_microblog", "invitation_write"

}

Información de autorización de caché:

[html] ¿ver Plaincopyprint?

/**

* Esta clase define Parámetros necesarios para la autorización de Weibo.

*/

Clase pública AccessTokenKeeper {

Cadena final estática privada PREFERENCES_NAME = "com_weibo_sdk_android";

Cadena final estática privada KEY_UID = "uid";

Cadena final estática privada KEY_ACCESS_TOKEN = "access_token";

Cadena final estática privada KEY_EXPIRES_IN = "expires_in"

/**

* Guarde el objeto token en SharedPreferences.

*

* @param context Entorno de contexto de aplicación

* @ param token token objeto

*/

public static void writeAccessToken(Contexto contexto, token Oauth2AccessToken) {

if (null == contexto || null == token) {

return;

}

Preferencias Compartidas pref = context.getSharedPreferences(PREFERENCES_NAME, Context.getToken());

editor.putLong(KEY_EXPIRES_IN, token.getExpiresTime());

editor.commit();

}

/**

* Leer claves de SharedPreferences. Leer claves de SharedPreferences.

*

* @param contexto contexto de aplicación

*

* @return Devolver objeto token

* /

público estático Oauth2AccessToken readAccessToken (contexto de contexto) {

if (null == contexto) {

return null;

}

Token Oauth2AccessToken = new Oauth2AccessToken();

SharedPreferences pref = context.setExpiresTime(pref.getLong(KEY_EXPIRES_IN, 0));

token de retorno;

}

/**

* Borre la información del token en SharedPreferences.

*

* @param context Entorno de contexto de aplicación

*/

public static void clear(Contexto de contexto) {

if (null == contexto) {

return ;

}

PreferenciasCompartidas pref = contexto.getSharedPreferences(PREFERENCES_NAME, Context.MODE_APPEND);

Editor editor = pref.edit();

editor.clear()

editor.commit();

}

Autorización SSO integrada para obtener nombre de usuario:

[html] ¿ver Plaincopyprint?

/ **

* Esta clase demuestra cómo realizar la autorización y el inicio de sesión SSO.

*/

clase pública WBAuthActivity extiende la actividad implementa OnClickListener {

/** Muestra información después de la autenticación, como AccessToken */

TextView privado mTokenText;

/** Clase de autorización web de Weibo, que proporciona inicio de sesión y otras funciones*/

WeiboAuth privado mWeiboAuth;

/** Encapsulación " access_token", "expires_in", "refresh _token " y proporciona sus funciones de administración*/

private Oauth2AccessToken mAccessToken;

/** Nota: SsoHandler solo es válido cuando el SDK admite SSO */

SsoHandler privado mSsoHandler;

/** Interfaz de información de usuario*/

UsersAPI privado mUsersAPI;

Botón privado ssoBtn;

@Override

public void onCreate (Paquete guardadoInstanceState) {

Superusuario. onCreate(savedInstanceState);

setContentView(R. layout.

SCOPE);

// Lea el último token de acceso guardado y otra información de SharedPreferences,

// El token de acceso no está disponible cuando se inicia esta aplicación por primera vez

p >

mAccessToken = AccessTokenKeeper.readAccessToken(this);

if (mAccessToken.isSessionValid()) {

updateTokenView(true);

}

ssoBtn.setOnClickListener(this);

}

/**

* Esta función se llama cuando sale la actividad de autorización SSO.

*/

@Override

protected void onActivityResult(int requestCode, int resultCode, datos de intención) {

super.onActivityResult( requestCode, resultCode, data);

//Devolución de llamada de autorización de SSO

//Importante: la actividad que inicia el inicio de sesión de SSO debe anular onActivityResult

if (mSsoHandler ! = nulo) {

mSsoHandler.authorizeCallBack(requestCode, resultCode, datos);

}

}

/**

* Clase de devolución de llamada de autorización y autenticación de Weibo. 1.1. La autorización SSO requiere que se ejecute una devolución de llamada en {@link #onActivityResult}

* {@link SsoHandler#authorizeCallBack} antes de que se ejecute la devolución de llamada. 2. Para autorización sin SSO

*, la devolución de llamada se ejecutará una vez completada la autorización. Después de una autorización exitosa, guarde access_token, expires_in, uid y otra información en

* SharedPreferences.

*/

clase AuthListener implementa WeiboAuthListener {

// Autorización completada

@Override

public void onComplete(Valores del paquete) {

// Analizar token del paquete

mAccessToken = Oauth2AccessToken.parseAccessToken(valores);

if (mAccessToken.isSessionValid( )) makeText(WBAuthActivity.this, "success!!!" ,

Toast.LENGTH_SHORT).show();

// Obtiene el apodo del usuario según el uid, porque se encuentra el uid En los datos pasados ​​desde el servidor en el método de devolución de llamada.

long uid = Long.parseLong(mAccessToken.getUid());

mUsersAPI.show(uid, mListener

} else {

// Así es como recibirás el código:

// Recibirás el código:

// 1), 2) y 3). Cuando no registra el nombre del paquete y la firma de la aplicación en la plataforma;

// 2. Cuando registra la aplicación con el nombre y la firma del paquete incorrectos;

// 3. Cuando el nombre del paquete y la firma que registró en la plataforma no coinciden con el nombre del paquete y la firma de la aplicación que está probando actualmente.

Toast.makeText(WBAuthActivity.this, "fail", Toast.LENGTH_LONG)

.show();

}

}

@Override

public void onCancel() {

Toast.makeText(WBAuthActivity.this, "cancel", Toast.LENGTH_LONG)

.show();

}

// Excepción de autorización

@Override

public void onWeiboException(WeiboException e) {

Toast.makeText(WBAuthActivity.this,

"Excepción de autenticación: " e.getMessage(), Toast.LENGTH_LONG)

.show();

}

}

}

}

/**

* Muestra información del token actual. Si la información del token ya existe en el archivo de configuración y es legal

*/

public void updateTokenView(boolean hasExisted) {

// GetUsersInfoInterface

mUsersAPI = nueva UsersAPI(mAccessToken);

Fecha de cadena = nueva SimpleDateFormat("aaaa/MM/dd HH:mm:ss")

.format(nueva java . util.Date(mAccessToken. getExpiresTime());

Formato de cadena = getString(R.string.Date(mAccessToken. getExpiresTime()))

.string.weibosdk_demo_token_has_existed)< / p>

"\n" mensaje;

// Obtiene el apodo del usuario según el uid, porque el uid está en los datos pasados ​​desde el servidor mediante el método de devolución de llamada.

long uid = Long.parseLong(mAccessToken.getUid());

mUsersAPI.show(uid, mListener

}

<); p>mTokenText.setText(mensaje);

}

/**

* Interfaz de devolución de llamada Weibo OpenAPI.

*/

SolicitudListener privada mListener = nueva RequestListener() {

@Override

public void onComplete(respuesta de cadena) {

if (!TextUtils.isEmpty(response)) {

// Llame a User#parse para analizar la cadena JSON en un objeto de usuario

Usuario usuario = User.parse(respuesta);

if (usuario! = null) {

Toast.makeText(WBAuthActivity.this,

"Obteniendo usuario la información fue exitosa, apodo del usuario: " user.show();

}

}

}

@Override

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 código auxiliar de método generado automáticamente

if (v == ssoBtn) {

mSsoHandler = new SsoHandler(WBAuthActivity.this, mWeiboAuthActivity.text)this, mWeiboAuth);

mSsoHandler.authorize(new AuthListener());

}

}

}

}

}

}

}

Diseño:

[html] ver Plaincopyprint?

lt;?xml version="1.0" encoding="utf-8"?

lt; LinearLayout xmlns: android="/apk/res/ android"

android: layout_width="match_parent"

android: layout_height="match_parent"

android: orientación="vertical" gt;

lt;com.sina.weibo.sdk.widget.LoginButton

android:id="@ id/btn _sso"

android:layout_width="wrap_content"

android: poner

out_height="wrap_content"

android:layout_marginLeft="10dp"/gt;

lt;TextView

android:id="@ id/tv_txt"

android: layout_width="wrap_content"

android: layout_height="wrap _content"

android: text="info" /gt;

lt;/LinearLayoutgt;