第三方登录之QQ登录集成(二)

上面说到webview方式登录QQ的集成,现在开始客户端登录的集成.首先还是下载客户端的SDK和DEMO,


示例代码如下:

首先清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest package="test.example.com.mapp"
          xmlns:android="http://schemas.android.com/apk/res/android">

    <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" />

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </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" />
                <!-- 100380359 100381104 222222 -->
            </intent-filter>
        </activity>

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

</manifest>
注意, AssistActivity只有在运行代码后,才会在logcat中提示错误信息,告诉需要另外配置该activity


Mainactivity代码

public class MainActivity extends AppCompatActivity implements IUiListener {

    private static Tencent mTencent;
    private String mAppid = "1105667444";
    private TextView mUserInfo;
    private ImageView mUserLogo;
    private UserInfo mInfo;


    public static void initOpenidAndToken(JSONObject jsonObject) {

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

    @Override
    protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_main);
	//初始化mTencent
	init();
    }

    private void init() {
	mTencent = Tencent.createInstance(mAppid, this);
    }

    public void login(View view) {
	mTencent.login(this, "all", this);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
	if (requestCode == Constants.REQUEST_LOGIN || requestCode == Constants.REQUEST_APPBAR) {
	    //处理返回的结果
	    Tencent.onActivityResultData(requestCode, resultCode, data, this);
	}

	super.onActivityResult(requestCode, resultCode, data);
    }

    @Override
    public void onComplete(Object response) {
	showToast("登录成功");
	JSONObject json = (JSONObject) response;
	//通过返回的数据,获得openid和token
	initOpenidAndToken(json);
	//获取用户信息
	updateUserInfo();
    }


    private void updateUserInfo() {
	if (mTencent != null && mTencent.isSessionValid()) {
	    mInfo = new UserInfo(this, mTencent.getQQToken());
	    //获取用户信息
	    mInfo.getUserInfo(listener);
	}else {
	    mUserInfo.setText("");
	    mUserInfo.setVisibility(android.view.View.GONE);
	    mUserLogo.setVisibility(android.view.View.GONE);
	}
    }

    private IUiListener listener = new IUiListener() {
	@Override
	public void onComplete(Object response) {
	    //成功获取的回调.在这里乐意获取用户的头像,昵称等信息
	    showToast(response.toString());
	}

	@Override
	public void onError(UiError uiError) {

	}

	@Override
	public void onCancel() {

	}
    };

    public void showToast(String s) {
	Toast.makeText(this, s, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onError(UiError uiError) {
	showToast("登录失败");
    }

    @Override
    public void onCancel() {
	showToast("取消登陆");
    }


}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值