[Android]-SDK QQ微信登入
在Unity中接入大量SDK,對(duì)一個(gè)零Android開(kāi)發(fā)基礎(chǔ)的人來(lái)說(shuō)還是比較蛋疼的.在網(wǎng)上搜了一大堆資料,總算折騰出一個(gè)能用的QQ&微信登入SDK.
在QQ互聯(lián)和微信開(kāi)放平臺(tái)注冊(cè),并申請(qǐng)相關(guān)權(quán)限后,可拿到指定AppID和AppSecret.有了這些東西才能讓接入SDK正常運(yùn)行.
QQ登入
先將官方的SDK,jar包導(dǎo)入項(xiàng)目.
再在onCreate中創(chuàng)建Tencent類(lèi)實(shí)例..
重寫(xiě)指定listener和onActivityResult..
//QQ登入 public void LoginQQ() {ShowToast("LoginQQ 調(diào)用");mTencent.logout(this);if (!mTencent.isSessionValid()) {ShowToast("LoginQQ 客戶端訪問(wèn)");mTencent.login(this, "all", loginListener);isServerSideLogin = false;} }//QQ登出 public void LogoutQQ() {mTencent.logout(this); }private class BaseUiListener implements IUiListener {@Overridepublic void onComplete(Object response) {if (null == response) {ShowToast("登錄失敗");return;}JSONObject jsonResponse = (JSONObject) response;if (null != jsonResponse && jsonResponse.length() == 0) {ShowToast("登錄失敗");return;}ShowToast("登錄成功 : " + response);doComplete((JSONObject) response);}protected void doComplete(JSONObject values) {}@Overridepublic void onError(UiError e) {ShowToast("QQ 登入異常");}@Overridepublic void onCancel() {ShowToast("QQ 登入取消");} }IUiListener loginListener = new BaseUiListener() {@Overrideprotected void doComplete(JSONObject values) {ShowToast("QQ 登入返回?cái)?shù)據(jù) :" + values);try {String token = values.getString(Constants.PARAM_ACCESS_TOKEN);String expires = values.getString(Constants.PARAM_EXPIRES_IN);String openId = values.getString(Constants.PARAM_OPEN_ID);if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(expires)&& !TextUtils.isEmpty(openId)) {mTencent.setAccessToken(token, expires);mTencent.setOpenId(openId);UnityPlayer.UnitySendMessage(AppConst.gameObject, AppConst.loginCallBack, openId);}} catch (Exception e) {}} };@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {Log.i("Tencent", "-->onActivityResult " + requestCode + " resultCode=" + resultCode);if (requestCode == Constants.REQUEST_LOGIN ||requestCode == Constants.REQUEST_APPBAR) {Tencent.onActivityResultData(requestCode, resultCode, data, loginListener);}super.onActivityResult(requestCode, resultCode, data); }
微信登入
先將官方的SDK,jar包和okhttp框架的jar包導(dǎo)入項(xiàng)目.
再在onCreate中初始化IWXAPI類(lèi)和okhttp(http框架).
//封裝okhttp框架的初始化配置
private void initOkHttp() {HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(null, null, null);CookieJarImpl cookieJar = new CookieJarImpl(new PersistentCookieStore(getApplicationContext()));OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(new LoggerInterceptor("TAG")).cookieJar(cookieJar).connectTimeout(20000L, TimeUnit.MILLISECONDS).readTimeout(20000L, TimeUnit.MILLISECONDS).writeTimeout(20000L, TimeUnit.MILLISECONDS).sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager)//其他配置.build();OkHttpUtils.initClient(okHttpClient); }微信SDK的接入,需要在wxapi文件夾中放入WXEntryActivity類(lèi),這是硬性要求.
WXEntryActivity類(lèi)需要實(shí)現(xiàn)IWXAPIEventHandler和Activity.主要實(shí)現(xiàn)如下.
private static final String TAG = "WXEntryActivity";public static WeChatCode mWeChatCode;public static WXEntryActivity mInstance;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Log.i(TAG, "-->> onCreate");mInstance = this;try {MainActivity.mWXapi.handleIntent(getIntent(), this);} catch (Exception e) {e.printStackTrace();}}//微信組件注冊(cè)初始化public static IWXAPI initWeiXin(Context context, String appId) {Log.i(TAG, "-->> initWeiXin");if (TextUtils.isEmpty(appId)) {Toast.makeText(context.getApplicationContext(), "app_id 不能為空", Toast.LENGTH_SHORT).show();}IWXAPI api = WXAPIFactory.createWXAPI(context, appId, true);api.registerApp(appId);return api;}// 登錄微信public static void loginWeixin(Context context, IWXAPI api, WeChatCode wechatCode) {Log.i(TAG, "-->> loginWeiXin");mWeChatCode = wechatCode;// 發(fā)送授權(quán)登錄信息,來(lái)獲取codeSendAuth.Req req = new SendAuth.Req();// 應(yīng)用的作用域,獲取個(gè)人信息req.scope = "snsapi_userinfo";req.state = "login_state";api.sendReq(req);}// 微信發(fā)送請(qǐng)求到第三方應(yīng)用時(shí),會(huì)回調(diào)到該方法@Overridepublic void onReq(BaseReq req) {}// 第三方應(yīng)用發(fā)送到微信的請(qǐng)求處理后的響應(yīng)結(jié)果,會(huì)回調(diào)到該方法@Overridepublic void onResp(BaseResp resp) {switch (resp.errCode) {// 發(fā)送成功case BaseResp.ErrCode.ERR_OK:MainActivity.mInstance.ShowToast("第一步:請(qǐng)求CODE 成功");// 獲取codeString code = ((SendAuth.Resp) resp).code;mWeChatCode.getResponse(code);break;case BaseResp.ErrCode.ERR_USER_CANCEL:MainActivity.mInstance.ShowToast("onResp ERR_USER_CANCEL");//發(fā)送取消finish();break;case BaseResp.ErrCode.ERR_AUTH_DENIED:MainActivity.mInstance.ShowToast("onResp ERR_AUTH_DENIED");//發(fā)送被拒絕break;default:MainActivity.mInstance.ShowToast("onResp default errCode " + resp.errCode);//發(fā)送返回break;}}/*** 返回code的回調(diào)接口*/public interface WeChatCode {void getResponse(String code);}通訊數(shù)據(jù)使用的是json格式.所以這里還需要為指定數(shù)據(jù)生成json數(shù)據(jù)類(lèi).關(guān)于json數(shù)據(jù)類(lèi)的生成,網(wǎng)上有現(xiàn)成的在線生成工具.
這里還有一個(gè)WXApi類(lèi)實(shí)現(xiàn),具體邏輯看Demo
AndroidManifest.xml配置文件中添加
<!-- QQ 登入 --><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="tencent 你的AppID" /></intent-filter></activity><activity android:name="com.tencent.connect.common.AssistActivity"android:theme="@android:style/Theme.Translucent.NoTitleBar"android:configChanges="orientation|keyboardHidden|screenSize"/><!-- 微信登入 --><activity android:name=".wxapi.WXEntryActivity"android:theme="@android:style/Theme.Translucent.NoTitleBar"android:configChanges="keyboardHidden|orientation|screenSize"android:exported="true"android:screenOrientation="portrait" />QQ SDK具體接入流程以及注意事項(xiàng)可查看http://wiki.connect.qq.com/
微信 SDK具體接入流程以及注意事項(xiàng)可查看
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=1417751808&token=&lang=zh_CN
在線生成工具類(lèi)鏈接http://tool.chinaz.com/tools/json2entity.aspx
源碼分享鏈接https://github.com/B-CK/QQ-WXLoginSDK
總結(jié)
以上是生活随笔為你收集整理的[Android]-SDK QQ微信登入的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 3、乐趣国学—“色难”
- 下一篇: 推荐书籍--白夜行