QQ第三方法登录和分享

一、配置工程

首先下载SDK,得到jar包放到自己的工程中,并添加依赖。

1、添加依赖(我用的是Studio)

    compile files('libs/mta-sdk-1.6.2.jar')
    compile files('libs/open_sdk_r5778.jar')

2、 配置AndroidManife

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application>
 <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" />
           <!--tencent要保留不能去掉-->
           <data android:scheme="tencent你的AppId" />
    </intent-filter>
 </activity>
 <activity android:name="com.tencent.connect.common.AssistActivity"
     android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
<application>

二、QQ第三方登录

完成第三方登录要实现两个接口的回调,一个是授权的、一个是获取用户信息的,在授权完成后去获取用户信息,在获取用户信息成功后,去调用自己App的接口完成登录

1、创建Tencent实例(所有接口都通过Tencent进行调用)

Tencent mTencent = Tencent.createInstance(APP_ID, this.getApplicationContext());

2、实现回调接口为登录做准备

    //QQ授权监听
    private  class BaseUiListener implements IUiListener {
        //登录成功后获取的数据
        @Override
        public void onComplete(Object o) {

            //获取登录成功后的数据
            JSONObject jsonObject = (JSONObject) o;
            try {
                uid = jsonObject.getString("openid");
                thirdLogin.setUid(uid);
                String accessToken = jsonObject.getString("access_token");
                String expires = jsonObject.getString("expires_in");
                mTencent.setOpenId(uid);
                mTencent.setAccessToken(accessToken, expires);

            } catch (JSONException e) {
                e.printStackTrace();
            }

            //获取用户信息
            UserInfo userInfo= new UserInfo(context,mTencent.getQQToken());
            userInfo.getUserInfo(new GetUserInfoListener());

        }

        @Override
        public void onError(UiError uiError) {

        }

        @Override
        public void onCancel() {

        }
    }

获取用户信息

    //QQ获取用户信息监听
    private  class GetUserInfoListener implements IUiListener{

        @Override
        public void onComplete(Object o) {

            JSONObject jsonObject = (JSONObject) o;
            fullName = jsonObject.optString("nickname");
            imageUrl = jsonObject.optString("figureurl_qq_2");
            thirdLogin.setFullName(fullName);
            thirdLogin.setImageUrl(imageUrl);
            //获取用户的用户信息后,调用本地的登录接口,实现你的App的登录功能
               HttpAPI.getInstence(context,handler).ThirdLoginTask(platform,uid,fullName,imageUrl);
        }

        @Override
        public void onError(UiError uiError) {

        }

        @Override
        public void onCancel() {

        }
    }

3、调用登录接口

if(!mTencent.isSessionValid()){

    mTencent.login((Activity)context,"get_simple_userinfo",mBaseUiListener);
       }

登录成功后获取的信息在onComplete方法中返回,数据包括:

{
"ret":0,
"pay_token":"xxxxxxxxxxxxxxxx",
"pf":"openmobile_android",
"expires_in":"7776000",
"openid":"xxxxxxxxxxxxxxxxxxx",
"pfkey":"xxxxxxxxxxxxxxxxxxx",
"msg":"sucess",
"access_token":"xxxxxxxxxxxxxxxxxxxxx"
}

获取的用户信息:

{
    "is_yellow_year_vip": "0",
    "ret": 0,
    "figureurl_qq_1": "http://q.qlogo.cn/qqapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/40",
    "figureurl_qq_2": "http://q.qlogo.cn/qqapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/100",
    "nickname": "小罗",
    "yellow_vip_level": "0",
    "msg": "",
    "figureurl_1": "http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/50",
    "vip": "0",
    "level": "0",
    "figureurl_2": "http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/100",
    "is_yellow_vip": "0",
    "gender": "男",
    "figureurl": "http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/30"
}

4、授权Activity退出后会调用onActivityResult

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Tencent.onActivityResultData(requestCode,resultCode,data,new QQLoginListener());
    }

三、分享

        Bundle bundle = new Bundle();
        //这条分享消息被好友点击后的跳转URL。
        bundle.putString(QQShare.SHARE_TO_QQ_TARGET_URL, actionUrl);
        //分享的标题。注:PARAM_TITLE、PARAM_IMAGE_URL、PARAM_SUMMARY不能全为空,最少必须有一个是有值的。
        bundle.putString(QQShare.SHARE_TO_QQ_TITLE, title);
        //分享的图片URL
        bundle.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, imageUrl);
        //分享的消息摘要,最长50个字
        bundle.putString(QQShare.SHARE_TO_QQ_SUMMARY, description);

        bundle.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT);
//    bundle.putInt(QQShare.SHARE_TO_QQ_EXT_INT,QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN);//QQ空间

       mTencent.shareToQQ(this, bundle , new QQShareListener());
class QQShareListener implements IUiListener{

        @Override
        public void onComplete(Object o) {
            Log.e("-------->","分享成功");
        }

        @Override
        public void onError(UiError uiError) {

        }

        @Override
        public void onCancel() {

        }
    }

也需要重写onActivityResult方法

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (null != mTencent)    
            mTencent.onActivityResult(requestCode, resultCode, data);
    }

更多参考QQ登录分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值