標籤:qq登入 第三方登入 android調用qq登入 qq登入源碼
調用QQ登入
在現在的項目開發,調用第三方登入,幾乎是必須的,而調用QQ登入也是必不可少的,這裡把相關代碼分享出來,希望能拿去就可以用,減少項目開發的時間,希望對大家有用。
1,去QQ開放平台註冊帳號(http://open.qq.com/),為應用申請QQ的APP_ID , 並下載相關的jar包,放到工程的lib目錄下。
2,在Manifest.xml裡註冊QQ相關的Activity,代碼如下
<activity android:name="com.tencent.connect.common.AssistActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <activity android:name="com.tencent.tauth.AuthActivity" android:launchMode="singleTask" android:noHistory="true" > <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="tencent100491239" /> </intent-filter> </activity>
3,利用QQ提供的相關API去擷取相關的OPENID,暱稱,映像等資料。這裡有一點要注意的是,由於QQ伺服器返回OPENID和暱稱等其他資料是分兩步進行的,而首先返回的 OPENID速度很快,返回暱稱等其他資料可能會比較慢,所以在返回OPENID的時候,就可以認為已經調用QQ登入成功,再用非同步方式處理暱稱等其他資料資訊。以下是代碼部 分,已經過項目測試,可直接用(替換相應的APP_ID就可以了)
import java.io.IOException;import java.net.MalformedURLException;import java.net.SocketTimeoutException;import org.apache.http.conn.ConnectTimeoutException;import org.json.JSONException;import org.json.JSONObject;import android.app.Activity;import com.smart.util.BroadcastAction;import com.smart.util.BroadcastUtil;import com.smart.util.Constant;import com.smart.util.ILog;import com.smart.util.PrefUtil;import com.smart.util.Prefkey;import com.tencent.open.HttpStatusException;import com.tencent.open.NetworkUnavailableException;import com.tencent.tauth.Constants;import com.tencent.tauth.IRequestListener;import com.tencent.tauth.IUiListener;import com.tencent.tauth.Tencent;import com.tencent.tauth.UiError;import com.utils.lib.ss.common.ToastHelper;/** * QQ登陸。 * @author E */public class QqLogin {private static QqLogin qqLogin = null;public static QqLogin getInstance(){if (null == qqLogin) {qqLogin = new QqLogin();}return qqLogin;}public void login(Activity context , QqLoginListener loginListener){ //Constant.QQ_APP_ID 這裡要替換成自己申請的APP_IDTencent tencent = Tencent.createInstance(Constant.QQ_APP_ID, context);if (null == tencent) {ToastHelper.makeText(context, "error cased !");return;}tencent.login(context, "get_user_info", new BaseUiListener(tencent,loginListener));}class BaseUiListener implements IUiListener{Tencent tencent = null;QqLoginListener qqLoginListener = null;public BaseUiListener(Tencent tencent ,QqLoginListener qqLoginListener) {super();this.tencent = tencent;this.qqLoginListener = qqLoginListener;}@Overridepublic void onComplete(JSONObject values) {try {String openid = values.getString("openid");qqLoginListener.onLoginSuccess(openid);tencent.requestAsync(Constants.GRAPH_SIMPLE_USER_INFO, null, Constants.HTTP_GET, new BaseApiListener(qqLoginListener) ,null);} catch (Exception e) {e.printStackTrace();}}@Overridepublic void onError(UiError arg0) {qqLoginListener.onLoginFail();}@Overridepublic void onCancel() {qqLoginListener.onCancel();}}class BaseApiListener implements IRequestListener{ QqLoginListener qqLoginListener = null;public BaseApiListener(QqLoginListener qqLoginListener) {super();this.qqLoginListener = qqLoginListener;}@Overridepublic void onComplete(JSONObject jsonObject, Object object) {try {ILog.e(jsonObject.toString());String nickName = jsonObject.getString("nickname");String figureurl_qq_1 = jsonObject.getString("figureurl_qq_2");PrefUtil.instance().setPref(Prefkey.THIRD_NICKNAME, nickName);PrefUtil.instance().setPref(Prefkey.THIRD_IMAGE, figureurl_qq_1);//發送廣播到首頁去更新BroadcastUtil.sendBroadcast(BroadcastAction.UPLOAD_THIRD_INFO);} catch (Exception e) {e.printStackTrace();}}@Overridepublic void onConnectTimeoutException(ConnectTimeoutException arg0,Object arg1) {}@Overridepublic void onHttpStatusException(HttpStatusException arg0, Object arg1) {}@Overridepublic void onIOException(IOException arg0, Object arg1) {}@Overridepublic void onJSONException(JSONException arg0, Object arg1) {}@Overridepublic void onMalformedURLException(MalformedURLException arg0,Object arg1) {}@Overridepublic void onNetworkUnavailableException(NetworkUnavailableException arg0, Object arg1) {}@Overridepublic void onSocketTimeoutException(SocketTimeoutException arg0,Object arg1) {}@Overridepublic void onUnknowException(Exception arg0, Object arg1) {}}/** * 授權完成後,執行一下步的回調 */public static abstract class QqLoginListener{public void onLoginSuccess(String openid){};public void onLoginSuccess(String openid, String nickname){};public void onLoginFail(){};public void onCancel(){};}
好了,到裡代碼部分已經寫完,只需要調用login(Activity context , QqLoginListener loginListener)方法就可以了。
Android 調用QQ登入