Android开发第三方登录--QQ登录

QQ登录、微信登录,新浪微博登录资料获取demo下载

    http://download.csdn.net/detail/pkandroid/9903796

github地址 进入

    https://github.com/HYVincent/Login

长话短说。。。
1、创建APP,获取APP_ID和APP_KEY,当然,首先得有个账号**
2、下载sdk 点击去下载
3、导包(我的是AndroidStudio 2.3.2)解压下载的sdk,把mta-sdk-1.6.2.jar和open_sdk_r5788_lite.jar复制到lib下(注意区分open_sdk_r5788_lite.jar和open_sdk_r5788.jar的区别,我用了QQ登录,因此基础班就够用了),然后选中邮件选择add as Library….
这里写图片描述
4、配置AndroidManifest 注意**要替换为自己申请的APP_ID
需要一下权限

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  <!--QQ登录配置 start-->
        <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="tencent******" />
            </intent-filter>
        </activity>

        <!--SDK_V2.0引入了AssistActivity,开发者需在androidManifest.xml中注册。代码如下:-->

        <activity android:name="com.tencent.connect.common.AssistActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="orientation|keyboardHidden|screenSize" />
        <!--QQ登录配置 end-->

这里写图片描述

4、在LoginActivity中初始化并使用



public class LoginActivity extends BaseActivity implements LoginView.View {

    .........

    private Tencent mTencent;

    private UserInfo userInfo;

    private BaseUiListener listener = new BaseUiListener();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        ButterKnife.bind(this);

        .....   

        // Tencent类是SDK的主要实现类,开发者可通过Tencent类访问腾讯开放的OpenAPI。
        // 其中APP_ID是分配给第三方应用的appid,类型为String。
        mTencent = Tencent.createInstance(Config.QQ_LOGIN_APP_ID, this.getApplicationContext());
    }

    private  Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == 0) {
                JSONObject response = (JSONObject) msg.obj;
                if (response.has("nickname")) {
                    Gson gson=new Gson();
                    QQUser user=gson.fromJson(response.toString(),QQUser.class);
                    if (user!=null) {
                        ViseLog.d("userInfo:昵称:"+user.getNickname()+"  性别:"+user.getGender()+"  地址:"+user.getProvince()+user.getCity());
                        ViseLog.d("头像路径:"+user.getFigureurl_qq_2());
//                            Picasso.with(MainActivity.this).load(response.getString("figureurl_qq_2")).into(imageView);
                    }
                }
            }
        }
    };

@OnClick({R.id.login_tv_register, R.id.login_btn_go, R.id.login_tv_forget_password,R.id.iv_other_login_qq,R.id.iv_other_login_sina,R.id.iv_other_login_wx})
    public void onViewClicked(View view) {
        switch (view.getId()) {

            ......

            case R.id.iv_other_login_qq:
            /**
            吊起QQ登录
            */
                if (!mTencent.isSessionValid())
                {
                    //注销登录 mTencent.logout(this);
                    mTencent.login(this, "all", listener);
                }
                break;

          ......
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Tencent.onActivityResultData(requestCode,resultCode,data,new BaseUiListener());
    }
// 实现回调 IUiListener
//调用SDK已经封装好的接口时,例如:登录、快速支付登录、应用分享、应用邀请等接口,需传入该回调的实例。
  class BaseUiListener implements IUiListener {

        @Override
        public void onComplete(Object o) {
            ViseLog.d("result:"+o.toString());
            try {
                JSONObject jsonObject = new JSONObject(o.toString());
                initOpenidAndToken(jsonObject);
                updateUserInfo();
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onError(UiError e) {
            showMsg(0,"onError:code:" + e.errorCode + ", msg:"
                    + e.errorMessage + ", detail:" + e.errorDetail);
        }
        @Override
        public void onCancel() {
            showMsg(2,"onCancel");
        }
    }

    /**
     * 获取登录QQ腾讯平台的权限信息(用于访问QQ用户信息)
     * @param jsonObject
     */
    public void initOpenidAndToken(JSONObject jsonObject) {
        try {
            String token = jsonObject.getString(Constants.PARAM_ACCESS_TOKEN);
            String expires = jsonObject.getString(Constants.PARAM_EXPIRES_IN);
            String openId = jsonObject.getString(Constants.PARAM_OPEN_ID);
            if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(expires)
                    && !TextUtils.isEmpty(openId)) {
                mTencent.setAccessToken(token, expires);
                mTencent.setOpenId(openId);
            }
        } catch(Exception e) {
        }
    }

    private void updateUserInfo() {
        if (mTencent != null && mTencent.isSessionValid()) {
            IUiListener listener = new IUiListener() {
                @Override
                public void onError(UiError e) {
                }
                @Override
                public void onComplete(final Object response) {
                    Message msg = new Message();
                    msg.obj = response;
                    Log.i("tag", response.toString());
                    msg.what = 0;
                    mHandler.sendMessage(msg);
                }
                @Override
                public void onCancel() {
                }
            };
            userInfo = new UserInfo(this, mTencent.getQQToken());
            userInfo.getUserInfo(listener);
        }
    }

}

5、登录结果:
授权结果:


 result:{"ret":0,"openid":"A3F4F2111DFBD37E2A5250A9B805868","access_token":"5E8D0507F17D9295C916FE6F401AE6","pay_token":"90DB41BD1A367F8FBAD06EDC9FADB80","expires_in":7776000,"pf":"desktop_m_qq-10000144-android-2002-","pfkey":"cc45091bfc5811636989a47db68ec5fc","msg":"","login_cost":143,"query_authority_cost":296,"authority_cost":0}

格式化一下:

这里写图片描述

登录结果:


    {
    "ret":0,
    "msg":"",
    "is_lost":0,
    "nickname":"习惯宠着你",
    "gender":"男",
    "province":"广东",
    "city":"深圳",
    "figureurl":"http://qzapp.qlogo.cn/qzapp/1106210336/A3F4F2111DF37E2A52502A9B805868/30",
    "figureurl_1":"http://qzapp.qlogo.cn/qzapp/1106210336/A3F4F2111DFBD2A52502A9B805868/50",
    "figureurl_2":"http://qzapp.qlogo.cn/qzapp/1106210336/A3F4F2111DFB7E2A52502A9B805868/100",
    "figureurl_qq_1":"http://q.qlogo.cn/qqapp/1106210336/AF4F2111DFBD37E2A5502A9B805868/40",
    "figureurl_qq_2":"http://q.qlogo.cn/qqapp/1106210336/A3F4F2111DFBD37E2A502A9B805868/100",
    "is_yellow_vip":"0",
    "vip":"0",
    "yellow_vip_level":"0",
    "level":"0",
    "is_yellow_year_vip":"0"
}

————————–2017年6月8日12:13:46—————————–
微信登录看这里
新浪微博登录看这里

猜你喜欢

转载自blog.csdn.net/pkandroid/article/details/72912109