赞
踩
转自:http://blog.csdn.net/u013451048/article/details/52352810
上一篇文章已经讲过如何注册QQ互联的开发者了。如果你还没有注册成为开发者请移步至
点击SDK for 移动应用接入
直接点击Android_SDK_V3.1.0 就可以下载
下载完成后是个压缩包,解压后的结果就是下面这个样子,我下载的版本是3.1.0,如果你下载的版本不是这个版本或许有所不同。
将jar文件夹下的两个jar包导入到android studio中,
然后右击jar包,在菜单的下面会有个"Add as Library..."点击它,将这两个jar包加入到lib库。
- 刚刚导入的jar包里有已经实现好的Activity(就是点击使用QQ登录后弹出的授权Activity),所以需要在清单文件中配置一下
-
- 在<application>节点下添加两个<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="222222" />
- </intent-filter>
- </activity>
- <activity
- android:name="com.tencent.connect.common.AssistActivity"
- android:configChanges="orientation|keyboardHidden|screenSize"
- android:theme="@android:style/Theme.Translucent.NoTitleBar" >
- </activity>
注意!其中的 data android:scheme=”222222” 你需要将这个值替换为你自己创建的应用的appid。222222是腾讯给的测试appid,仅能够测试使用。
当然了,使用qq登录少不了权限
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
好了,到此,清单文件基本上配置完成了。下面开始写java代码
如果你想要使用qq的登录分享功能,你需要下面几个属性
- private Tencent mTencent;
- private String APP_ID = "222222";
- private IUiListener loginListener;
- private String SCOPE = "all"
- 其中,mTencent是必须要用到的一个对象,qq的登录分享功能等大部分都封装在了这个类里边。
-
- APP_ID,是你创建应用时的appid,这个id必须跟你的清单文件里的 data android:scheme="222222"节点的值是一样的。
-
- loginListener,是一个回调接口,在你登录或分享成功后会执行该接口。
-
- SCOPE,应用需要获得哪些API的权限,由“,”分隔。例如:SCOPE = “get_user_info,add_t”;所有权限用“all”
详细权限见下图:
然后我们实现一个方法,用来初始化这些属性。
- //初始化QQ登录分享的需要的资源
- private void initQqLogin(){
- mTencent = Tencent.createInstance(APP_ID, this);
- //创建QQ登录回调接口
- loginListener = new IUiListener() {
- @Override
- public void onComplete(Object o) {
- //登录成功后回调该方法
- Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
- }
-
- @Override
- public void onError(UiError uiError) {
- //登录失败后回调该方法
- Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_SHORT).show();
- Log.e("LoginError:", uiError.toString());
- }
-
- @Override
- public void onCancel() {
- //取消登录后回调该方法
- Toast.makeText(MainActivity.this, "取消登录", Toast.LENGTH_SHORT).show();
- }
- };
- }
- 这么详细的注释就不用解释了吧。
-
- 然后我们还需要重写Activity中的onActivityResult方法。因为这个登录功能会打开一个Activity,而且要返回登录是否成功的结果,所以要重写该方法。
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- // 官方文档上面的是错误的
- // if(requestCode == Constants.REQUEST_API) {
- // if(resultCode == Constants.RESULT_LOGIN) {
- // mTencent.handleLoginData(data, loginListener);
- // }
- // resultCode 是log出来的,官方文档里给的那个属性是没有的
-
- if (requestCode == Constants.REQUEST_LOGIN) {
- if (resultCode == -1) {
- Tencent.onActivityResultData(requestCode, resultCode, data, loginListener);
- Tencent.handleResultData(data, loginListener);
- }
- }
- }
最后写一个button实现一个监听调用一下
- public void qqLogin(View view) {
- initQqLogin();
- mTencent.login(this, SCOPE, loginListener);
- }
好了,到此,你的登录功能就已经实现了,运行一下试试吧。
当然了,我们用QQ登录不仅仅是判断下登录成功与否,还需要获得用户信息。
我们需要在登录成功后,将返回的openId记录下来。改写后的代码如下
- loginListener = new IUiListener() {
- @Override
- public void onComplete(Object o) {
- //登录成功后调用的方法
- JSONObject jo = (JSONObject) o;
- Toast.makeText(NewsMainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
- Log.e("COMPLETE:", jo.toString());
- String openID;
- try {
- openID = jo.getString("openid");
- String accessToken = jo.getString("access_token");
- String expires = jo.getString("expires_in");
- mTencent.setOpenId(openID);
- mTencent.setAccessToken(accessToken, expires);
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- @Override
- public void onError(UiError uiError) {
- //登录失败后调用的方法
- Toast.makeText(NewsMainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
- }
- @Override
- public void onCancel() {
- //取消登录后调用的方法
- }
- };
有兴趣的话可以log一下返回的json数据。
与登录功能一样,要获取用户信息依然需要实现一个回调函数,我们在Activity中添加一个属性
private IUiListener userInfoListener;
然后在initQqLogin()方法中将这个回调接口实现出来
- userInfoListener = new IUiListener() {
- @Override
- public void onComplete(Object o) {
- if(o == null){
- return;
- }
- try {
- JSONObject jo = (JSONObject) o;
- Log.e("JO:",jo.toString());
- int ret = jo.getInt("ret");
- String nickName = jo.getString("nickname");
- String gender = jo.getString("gender");
- Toast.makeText(MainActivity.this, "你好," + nickName,Toast.LENGTH_LONG).show();
-
- } catch (Exception e) {
- }
- }
- @Override
- public void onError(UiError uiError) {
- }
- @Override
- public void onCancel() {
- }
- };
这里说明一下返回的json数据。有兴趣的可以log一下。大致包含,昵称,性别,不同尺寸的qq头像url,不同尺寸的qq空间头像url。
- if (requestCode == Constants.REQUEST_LOGIN) {
- if (resultCode == -1) {
- Tencent.onActivityResultData(requestCode, resultCode, data, loginListener);
- Tencent.handleResultData(data, loginListener);
- UserInfo info = new UserInfo(this, mTencent.getQQToken());
- info.getUserInfo(userInfoListener);
- }
- }
好了,到此,你就可以拿到qq用户的信息了
实现分享功能也很简单,与获取用户信息一样,需要一个回调接口,我们在initQqLogin()方法中将这个回调接口实现出来
- //qq分享的回调接口
- shareListener = new IUiListener() {
- @Override
- public void onComplete(Object o) {
- //分享成功后回调
- Toast.makeText(MainActivity.this, "分享成功!", Toast.LENGTH_SHORT).show();
- }
-
- @Override
- public void onError(UiError uiError) {
- //分享失败后回调
- }
-
- @Override
- public void onCancel() {
- //取消分享后回调
- }
- };
然后写一个按钮,写一个监听
- public void qqShare(View view) {
- Bundle params = new Bundle();
- params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT);
- params.putString(QQShare.SHARE_TO_QQ_TITLE, "标题");
- params.putString(QQShare.SHARE_TO_QQ_SUMMARY,"摘要");
- params.putString(QQShare.SHARE_TO_QQ_TARGET_URL,"http://blog.csdn.net/u013451048");
- params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL,"http://avatar.csdn.net/C/3/D/1_u013451048.jpg");
- params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "CSDN");
- mTencent.shareToQQ(this, params, shareListener);
- }
从上到下依次是设置分享的类型,是图文,纯图片,纯文本等,分享的标题,摘要,分享的url链接,分享的图片,分享的来源
如果你还不能运行,且提示的错误是appid的问题的话,那么在清单文件中修改scheme节点为 data android:scheme="tencent222222" 。同样将222222替换为你自己的appid,保留tencent字段。
版权声明:本文为博主原创文章,未经博主允许不得转载。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。