qq第三方登录

关于QQ的第三方登录

1、 下载qq登录的sdk
2、在清单文件中添加权限:

  <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- SDK2.1新增获取用户位置信息 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

3、在清单文件中添加两个activity

  <activity
        android:name="com.tencent.tauth.AuthActivity"
        android:launchMode="singleTask"
        android:noHistory="true">
        <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="tencent222222"/>//正确格式为tencent我申请的id
            <!-- 100380359 100381104 222222 -->
        </intent-filter>
    </activity>

    <activity
        android:name="com.tencent.connect.common.AssistActivity"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="behind"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"/>

4、实例化 Tencent对象

 mTencent = Tencent.createInstance("申请的id号", this);

5、在需要触发三方登陆的地方添加如下代码:

 mTencent.login(this, "all", this);

6、在onActivityResult方法中添加如下代码

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == Constants.REQUEST_LOGIN ||
            requestCode == Constants.REQUEST_APPBAR) {
        Tencent.onActivityResultData(requestCode, resultCode, data, this);

    }
}

7、实现IUiListener接口,里面有onComplete,onError,onCancel三个方法,分别表示授权成功,授权失败,取消授权的方法

8、获得的具体用户对象为UserInfo

下面为一个详细的获取用户信息的demo:

代码:
package com.example.threepartylogin;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.google.gson.Gson;
import com.squareup.picasso.Picasso;
import com.tencent.connect.UserInfo;
import com.tencent.connect.common.Constants;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;

import org.json.JSONObject;

public class MainActivity extends AppCompatActivity implements View.OnClickListener, IUiListener {

private Tencent mTencent;
private ImageView mPic;
private TextView mName;
private TextView mAddress;
private TextView mGender;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    findViewById(R.id.btn).setOnClickListener(this);
    mPic = (ImageView) findViewById(R.id.pic);
    mName = (TextView) findViewById(R.id.name);
    mAddress = (TextView) findViewById(R.id.address);
    mGender = (TextView) findViewById(R.id.gender);
    mTencent = Tencent.createInstance("222222", this);
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.btn:
            mTencent.login(this, "all", this);
            break;
    }
}

@Override
public void onComplete(Object o) {
    JSONObject jsonObject = (JSONObject) o;
    //存储授权令牌token
    String token = jsonObject.optString(Constants.PARAM_ACCESS_TOKEN);//核心参数
    String expires = jsonObject.optString(Constants.PARAM_EXPIRES_IN);
    String openId = jsonObject.optString(Constants.PARAM_OPEN_ID);//核心参数
    if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(expires)
            && !TextUtils.isEmpty(openId)) {
        mTencent.setAccessToken(token, expires);
        mTencent.setOpenId(openId);

        UserInfo userInfo = new UserInfo(MainActivity.this, mTencent.getQQToken());
        userInfo.getUserInfo(new IUiListener() {
            @Override
            public void onComplete(Object o) {
                String json = o.toString();
                Gson gson = new Gson();
                MyBean myBean = gson.fromJson(json,MyBean.class);
                Picasso.with(MainActivity.this).load(myBean.figureurl_qq_2).into(mPic);
                mName.setText(myBean.nickname);
                mAddress.setText(myBean.province);
                mGender.setText(myBean.gender);
            }

            @Override
            public void onError(UiError uiError) {

            }

            @Override
            public void onCancel() {

            }
        });
    }
}

@Override
public void onError(UiError uiError) {

}

@Override
public void onCancel() {

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == Constants.REQUEST_LOGIN ||
            requestCode == Constants.REQUEST_APPBAR) {
        Tencent.onActivityResultData(requestCode, resultCode, data, this);

    }
}

}
布局:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值