您的位置:首页 > 移动开发 > Android开发

Android-使用Android Studio实现第三方QQ登录

2017-10-12 09:16 507 查看
现在的第三方登录很普遍如QQ,微博,微信,今天我们就来实现如何接入QQ登录到我们的项目中

要想使用QQ登录我们需要到腾讯开放平台注册账号获取开发者资格地址:(http://open.qq.com) 注册完成后点击我们右上角的管理中心



进入管理中心后点击下面的创建应用



然后选择Android平台就会获取APPID和APPKEY创建完成后我们需要到



然后选择Android平台就会获取APPID和APPKEY创建完成后我们需要到 http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD 下载SDKJar包 接下来就可以实现QQ登录了新建一个项目工程名为QQLoginDemo 然后把我们刚才下载的SDK解压将jar文件夹中的jar包拷贝到我们的项目libs中jar下载地址:http://download.csdn.net/download/qq_39357892/10017270



之后放到我们自己的工程里



打开我们的Androidmanifest 在里面加入权限和注册Activity 如下

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

<!-- QQ登录授权所需权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
android:allowBackup="true"
android:icon="@mipmap/ic_nanren"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<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=".SousuoActivity"></activity>
<!-- 注册SDKActivity -->
<activity
android:name="com.tencent.open.yyb.AppbarActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity android:name="com.tencent.connect.avatar.ImageActivity" />
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="behind"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<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="tencent1106469558" />
<!--应用的AppId要相同-->
</intent-filter>
</activity>
</application>

</manifest>

**

**

Activity中的内容
------------

**
package sizu.nanshigou;

import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.Toast;

import com.hjm.bottomtabbar.BottomTabBar;
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;

import butterknife.BindView;
import butterknife.ButterKnife;
import fragment.FourFragment;
import fragment.OneFragment;
import fragment.ThreeFragment;
import fragment.TwoFragment;

public class MainActivity extends AppCompatActivity {
@BindView(R.id.bottom_tab_bar)
BottomTabBar mb;
@BindView(R.id.activity_main)
RelativeLayout activityMain;
private ViewPager vp;
private static final String APPID = "1106469558";

private EditText et1;
private EditText et2;

private Tencent mTencent; //qq主操作对象
private IUiListener loginListener; //授权登录监听器
private IUiListener userInfoListener; //获取用户信息监听器
private String scope; //获取信息的范围参数
private UserInfo userInfo; //qq用户信息

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
setupViews();
initData();
}

@Override
protected void onDestroy() {
if (mTencent != null) {
//注销登录
mTencent.logout(MainActivity.this);
}
super.onDestroy();
}

private void setupViews() {
et1 = (EditText) findViewById(R.id.editText1);
et2 = (EditText) findV
c6ae
iewById(R.id.editText2);

findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
System.out.println("你点击了使用qq登录按钮");
login();
}
});

findViewById(R.id.button3).setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
System.out.println("开始获取用户信息");
userInfo = new UserInfo(MainActivity.this, mTencent.getQQToken());
userInfo.getUserInfo(userInfoListener);
}
});
}

private void initData() {
//初始化qq主操作对象
mTencent = Tencent.createInstance(APPID, MainActivity.this);
//要所有权限,不然会再次申请增量权限,这里不要设置成get_user_info,add_t
scope = "all";

loginListener = new IUiListener() {

@Override
public void onError(UiError arg0) {
// TODO Auto-generated method stub

}

/**
* 返回json数据样例
*
* {"ret":0,"pay_token":"D3D678728DC580FBCDE15722B72E7365",
* "pf":"desktop_m_qq-10000144-android-2002-",
* "query_authority_cost":448,
* "authority_cost":-136792089,
* "openid":"015A22DED93BD15E0E6B0DDB3E59DE2D",
* "expires_in":7776000,
* "pfkey":"6068ea1c4a716d4141bca0ddb3df1bb9",
* "msg":"",
* "access_token":"A2455F491478233529D0106D2CE6EB45",
* "login_cost":499}
*/
@Override
public void onComplete(Object value) {
// TODO Auto-generated method stub

System.out.println("有数据返回..");
if (value == null) {
return;
}

try {
JSONObject jo = (JSONObject) value;

int ret = jo.getInt("ret");

System.out.println("json=" + String.valueOf(jo));

if (ret == 0) {
Toast.makeText(MainActivity.this, "登录成功",
Toast.LENGTH_LONG).show();

String openID = jo.getString("openid");
String accessToken = jo.getString("access_token");
String expires = jo.getString("expires_in");
mTencent.setOpenId(openID);
mTencent.setAccessToken(accessToken, expires);
}

} catch (Exception e) {
// TODO: handle exception
}

}

@Override
public void onCancel() {
// TODO Auto-generated method stub

}
};

userInfoListener = new IUiListener() {

@Override
public void onError(UiError arg0) {
// TODO Auto-generated method stub

}

/**
* 返回用户信息样例
*
* {"is_yellow_year_vip":"0","ret":0,
* "figureurl_qq_1":"http:\/\/q.qlogo.cn\/qqapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/40",
* "figureurl_qq_2":"http:\/\/q.qlogo.cn\/qqapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/100",
* "nickname":"攀爬←蜗牛","yellow_vip_level":"0","is_lost":0,"msg":"",
* "city":"黄冈","
* figureurl_1":"http:\/\/qzapp.qlogo.cn\/qzapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/50",
* "vip":"0","level":"0",
* "figureurl_2":"http:\/\/qzapp.qlogo.cn\/qzapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/100",
* "province":"湖北",
* "is_yellow_vip":"0","gender":"男",
* "figureurl":"http:\/\/qzapp.qlogo.cn\/qzapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/30"}
*/
@Override
public void onComplete(Object arg0) {
// TODO Auto-generated method stub
if(arg0 == null){
return;
}
try {
JSONObject jo = (JSONObject) arg0;
int ret = jo.getInt("ret");
System.out.println("json=" + String.valueOf(jo));
String nickName = jo.getString("nickname");
String gender = jo.getString("gender");

Toast.makeText(MainActivity.this, "你好,"+gender + nickName,
Toast.LENGTH_LONG).show();

} catch (Exception e) {
// TODO: handle exception
}

}

@Override
public void onCancel() {
// TODO Auto-generated method stub

}
};
}

private void login() {
//如果session无效,就开始登录
if (!mTencent.isSessionValid()) {
//开始qq授权登录
mTencent.login(MainActivity.this, scope, loginListener);
}
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == Constants.REQUEST_API) {
if (resultCode == Constants.REQUEST_LOGIN) {
Tencent.handleResultData(data, loginListener);
}
super.onActivityResult(requestCode, resultCode, data);
}
}

}

**
**

需要配置的权限
-------

**

<uses-permission android:name="android.permission.CAMERA" />
<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"/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android