您的位置:首页 > 移动开发 > Android开发

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

[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);
    }


大功告成!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: