Android开发接入第三方原生SDK实现QQ登录
2018-03-10 15:41
931 查看
首先我们梳理一下流程:
1.对我们的应用进行授权,授权成功之后,拿到openid
2.设置openid和token,就可以获取到用户的基本信息
一、准备工作1.在腾讯开放平台上注册账号,注册应用,然后获取APPID和APPKEY
(这个过程还是很简单的,只需要填一些基本的应用信息即可获取)
腾讯开发平台: http://open.qq.com/
2. 下载SDK (http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD)
3. 将SDK中的open_sdk_r5990_lite.jar放在我们工程的libs下( 也可以用下边的链接直接下载 )
链接下载地址 : https://pan.baidu.com/s/1UqS6ao1Rf9rvZHp-JyKbnQ
( 提取密码 : 0nyh )
4. 在工程的清单文件AndroidManifest.xml的application标签中添加两个activity:<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" />
<data android:scheme="tencent222222" /><!--替换成自己在腾讯开发平台申请的的APPID-->
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize">
</activity>PS:记得一定要替换成自己的APPID,如果你在腾讯开放平台上申请到的appid为123456,则这里的APPID值就为tencent123456;
5. 在工程的清单文件AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
private Tencent mTencent;
//... (2)一个IUiListener 的实现类(LogInListener implements IUiListener)
private LogInListener mListener;2. LogInListener是IUiListener的实现类,通过这个类里边的回调方法我们可以获得授权返回的结果class LogInListener implements IUiListener {
//... (1)授权成功
@Override
public void onComplete(Object o) {
JSONObject jsonObject = (JSONObject) o;
// 1. 设置openid和token,进一步获取用户信息
initOpenidAndToken(jsonObject);
// 2. 获取QQ用户的各信息
getUserInfo();
}
//... (2)授权失败
@Override
public void onError(UiError uiError) {
ToastUtils.show("授权失败:错误信息:"+uiError.toString());
}
//... (3)授权取消
@Override
public void onCancel() {
ToastUtils.show("授权失败");
}
}在这个OnComplete()回调中,给我们返回的JsonObject格式的数据如下:
{
"ret": 0,
"openid": "",
"access_token": "",
"pay_token": "",
"expires_in": 7776000,
"pf": "",
"pfkey": "",
"msg": "",
"login_cost": 442,
"query_authority_cost": 322,
"authority_cost": 0
}
3. 重写OnActivityResult()方法,确保可以接收到回调@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Tencent.onActivityResultData(requestCode, resultCode, data, mListener);
}
4. 进行登录://首先需要用APP ID 获取到一个Tencent实例
mTencent = Tencent.createInstance(Constant.QQ_APPID, this.getApplicationContext());
//初始化一个IUiListener对象,在IUiListener接口的回调方法中获取到有关授权的某些信息
mListener = new LogInListener();
mTencent.login(this, "all", mListener);
5. 退出登录:mTencent.logout(MainActivity.this); 到这里授权的过程已经完毕,接下来我们要获取到QQ给我们返回的用户基本信息:
三、获取用户基本信息
在授权成功之后,就会回调LoginListener中的OnComplete()方法,其中OnComplete()方法会给我们返回一个JsonObject格式的数据,在这个数据里,我们可以获取到openid,然后:
1.设置openid和token private void initOpenidAndToken(JSONObject jsonObject) {
try {
String openid = jsonObject.getString("openid");//获取OpenId
String token = jsonObject.getString("access_token");
String expires = jsonObject.getString("expires_in");
mTencent.setAccessToken(token, expires);
mTencent.setOpenId(openid);
} catch (JSONException e) {
e.printStackTrace();
}
}2.获取用户的基本信息private void getUserInfo() {
QQToken mQQToken = mTencent.getQQToken();
UserInfo userInfo = new UserInfo(QQActivity.this, mQQToken);
userInfo.getUserInfo(new IUiListener() {
@Override
public void onComplete(final Object o) {
try {
JSONObject jsonObject=new JSONObject(o.toString());
String mNickname=jsonObject.getString("nickname");//获取用户QQ名称
String mGender=jsonObject.getString("gender");//获取用户性别
String mUserHeader=jsonObject.getString("figureurl_qq_2");//获取用户头像
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(UiError uiError) {
ToastUtils.show("获取用户QQ信息错误");
}
@Override
public void onCancel() {
ToastUtils.show("取消获取用户QQ信息");
}
}
);
}在这个LoginListner中的OnComplete()回调中,返回的JsonObject数据如下(跟上边的回调返回的数据有所不同):
{
"ret": 0,
"msg": "",
"is_lost": 0,
"nickname": "",
"gender": "",
"province": "",
"city": "",
"figureurl": "",
"figureurl_1": "",
"figureurl_2": "",
"figureurl_qq_1": "",
"figureurl_qq_2": "",
"is_yellow_vip": "0",
"vip": "0",
"yellow_vip_level": "0",
"level": "0",
"is_yellow_year_vip": "0"
}
大功告成! QQ:963231481 如有问题,加我QQ !
1.对我们的应用进行授权,授权成功之后,拿到openid
2.设置openid和token,就可以获取到用户的基本信息
一、准备工作1.在腾讯开放平台上注册账号,注册应用,然后获取APPID和APPKEY
(这个过程还是很简单的,只需要填一些基本的应用信息即可获取)
腾讯开发平台: http://open.qq.com/
2. 下载SDK (http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD)
3. 将SDK中的open_sdk_r5990_lite.jar放在我们工程的libs下( 也可以用下边的链接直接下载 )
链接下载地址 : https://pan.baidu.com/s/1UqS6ao1Rf9rvZHp-JyKbnQ
( 提取密码 : 0nyh )
4. 在工程的清单文件AndroidManifest.xml的application标签中添加两个activity:<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" />
<data android:scheme="tencent222222" /><!--替换成自己在腾讯开发平台申请的的APPID-->
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize">
</activity>PS:记得一定要替换成自己的APPID,如果你在腾讯开放平台上申请到的appid为123456,则这里的APPID值就为tencent123456;
5. 在工程的清单文件AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
二、进行授权
1.授权的话需要两个重要的类: //... (1)腾讯提供的一个Tencent类private Tencent mTencent;
//... (2)一个IUiListener 的实现类(LogInListener implements IUiListener)
private LogInListener mListener;2. LogInListener是IUiListener的实现类,通过这个类里边的回调方法我们可以获得授权返回的结果class LogInListener implements IUiListener {
//... (1)授权成功
@Override
public void onComplete(Object o) {
JSONObject jsonObject = (JSONObject) o;
// 1. 设置openid和token,进一步获取用户信息
initOpenidAndToken(jsonObject);
// 2. 获取QQ用户的各信息
getUserInfo();
}
//... (2)授权失败
@Override
public void onError(UiError uiError) {
ToastUtils.show("授权失败:错误信息:"+uiError.toString());
}
//... (3)授权取消
@Override
public void onCancel() {
ToastUtils.show("授权失败");
}
}在这个OnComplete()回调中,给我们返回的JsonObject格式的数据如下:
{
"ret": 0,
"openid": "",
"access_token": "",
"pay_token": "",
"expires_in": 7776000,
"pf": "",
"pfkey": "",
"msg": "",
"login_cost": 442,
"query_authority_cost": 322,
"authority_cost": 0
}
3. 重写OnActivityResult()方法,确保可以接收到回调@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Tencent.onActivityResultData(requestCode, resultCode, data, mListener);
}
4. 进行登录://首先需要用APP ID 获取到一个Tencent实例
mTencent = Tencent.createInstance(Constant.QQ_APPID, this.getApplicationContext());
//初始化一个IUiListener对象,在IUiListener接口的回调方法中获取到有关授权的某些信息
mListener = new LogInListener();
mTencent.login(this, "all", mListener);
5. 退出登录:mTencent.logout(MainActivity.this); 到这里授权的过程已经完毕,接下来我们要获取到QQ给我们返回的用户基本信息:
三、获取用户基本信息
在授权成功之后,就会回调LoginListener中的OnComplete()方法,其中OnComplete()方法会给我们返回一个JsonObject格式的数据,在这个数据里,我们可以获取到openid,然后:
1.设置openid和token private void initOpenidAndToken(JSONObject jsonObject) {
try {
String openid = jsonObject.getString("openid");//获取OpenId
String token = jsonObject.getString("access_token");
String expires = jsonObject.getString("expires_in");
mTencent.setAccessToken(token, expires);
mTencent.setOpenId(openid);
} catch (JSONException e) {
e.printStackTrace();
}
}2.获取用户的基本信息private void getUserInfo() {
QQToken mQQToken = mTencent.getQQToken();
UserInfo userInfo = new UserInfo(QQActivity.this, mQQToken);
userInfo.getUserInfo(new IUiListener() {
@Override
public void onComplete(final Object o) {
try {
JSONObject jsonObject=new JSONObject(o.toString());
String mNickname=jsonObject.getString("nickname");//获取用户QQ名称
String mGender=jsonObject.getString("gender");//获取用户性别
String mUserHeader=jsonObject.getString("figureurl_qq_2");//获取用户头像
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(UiError uiError) {
ToastUtils.show("获取用户QQ信息错误");
}
@Override
public void onCancel() {
ToastUtils.show("取消获取用户QQ信息");
}
}
);
}在这个LoginListner中的OnComplete()回调中,返回的JsonObject数据如下(跟上边的回调返回的数据有所不同):
{
"ret": 0,
"msg": "",
"is_lost": 0,
"nickname": "",
"gender": "",
"province": "",
"city": "",
"figureurl": "",
"figureurl_1": "",
"figureurl_2": "",
"figureurl_qq_1": "",
"figureurl_qq_2": "",
"is_yellow_vip": "0",
"vip": "0",
"yellow_vip_level": "0",
"level": "0",
"is_yellow_year_vip": "0"
}
大功告成! QQ:963231481 如有问题,加我QQ !
相关文章推荐
- Android开发接入第三方原生SDK实现微信登录
- android接入原生第三方登录(微信登录、QQ登录、新浪微博登录)
- android接入原生第三方登录(微信登录、QQ登录、新浪微博登录)
- android接入原生第三方登录(微信登录、QQ登录、新浪微博登录)
- android接入原生第三方登录(微信登录、QQ登录、新浪微博登录)
- android接入原生第三方登录(微信登录、QQ登录、新浪微博登录)
- 实现QQ登录第三方APP(Android)
- Android 实现QQ第三方登录
- Android 实现QQ第三方登录
- Android 实现QQ第三方登录
- Android应用之最新版本SDKV2.4实现QQ第三方登录
- 【Android应用开发详解】第01期:第三方授权认证(一)实现第三方授权登录、分享以及获取用户资料
- Android实现QQ第三方登录
- 【Android应用开发详解】第01期:第三方授权认证(一)实现第三方授权登录、分享以及获取用户资料
- iOS开发 实现QQ第三方登录
- 【Android应用开发详解】第01期:第三方授权认证(一)实现第三方授权登录、分享以及获取用户资料
- Android端不通过登录SDK实现QQ登录验证
- Android端不通过登录SDK实现QQ登录验证 推荐
- cocos2d-x 接入android ,登录第三方SDK时屏幕不断闪烁刷屏的问题解决
- Android应用之——最新版本SDK V2.4实现QQ第三方登录