Android 調用QQ登入

來源:互聯網
上載者:User

標籤: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登入

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.