1.集成QQ登录的前期准备
1.集成QQ登录需要注册腾讯开放平台(http://open.qq.com/),相关的SDK与开发文档也在这里下载。
2.注册并登录腾讯开放平台后就可以创建应用,并获取唯一标识appID了。
ps:如果只是测试的话,appID使用腾讯提供的测试数据(222222)就可以了。
3.下载SDK:http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD
解压后打开jar包,把mta-sdk-1.6.2.jar和open-sdk-r5756.jar复制到项目的libs目录下,并添加依赖。(jar包更新很快,不一定是这个版本)
2.在清单文件进行相关配置
1.添加权限(AndroidManifest.xml)<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2.添加Activity(AndroidManifest.xml)
<!--QQ登录-->
<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" />
<!--tencent你的Appid-->
<data android:scheme="tencent222222" />
</intent-filter>
</activity>
<!--SDK_V2.0引入了AssistActivity-->
<activity android:name="com.tencent.connect.common.AssistActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize"
/>
3.布局文件(activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/QQButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="QQ登录"
/>
</LinearLayout>
3.功能代码
public class QQActivity extends Activity implements View.OnClickListener {
private Tencent mTencent;
private IUiListener mListener;
private GetInfoListener mInfoListener;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.qq_activity);
Button QQButton = (Button) findViewById(R.id.QQButton);
QQButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.QQButton:
Toast.makeText(this, "QQButton", Toast.LENGTH_LONG).show();
// Tencent类是SDK的主要实现类,开发者可通过Tencent类访问腾讯开放的OpenAPI。
// 其中APP_ID是分配给第三方应用的appid,类型为String。
mTencent = Tencent.createInstance(APP_ID, this.getApplicationContext());
//初始化登陆回调Listener
if (mListener == null) {
mListener = new QQLoginListener ();
}
if (!mTencent.isSessionValid()) {
mTencent.login(this, "all", mListener);
}
}
}
/**
* 登陆结果回调
*/
private class QQLoginListener implements IUiListener {
@Override
public void onComplete(Object o) {
parseResult(o);
setUserInfo();
}
@Override
public void onError(UiError e) {
String errorMessage = e.errorMessage;
}
@Override
public void onCancel() {
}
}
/**
* 解析返回的Json串
*/
private void parseResult(Object o) {
//解析返回的Json串
JSONObject jsonObject = (JSONObject) o;
try {
String openID = jsonObject.getString("openid"); //用户标识
String access_token = jsonObject.getString("access_token"); //登录信息
String expires = jsonObject.getString("expires_in"); //token有效期
//配置token
//如果登录态有效,则返回成功给应用,如果登录态失效,则会自动进入登录流程,将最新的登录态数据返回给应用。
//建议开发者在每次应用启动时调用一次该API(先调用setOpenId、setAccessToken),以确保每次打开应用时用户都是有登录态的。
mTencent.setOpenId(openID);
mTencent.setAccessToken(access_token, expires);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 用户信息获取与展示
*/
private void setUserInfo() {
QQToken qqToken = mTencent.getQQToken();
UserInfo userInfo = new UserInfo(this, qqToken);
if (mInfoListener == null) {
mInfoListener = new GetInfoListener(this,"get_user_info");
}
userInfo.getUserInfo(mInfoListener);
}
/**
* 获取用户信息回调
*/
private class GetInfoListener implements IUiListener {
public GetInfoListener(QQActivity qqActivity, String get_user_info) {
}
@Override
public void onComplete(Object o) { //获取成功,开始展示
JSONObject jsonObject = (JSONObject) o;
try {
String name = jsonObject.getString("nickname");//姓名
String sex = jsonObject.getString("gender");//姓别
String imgUrl = jsonObject.getString("figureurl_qq_2"); //头像url(100*100像素)
String imgUrl2 = jsonObject.getString("figureurl"); //头像url(30*30像素)
String province = jsonObject.getString("province"); //省
String city = jsonObject.getString("city"); //城市
// Picasso.with(QQActivity.this).load(imgUrl).into(img);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onError(UiError uiError) { //获取失败
}
@Override
public void onCancel() {
}
}
/**
* 在某些低端机上调用登录后,由于内存紧张导致APP被系统回收,登录成功后无法成功回传数据。
* @param requestCode
* @param resultCode
* @param data
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
mTencent.onActivityResultData(requestCode, resultCode, data, mListener);
}
如果想集成第三方支付(微信支付,支付宝支付,银联支付)的小伙伴么,可以看一下博客。
微信支付:http://blog.csdn.net/wangxiaohuhu1314/article/details/76228712
支付宝支付 : http://blog.csdn.net/wangxiaohuhu1314/article/details/76191157
银联支付 : http://blog.csdn.net/wangxiaohuhu1314/article/details/76419187