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

Android开发第三方登录--QQ登录

2017-06-08 12:14 453 查看
QQ登录、微信登录,新浪微博登录资料获取demo下载

http://download.csdn.net/detail/pkandroid/9903796[/code] 
github地址 进入

https://github.com/HYVincent/Login[/code] 
长话短说。。。

1、创建APP,获取APP_ID和APP_KEY,当然,首先得有个账号**

2、下载sdk 点击去下载

3、导包(我的是AndroidStudio 2.3.2)解压下载的sdk,把mta-sdk-1.6.2.jar和open_sdk_r5788_lite.jar复制到lib下(注意区分open_sdk_r5788_lite.jar和open_sdk_r5788.jar的区别,我用了QQ登录,因此基础班就够用了),然后选中邮件选择add as Library….



4、配置AndroidManifest 注意**要替换为自己申请的APP_ID

需要一下权限

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


<!--QQ登录配置 start-->
<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="tencent******" />
</intent-filter>
</activity>

<!--SDK_V2.0引入了AssistActivity,开发者需在androidManifest.xml中注册。代码如下:-->

<activity android:name="com.tencent.connect.common.AssistActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize" />
<!--QQ登录配置 end-->




4、在LoginActivity中初始化并使用

public class LoginActivity extends BaseActivity implements LoginView.View {

.........

private Tencent mTencent;

private UserInfo userInfo;

private BaseUiListener listener = new BaseUiListener();

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
ButterKnife.bind(this);

.....

// Tencent类是SDK的主要实现类,开发者可通过Tencent类访问腾讯开放的OpenAPI。
// 其中APP_ID是分配给第三方应用的appid,类型为String。
mTencent = Tencent.createInstance(Config.QQ_LOGIN_APP_ID, this.getApplicationContext());
}

private  Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 0) {
JSONObject response = (JSONObject) msg.obj;
if (response.has("nickname")) {
Gson gson=new Gson();
QQUser user=gson.fromJson(response.toString(),QQUser.class);
if (user!=null) {
ViseLog.d("userInfo:昵称:"+user.getNickname()+"  性别:"+user.getGender()+"  地址:"+user.getProvince()+user.getCity());
ViseLog.d("头像路径:"+user.getFigureurl_qq_2());
//                            Picasso.with(MainActivity.this).load(response.getString("figureurl_qq_2")).into(imageView);
}
}
}
}
};

@OnClick({R.id.login_tv_register, R.id.login_btn_go, R.id.login_tv_forget_password,R.id.iv_other_login_qq,R.id.iv_other_login_sina,R.id.iv_other_login_wx})
public void onViewClicked(View view) {
switch (view.getId()) {

......

case R.id.iv_other_login_qq:
/**
吊起QQ登录
*/
if (!mTencent.isSessionValid())
{
//注销登录 mTencent.logout(this);
mTencent.login(this, "all", listener);
}
break;

......
}
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Tencent.onActivityResultData(requestCode,resultCode,data,new BaseUiListener());
}
// 实现回调 IUiListener
//调用SDK已经封装好的接口时,例如:登录、快速支付登录、应用分享、应用邀请等接口,需传入该回调的实例。
class BaseUiListener implements IUiListener {

@Override
public void onComplete(Object o) {
ViseLog.d("result:"+o.toString());
try {
JSONObject jsonObject = new JSONObject(o.toString());
initOpenidAndToken(jsonObject);
updateUserInfo();
} catch (JSONException e) {
e.printStackTrace();
}
}

@Override
public void onError(UiError e) {
showMsg(0,"onError:code:" + e.errorCode + ", msg:"
+ e.errorMessage + ", detail:" + e.errorDetail);
}
@Override
public void onCancel() {
showMsg(2,"onCancel");
}
}

/**
* 获取登录QQ腾讯平台的权限信息(用于访问QQ用户信息)
* @param jsonObject
*/
public void initOpenidAndToken(JSONObject jsonObject) {
try {
String token = jsonObject.getString(Constants.PARAM_ACCESS_TOKEN);
String expires = jsonObject.getString(Constants.PARAM_EXPIRES_IN);
String openId = jsonObject.getString(Constants.PARAM_OPEN_ID);
if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(expires)
&& !TextUtils.isEmpty(openId)) {
mTencent.setAccessToken(token, expires);
mTencent.setOpenId(openId);
}
} catch(Exception e) {
}
}

private void updateUserInfo() {
if (mTencent != null && mTencent.isSessionValid()) {
IUiListener listener = new IUiListener() {
@Override
public void onError(UiError e) {
}
@Override
public void onComplete(final Object response) {
Message msg = new Message();
msg.obj = response;
Log.i("tag", response.toString());
msg.what = 0;
mHandler.sendMessage(msg);
}
@Override
public void onCancel() {
}
};
userInfo = new UserInfo(this, mTencent.getQQToken());
userInfo.getUserInfo(listener);
}
}

}


5、登录结果:

授权结果:

result:{"ret":0,"openid":"A3F4F2111DFBD37E2A5250A9B805868","access_token":"5E8D0507F17D9295C916FE6F401AE6","pay_token":"90DB41BD1A367F8FBAD06EDC9FADB80","expires_in":7776000,"pf":"desktop_m_qq-10000144-android-2002-","pfkey":"cc45091bfc5811636989a47db68ec5fc","msg":"","login_cost":143,"query_authority_cost":296,"authority_cost":0}


格式化一下:



登录结果:

{
"ret":0,
"msg":"",
"is_lost":0,
"nickname":"习惯宠着你",
"gender":"男",
"province":"广东",
"city":"深圳",
"figureurl":"http://qzapp.qlogo.cn/qzapp/1106210336/A3F4F2111DF37E2A52502A9B805868/30",
"figureurl_1":"http://qzapp.qlogo.cn/qzapp/1106210336/A3F4F2111DFBD2A52502A9B805868/50",
"figureurl_2":"http://qzapp.qlogo.cn/qzapp/1106210336/A3F4F2111DFB7E2A52502A9B805868/100",
"figureurl_qq_1":"http://q.qlogo.cn/qqapp/1106210336/AF4F2111DFBD37E2A5502A9B805868/40",
"figureurl_qq_2":"http://q.qlogo.cn/qqapp/1106210336/A3F4F2111DFBD37E2A502A9B805868/100",
"is_yellow_vip":"0",
"vip":"0",
"yellow_vip_level":"0",
"level":"0",
"is_yellow_year_vip":"0"
}


————————–2017年6月8日12:13:46—————————–

微信登录看这里

新浪微博登录看这里
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息