package com.qiwenge.android.login; import android.app.Activity; import android.os.Bundle; import android.widget.Toast; import com.google.gson.Gson; import com.liuguangqiang.framework.utils.ToastUtils; import com.loopj.android.http.RequestParams; import com.qiwenge.android.constant.Constant_Sina; import com.qiwenge.android.entity.SinaUser; import com.qiwenge.android.utils.http.BaseResponseHandler; import com.qiwenge.android.utils.http.JHttpClient; import com.sina.weibo.sdk.WeiboSDK; import com.sina.weibo.sdk.api.IWeiboAPI; 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.sso.SsoHandler; import com.weibo.sdk.android.util.AccessTokenKeeper; public class SinaWeiboLogin { public static SsoHandler mSsoHandler; public static Oauth2AccessToken mAccessToken; private static IWeiboAPI mWeiboAPI = null; private static AuthListener authListener; /** * 新浪微博登陆。 */ public static void login(final Activity activity, AuthListener listener) { ThirdLoginUtils.loginType = LoginType.weibo; authListener = listener; authListener.onStart(); mWeiboAPI = WeiboSDK.createWeiboAPI(activity, Constant_Sina.APP_KEY); mWeiboAPI.registerApp(); if (!mWeiboAPI.isWeiboAppInstalled()) { ToastUtils.show(activity.getApplicationContext(), "你尚未安装微博,不能用微博登陆"); listener.onFailure(); return; } mSsoHandler = new SsoHandler(activity, getSinaWeibo()); mSsoHandler.authorize(new WeiboAuthListener() { @Override public void onWeiboException(WeiboException e) { Toast.makeText(activity.getApplicationContext(), "Auth error : " + e.getMessage(), Toast.LENGTH_LONG) .show(); if (authListener != null) authListener.onFailure(); } @Override public void onError(WeiboDialogError e) { Toast.makeText(activity.getApplicationContext(), "Auth error : " + e.getMessage(), Toast.LENGTH_LONG) .show(); if (authListener != null) authListener.onFailure(); } @Override public void onComplete(Bundle values) { System.out.println("login sina onComplete"); String token = values.getString("access_token"); String expires_in = values.getString("expires_in"); String username = ""; String uid = ""; mAccessToken = new Oauth2AccessToken(token, expires_in); if (mAccessToken.isSessionValid()) { AccessTokenKeeper.keepAccessToken( activity.getApplicationContext(), mAccessToken); if (values.containsKey("userName")) username = values.getString("userName"); if (values.containsKey("uid")) uid = values.getString("uid"); getUserInfoOfSina(token, uid, username); } } @Override public void onCancel() { if (authListener != null) authListener.onFailure(); } }); } public static void getUserInfoOfSina(String accessToken, final String uid, final String username) { String url = "https://api.weibo.com/2/users/show.json"; System.out.println("getUserInfoOfSina"); RequestParams params = new RequestParams(); params.put("access_token", accessToken); params.put("uid", uid); JHttpClient.get(null, url, params, new BaseResponseHandler() { @Override public void onSuccess(String result) { SinaUser sinaUser = new Gson().fromJson(result, SinaUser.class); if (sinaUser != null) { System.out.println("avatar-sina:" + sinaUser.avatar_large); if (authListener != null) { authListener.authSuccess(uid, username, sinaUser.avatar_large, LoginType.weibo); } } } @Override public void onFailure(String msg) { if (authListener != null) authListener.onFailure(); } }); } /** * 初始化新浪微博。 */ public static Weibo getSinaWeibo() { return Weibo.getInstance(Constant_Sina.APP_KEY, Constant_Sina.REDIRECT_URL, Constant_Sina.SCOPE); } }