Android开发之QQ直接登陆功能
2015-08-11 21:37
711 查看
花了一天的时间,总算把APP里QQ直接登陆的功能够搞定了,不得不说QQ的官方文档就是个坑,首先是有多个版本和网址都有开发文档,然后要么写的残缺不全,要么是根本不知道在写些什么,真正靠谱的还是论坛和网上分享的博客文章。
我们一步步来分析好了。
第一步,注册开发者账号,点击下面的链接可以看官方文档,这一步官方文档还是靠谱的,成功后得到 你开发的APP所对应的APP_ID和APP_KEY
http://wiki.connect.qq.com/%E5%BC%80%E5%8F%91%E8%80%85%E6%B3%A8%E5%86%8C%E5%92%8Candroid%E5%BA%94%E7%94%A8%E6%B3%A8%E5%86%8C_android_sdk
第二步:创建并配置工程,文档里用的是eclipse,Android Studio的
步骤也差不多,有一个区别是:Studio里手动添加库是把 mta-sdk-1.6.2 和open_sdk_r5043 手动放到libs文件夹下然后右击 “Add Ad Library”
http://wiki.open.qq.com/wiki/%E5%88%9B%E5%BB%BA%E5%B9%B6%E9%85%8D%E7%BD%AE%E5%B7%A5%E7%A8%8B
第三步:创建实例并实现回调,这步也按照官方文档说的走
http://wiki.open.qq.com/wiki/%E5%88%9B%E5%BB%BA%E5%AE%9E%E4%BE%8B%E5%B9%B6%E5%AE%9E%E7%8E%B0%E5%9B%9E%E8%B0%83
第四步:QQ登录得到openID(与QQ号唯一对应)、AccessToken(获取用户信息、上传图片等功能时的凭据),这里我的代码里是把openID、AccessToken、expires_in都用SharePreference存了起来
http://wiki.open.qq.com/wiki/QQ%E7%99%BB%E5%BD%95%E5%92%8C%E6%B3%A8%E9%94%80
第五步:获取用户信息,在这里官方文档就开始扯淡了,讲得不清不楚的
根本就找不到 Constants.GRAPH_SIMPLE_USER_INFO 这个常量!我猜测是上一个版本里有的,而我用了最新的SDK,结果就找不到了········好在有Google,一番搜索后找到了实现方法
大功告成!
我们一步步来分析好了。
第一步,注册开发者账号,点击下面的链接可以看官方文档,这一步官方文档还是靠谱的,成功后得到 你开发的APP所对应的APP_ID和APP_KEY
http://wiki.connect.qq.com/%E5%BC%80%E5%8F%91%E8%80%85%E6%B3%A8%E5%86%8C%E5%92%8Candroid%E5%BA%94%E7%94%A8%E6%B3%A8%E5%86%8C_android_sdk
第二步:创建并配置工程,文档里用的是eclipse,Android Studio的
步骤也差不多,有一个区别是:Studio里手动添加库是把 mta-sdk-1.6.2 和open_sdk_r5043 手动放到libs文件夹下然后右击 “Add Ad Library”
http://wiki.open.qq.com/wiki/%E5%88%9B%E5%BB%BA%E5%B9%B6%E9%85%8D%E7%BD%AE%E5%B7%A5%E7%A8%8B
第三步:创建实例并实现回调,这步也按照官方文档说的走
http://wiki.open.qq.com/wiki/%E5%88%9B%E5%BB%BA%E5%AE%9E%E4%BE%8B%E5%B9%B6%E5%AE%9E%E7%8E%B0%E5%9B%9E%E8%B0%83
第四步:QQ登录得到openID(与QQ号唯一对应)、AccessToken(获取用户信息、上传图片等功能时的凭据),这里我的代码里是把openID、AccessToken、expires_in都用SharePreference存了起来
http://wiki.open.qq.com/wiki/QQ%E7%99%BB%E5%BD%95%E5%92%8C%E6%B3%A8%E9%94%80
[code]private static final String SCOPE = "all"; private void loginFromQQ() { /* 回调了doComplete方法,在其中存储信息 */ IUiListener loginListener = new BaseUiListener() { @Override protected void doComplete(JSONObject values) { try { String openId = values.getString("openid"); String accessToken = values.getString("access_token"); String expires = values.getString("expires_in"); mTencent.setOpenId(openId); mTencent.setAccessToken(accessToken, expires); Long expires_in = values.getLong("expires_in") *1000 + System.currentTimeMillis(); SharedPreferences sp = getSharedPreferences(Config.USER_STATUS,MODE_PRIVATE); sp.edit().putString(Config.USER_OPEN_ID,openId) .putString(Config.USER_ACCESS_TOKEN,accessToken) .putLong(Config.USER_EXPIRES_IN,expires_in).apply(); getUserInfo(); } catch (JSONException e) { e.printStackTrace(); } } }; /* 开始QQ登陆,SCOPE为一个字符串常量 all ,表示你要获取那些信息 */ mTencent.login(this, SCOPE, loginListener); }
第五步:获取用户信息,在这里官方文档就开始扯淡了,讲得不清不楚的
根本就找不到 Constants.GRAPH_SIMPLE_USER_INFO 这个常量!我猜测是上一个版本里有的,而我用了最新的SDK,结果就找不到了········好在有Google,一番搜索后找到了实现方法
[code]private void getUserInfo() { /* 获取用户信息前需要添加 AccessToken */ ```java UserInfo userInfo = new UserInfo(AtyLogin.this, mTencent.getQQToken()); ``` IUiListener userInfoListener = new BaseUiListener(){ @Override protected void doComplete(JSONObject values) { try { SharedPreferences sp = getSharedPreferences(Config.USER_STATUS, MODE_PRIVATE); String openId = sp.getString(Config.USER_OPEN_ID, null); String nickName = values.getString("nickname"); boolean gender = (values.getString("gender").equals("男")); String avatar = values.getString("figureurl_2"); String avatar50 = values.getString("figureurl_1"); JSONObject userLoginJSON = new JSONObject(); userLoginJSON.put("idQQ", openId) .put("name", nickName) .put("gender", gender) .put("avatar", avatar) .put("avatar50", avatar50); url = "/user/login/qq"; /* 自己写的方法,目的是存储用户信息并登陆 */ storageUserInfoAndLogin(url, userLoginJSON.toString()); } catch (JSONException e) { e.printStackTrace(); } } }; userInfo.getUserInfo(userInfoListener); }
大功告成!
相关文章推荐
- android学习笔记NO.3
- AnimationDrawable OOM
- android:installLocation="preferExternal"的意义
- Android广播机制
- 《第一行代码Android》阅读笔记
- Android手机进行无线EAP-TLS证书认证配置
- android常用到得单元测试
- Android自定义属性时TypedArray的使用方法
- 教你自己实现一个事件总线EventBus
- MPAndroidChart开源图表库---折线图
- Android studio主题风格的添加
- ImageLoader框架使用步骤
- Android屏幕适配
- Android项目中如何用好构建神器Gradle?
- Android单元测试异常总结---Test run failed:Unable to find instrumentation target package
- Android多个按钮下本Activity按钮事件处理
- Android_Activity传值和跳转
- Android下获取各种存储目录
- Android-SD卡文件夹创建和删除实现
- 个人对Android Touch事件机制的理解