Android調(diào)用第三方QQ登錄代碼分享
本文為大家分享了調(diào)用QQ登錄的相關(guān)代碼,希望對(duì)大家有幫助,減少項(xiàng)目開發(fā)的時(shí)間,具體內(nèi)容如下
1、去QQ開放平臺(tái)注冊(cè)帳號(hào)(http://open.qq.com/),為應(yīng)用申請(qǐng)QQ的APP_ID , 并下載相關(guān)的jar包,放到工程的lib目錄下。
2、在Manifest.xml里注冊(cè)QQ相關(guān)的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提供的相關(guān)API去獲取相關(guān)的OPENID,昵稱,圖像等資料。這里有一點(diǎn)要注意的是,由于QQ服務(wù)器返回OPENID和昵稱等其他資料是分兩步進(jìn)行的,而首先返回的OPENID速度很快,返回昵稱等其他資料可能會(huì)比較慢,所以在返回OPENID的時(shí)候,就可以認(rèn)為已經(jīng)調(diào)用QQ登錄成功,再用異步的方式處理昵稱等其他資料信息。以下是代碼部 分,已經(jīng)過項(xiàng)目測(cè)試,可直接用(替換相應(yīng)的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 這里要替換成自己申請(qǐng)的APP_ID Tencent 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; } @Override public 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(); } } @Override public void onError(UiError arg0) { qqLoginListener.onLoginFail(); } @Override public void onCancel() { qqLoginListener.onCancel(); } } class BaseApiListener implements IRequestListener{ QqLoginListener qqLoginListener = null; public BaseApiListener(QqLoginListener qqLoginListener) { super(); this.qqLoginListener = qqLoginListener; } @Override public 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); //發(fā)送廣播到主頁去更新 BroadcastUtil.sendBroadcast(BroadcastAction.UPLOAD_THIRD_INFO); } catch (Exception e) { e.printStackTrace(); } } @Override public void onConnectTimeoutException(ConnectTimeoutException arg0, Object arg1) { } @Override public void onHttpStatusException(HttpStatusException arg0, Object arg1) { } @Override public void onIOException(IOException arg0, Object arg1) { } @Override public void onJSONException(JSONException arg0, Object arg1) { } @Override public void onMalformedURLException(MalformedURLException arg0, Object arg1) { } @Override public void onNetworkUnavailableException( NetworkUnavailableException arg0, Object arg1) { } @Override public void onSocketTimeoutException(SocketTimeoutException arg0, Object arg1) { } @Override public void onUnknowException(Exception arg0, Object arg1) { } } /** * 授權(quán)完成后,執(zhí)行一下步的回調(diào) */ public static abstract class QqLoginListener{ public void onLoginSuccess(String openid){}; public void onLoginSuccess(String openid, String nickname){}; public void onLoginFail(){}; public void onCancel(){}; }
好了,到里代碼部分已經(jīng)寫完,只需要調(diào)用login(Activity context , QqLoginListener loginListener)方法就可以了。
以上就是Android調(diào)用第三方登錄的詳細(xì)步驟和思路,希望對(duì)大家的學(xué)習(xí)有所幫助。
- Android Studio實(shí)現(xiàn)簡(jiǎn)單的QQ登錄界面的示例代碼
- Android使用友盟集成QQ、微信、微博等第三方分享與登錄方法詳解
- Android仿QQ在狀態(tài)欄顯示登錄狀態(tài)效果
- Android Studio實(shí)現(xiàn)第三方QQ登錄操作代碼
- Android第三方登錄之QQ登錄
- Android實(shí)現(xiàn)QQ登錄功能
- Android第三方登錄之騰訊QQ登錄的實(shí)例代碼
- Android QQ登錄界面繪制代碼
- Android實(shí)現(xiàn)QQ登錄界面遇到問題及解決方法
- Android實(shí)現(xiàn)簡(jiǎn)單QQ登錄頁面
相關(guān)文章
Android實(shí)現(xiàn)動(dòng)態(tài)圓環(huán)的圖片頭像控件
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)帶有動(dòng)態(tài)圓環(huán)的圓形圖片控件DynamicAvatarView的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11Android集成百度地圖開發(fā)流程和注意事項(xiàng)
現(xiàn)在很多項(xiàng)目都需要集成百度地圖,所以就把自己做過一個(gè)項(xiàng)目的經(jīng)驗(yàn)寫出來和大家分享,方便自己和大家使用的時(shí)候參考借鑒,下面就來一起看看Android集成百度地圖開發(fā)流程和注意事項(xiàng)吧。2016-09-09RecyclerView仿應(yīng)用列表實(shí)現(xiàn)網(wǎng)格布局
這篇文章主要為大家詳細(xì)介紹了RecyclerView仿應(yīng)用列表實(shí)現(xiàn)網(wǎng)格布局,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09Android自定義控件實(shí)現(xiàn)方向盤效果
這篇文章主要為大家詳細(xì)介紹了Android自定義控件實(shí)現(xiàn)方向盤效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04Android Studio Gradle 更換阿里云鏡像的方法
這篇文章主要介紹了Android Studio Gradle 更換阿里云鏡像的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09android Socket實(shí)現(xiàn)簡(jiǎn)單聊天小程序
這篇文章主要為大家詳細(xì)介紹了android Socket實(shí)現(xiàn)簡(jiǎn)單聊天小程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06Flutter?彈性布局基石flex算法flexible示例詳解
這篇文章主要為大家介紹了Flutter?彈性布局基石flex算法flexible示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12