[Android]-SDK QQ&微信登入
来源:互联网 发布:qq三国79js 79xs 编辑:程序博客网 时间:2024/05/22 06:10
在Unity中接入大量SDK,对一个零Android开发基础的人来说还是比较蛋疼的.在网上搜了一大堆资料,总算折腾出一个能用的QQ&微信登入SDK.
在QQ互联和微信开放平台注册,并申请相关权限后,可拿到指定AppID和AppSecret.有了这些东西才能让接入SDK正常运行.
QQ登入
先将官方的SDK,jar包导入项目.
再在onCreate中创建Tencent类实例..
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i("MainActivity", "---->>onCreate"); mInstance = this; mTencent = Tencent.createInstance(AppConst.AppID_QQ, this.getApplicationContext()); mWXapi = WXEntryActivity.initWeiXin(this, AppConst.AppID_WX); initOkHttp();}
重写指定listener和onActivityResult..
//QQ登入public void LoginQQ() { ShowToast("LoginQQ 调用"); mTencent.logout(this); if (!mTencent.isSessionValid()) { ShowToast("LoginQQ 客户端访问"); mTencent.login(this, "all", loginListener); isServerSideLogin = false; }}//QQ登出public void LogoutQQ() { mTencent.logout(this);}private class BaseUiListener implements IUiListener { @Override public 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) { } @Override public void onError(UiError e) { ShowToast("QQ 登入异常"); } @Override public void onCancel() { ShowToast("QQ 登入取消"); }}IUiListener loginListener = new BaseUiListener() { @Override protected void doComplete(JSONObject values) { ShowToast("QQ 登入返回数据 :" + 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) { } }};@Overrideprotected 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包导入项目.
再在onCreate中初始化IWXAPI类和okhttp(http框架).
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i("MainActivity", "---->>onCreate"); mInstance = this; mTencent = Tencent.createInstance(AppConst.AppID_QQ, this.getApplicationContext()); mWXapi = WXEntryActivity.initWeiXin(this, AppConst.AppID_WX); initOkHttp();}
//封装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类,这是硬性要求.
WXEntryActivity类需要实现IWXAPIEventHandler和Activity.主要实现如下.
private static final String TAG = "WXEntryActivity"; public static WeChatCode mWeChatCode; public static WXEntryActivity mInstance; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i(TAG, "-->> onCreate"); mInstance = this; try { MainActivity.mWXapi.handleIntent(getIntent(), this); } catch (Exception e) { e.printStackTrace(); } } //微信组件注册初始化 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; // 发送授权登录信息,来获取code SendAuth.Req req = new SendAuth.Req(); // 应用的作用域,获取个人信息 req.scope = "snsapi_userinfo"; req.state = "login_state"; api.sendReq(req); } // 微信发送请求到第三方应用时,会回调到该方法 @Override public void onReq(BaseReq req) { } // 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法 @Override public void onResp(BaseResp resp) { switch (resp.errCode) { // 发送成功 case BaseResp.ErrCode.ERR_OK: MainActivity.mInstance.ShowToast("第一步:请求CODE 成功"); // 获取code String code = ((SendAuth.Resp) resp).code; mWeChatCode.getResponse(code); break; case BaseResp.ErrCode.ERR_USER_CANCEL: MainActivity.mInstance.ShowToast("onResp ERR_USER_CANCEL"); //发送取消 finish(); break; case BaseResp.ErrCode.ERR_AUTH_DENIED: MainActivity.mInstance.ShowToast("onResp ERR_AUTH_DENIED"); //发送被拒绝 break; default: MainActivity.mInstance.ShowToast("onResp default errCode " + resp.errCode); //发送返回 break; } } /** * 返回code的回调接口 */ public interface WeChatCode { void getResponse(String code); }
通讯数据使用的是json格式.所以这里还需要为指定数据生成json数据类.关于json数据类的生成,网上有现成的在线生成工具.
这里还有一个WXApi类实现,具体逻辑看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具体接入流程以及注意事项可查看http://wiki.connect.qq.com/
微信 SDK具体接入流程以及注意事项可查看
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=1417751808&token=&lang=zh_CN
在线生成工具类链接http://tool.chinaz.com/tools/json2entity.aspx
源码分享链接https://github.com/B-CK/QQ-WXLoginSDK
- [Android]-SDK QQ&微信登入
- Android集成SDK实现QQ登录教程
- Android QQ SDK分享功能接入
- Android QQ SDK登录功能接入
- android QQ空间,QQ好友分享 SDK具体使用过程
- Android端不通过登录SDK实现QQ登录验证
- android qq第三方登录(腾讯sdk)
- android上不使用qq的SDK,用WebView登陆qq的方法。
- 使用QQ互联Android SDK 实现本地图片的QQ定向分享
- qq微博 PHP SDK
- QQ微博SDK
- QQ登录iOS SDK
- qq互联安卓sdk接入
- qq微信c#sdk
- QQ SDK的那些事
- java sdk qq授权登录
- QQ快捷登录(sdk登录)
- Android中使用腾讯的SDK完成分享图文到qq空间
- Android热修复之Sophix初探
- 5 sklearn的数据集-datasets
- 手机号码和电话号的正则判断
- Android串口通信:串口读写
- canvas-基本应用-例子2
- [Android]-SDK QQ&微信登入
- dedecms ckeditor上传图片内容使用绝对地址
- pytorch-multi-gpu
- CSS设置边界
- mysql插入中文报错
- 创建安卓app的30个经验教训
- linux命令-tar
- 来自看雪的手把手调试DebugPort清零
- Unity3D 热更新方案