Android应用实现QQ登录
来源:互联网 发布:单身潮 知乎 编辑:程序博客网 时间:2024/04/29 05:11
QQ登录总结
1权限和activity配置直接从官方文档拷贝到manifest文件
<activity android:name="com.tencent.tauth.AuthActivity" android:noHistory="true" android:launchMode="singleTask" > <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="tencent1106103067" /> </intent-filter> </activity>
<data android:scheme="tencent1106103067" />这一行要自己修改,tencent后添加自己的appid。
2 初始化对象和实现回调接口,放在activity的oncreate()方法就行。三个IUiListener对象,分别是登录成功回调、获取用户信息回调和分享成功回调。
private void initQQLogeIn() { mTencent = Tencent.createInstance(QQ_APPID, MyWebView.this.getApplication()); scope = "all"; { mTencent = Tencent.createInstance(QQ_APPID, MyWebView.this.getApplication()); scope = "all"; loginListener = new IUiListener() { @Override public void onError(UiError arg0) { } @Override public void onComplete(Object value) { if (value == null) { return; } try { JSONObject jo = (JSONObject) value; int ret = jo.getInt("ret"); System.out.println("json=" + String.valueOf(jo)); if (ret == 0) { String openID = jo.getString("openid"); id=openID; String accessToken = jo.getString("access_token"); String expires = jo.getString("expires_in"); mTencent.setOpenId(openID); mTencent.setAccessToken(accessToken, expires); userInfo=new UserInfo(MyWebView.this.getApplicationContext(), mTencent.getQQToken()); userInfo.getUserInfo(userInfoListener); } } catch (Exception e) { } } @Override public void onCancel() { } }; userInfoListener = new IUiListener() { @Override public void onError(UiError arg0) { Message msg=new Message(); msg.what=222; msg.obj=fail; handler.sendMessage(msg); } @Override public void onComplete(Object arg0) { if(arg0 == null){ return; } try { JSONObject jo = (JSONObject) arg0; Message msg=new Message(); msg.what=222; String nickName = jo.getString("nickname"); String gender = jo.getString("gender"); String city=jo.getString("city"); String province=jo.getString("province"); String result=id+"/"+nickName+"/"+gender+"/"+city+"/"+province; msg.obj=result; handler.sendMessage(msg); } catch (Exception e) { } } @Override public void onCancel() { } }; shareListener=new IUiListener() { @Override public void onComplete(Object o) { Log.e("test", "onComplete: "+o.toString() ); } @Override public void onError(UiError uiError) { Log.e("test", "onError: "+uiError.toString() ); } @Override public void onCancel() { Log.e("test", "onCancel: "); } }; } }3 实现登录逻辑
private void QQLogoIn() { isHasQQ=TaxUtil.isQQClientAvailable(MyWebView.this);//判断是否有客户端 if (isHasQQ){ if (!mTencent.isSessionValid()) { mTencent.login(MyWebView.this, scope, loginListener); } }else { Toast.makeText(MyWebView.this,"请先安装QQ客户端",Toast.LENGTH_SHORT).show(); return; } }4重写onActivityResult()方法
protected void onActivityResult(int requestCode, int resultCode, Intent data) { Tencent.onActivityResultData(requestCode,resultCode,data,loginListener); if (requestCode == Constants.REQUEST_API) { Tencent.handleResultData(data, loginListener); } if (resultCode == Constants.REQUEST_QQ_SHARE || resultCode == Constants.REQUEST_QZONE_SHARE || resultCode == Constants.REQUEST_OLD_SHARE) { Tencent.handleResultData(data, shareListener); } super.onActivityResult(requestCode, resultCode, data); }
注意了!
Tencent.onActivityResultData(requestCode,resultCode,data,loginListener);
必须加上这一行代码,官方文档上没有,如果不加回调失败。这是最大的坑
阅读全文
0 0
- Android应用实现QQ登录
- Android应用实现QQ授权登录
- Android应用实现QQ授权登录
- Android应用实现QQ授权登录
- android 实现qq登录
- Android应用中实现了QQ授权登录功能
- 【Android】QQ登录第三方应用
- Android应用之——最新版本SDK V2.4实现QQ第三方登录
- Android应用之最新版本SDKV2.4实现QQ第三方登录
- Android 实现QQ第三方登录
- Android 实现QQ第三方登录
- Android 实现QQ第三方登录
- Android实现QQ第三方登录
- Android实现QQ第三方登录
- Android开发实现QQ三方登录
- Android实现第三方QQ登录
- android实现qq第三方登录
- Android开发实现QQ三方登录
- MOOC面向对象编程week3作业
- eclipse git 报 git: 401 Unauthorized 解决办法
- 使用Spring中的ClassPathXmlApplicationContext加载配置文件
- Skipping Errors in Transactional Replication on SQLSERVER 2012
- C语言中函数返回字符串的四种方法
- Android应用实现QQ登录
- android圆形头像、图片
- Monit安装与配置
- 小程序开发问答合集(1-50)-持续更新
- WSDL文件生成
- Android SQLite数据库—高级语法
- MVVM架构以及Android Data Binding的学习
- 一屌丝参加蓝桥杯的赛后觉悟
- java将多个文件一起打成zip包下载