Android集成QQ登录
来源:互联网 发布:后窗知乎 编辑:程序博客网 时间:2024/04/25 11:55
转载请声明出处:http://blog.csdn.net/green_pepper/article/details/70001867
小菜鸟一只,每篇博客都是一页学习笔记,希望自己能一直写下去,自己的技术也能得到锻炼与提高。如果有什么错误的话请多多指教。
1.前期准备
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目录下,并添加依赖。
2.相关配置
1.添加权限(AndroidManifest.xml)
<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2.添加Activity(AndroidManifest.xml)
<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" /> <!-- 这里可以换成你在开放平台申请的appID(tencent+appid) --> <data android:scheme="tencent1105765943" /> </intent-filter></activity><activity android:name="com.tencent.connect.common.AssistActivity" android:configChanges="orientation|keyboardHidden" android:screenOrientation="behind" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
3.布局文件(activity_main.xml)
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal" android:orientation="vertical"> <ImageView android:id="@+id/iv_img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:src="@mipmap/ic_launcher" /> <TextView android:id="@+id/tv_nickname" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="未登录" /> <Button android:id="@+id/btn_login" android:layout_width="200dp" android:layout_height="wrap_content" android:text="登录" /> <Button android:id="@+id/btn_logout" android:layout_width="200dp" android:layout_height="wrap_content" android:text="退出" /></LinearLayout>
3.功能代码
public class MainActivity extends AppCompatActivity { //布局文件控件 private Button login, logout; private ImageView img; private TextView nickName; private String name, imgUrl; private static final String APPID = "222222"; private Tencent mTencent; private QQLoginListener mListener; private UserInfo userInfo; private GetInfoListener mInfoListener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { img = (ImageView) findViewById(R.id.iv_img); nickName = (TextView) findViewById(R.id.tv_nickname); login = (Button) findViewById(R.id.btn_login); logout = (Button) findViewById(R.id.btn_logout); //初始化Tencent对象 if (mTencent == null) { mTencent = Tencent.createInstance(APPID, this); } //初始化登陆回调Listener if (mListener == null) { mListener = new QQLoginListener(); } //登陆按钮点击事件 login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { QQLogin(); } }); //退出(登出)按钮点击事件 logout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { QQLogout(); } }); } /** * 登录 */ private void QQLogin() { if (!mTencent.isSessionValid()) { mTencent.login(this, "all", mListener); } } /** * 退出(登出) */ private void QQLogout() { if (mTencent.isSessionValid()) { mTencent.logout(this); //修改UI img.setImageResource(R.mipmap.ic_launcher); nickName.setText("未登录"); } } /** * 登陆结果回调 */ private class QQLoginListener implements IUiListener { @Override public void onComplete(Object o) { //登录成功 parseResult(o); setUserInfo(); } @Override public void onError(UiError uiError) { //登录失败 } @Override public void onCancel() { //取消登陆 } } /** * 解析返回的Json串 */ private void parseResult(Object o) { 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 mTencent.setOpenId(openID); mTencent.setAccessToken(access_token, expires); } catch (JSONException e) { e.printStackTrace(); } } /** * 用户信息获取与展示 */ private void setUserInfo() { QQToken qqToken = mTencent.getQQToken(); userInfo = new UserInfo(this, qqToken); if (mInfoListener == null) { mInfoListener = new GetInfoListener(); } userInfo.getUserInfo(mInfoListener); } /** * 获取用户信息回调 */ private class GetInfoListener implements IUiListener { @Override public void onComplete(Object o) { //获取成功,开始展示 JSONObject jsonObject = (JSONObject) o; try { name = jsonObject.getString("nickname"); imgUrl = jsonObject.getString("figureurl_qq_2"); //头像url(100*100像素) nickName.setText(name); Picasso.with(MainActivity.this).load(imgUrl).into(img); } catch (Exception e) { e.printStackTrace(); } } @Override public void onError(UiError uiError) { //获取失败 } @Override public void onCancel() { } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { mTencent.onActivityResultData(requestCode, resultCode, data, mListener); }}
4.最后说两句
这里只是写了一个小demo实现了基础的登录与退出功能,如果有什么错误的地方请多多指教。
更多Api请看腾讯的开发文档:
http://wiki.open.qq.com/index.php?title=Android_API%E8%B0%83%E7%94%A8%E8%AF%B4%E6%98%8E&=45038
0 0
- 【Android】集成QQ登录
- Android集成QQ登录
- Android集成QQ登录
- Android 集成QQ登录
- Android集成SDK实现QQ登录教程
- 关于Android如何集成QQ登录
- QQ、微信三方登录集成
- 踩坑!android端集成QQ第三方登录
- 网站集成QQ登录功能
- 网站集成QQ登录功能
- 集成QQ第三方登录
- android 实现qq登录
- Android QQ登录
- Android 调用QQ登录
- android QQ 登录
- Android之QQ登录
- Android QQ登录
- Android QQ登录
- tensorflow的基本用法(三)
- Android ADB工具详解
- Activity加载模式
- 盒子模型和css属性
- Emacs使用笔记
- Android集成QQ登录
- 漫步数理统计十二——随机变量的期望
- g
- Qt for PC环境搭建-Win7+Qt5.7
- jQuery-ajax
- Java StringBuffer 和 StringBuilder 类
- 数据库基础
- 数据结构-顺序表与单链表的C++模板类实现
- uC/OSIII学习笔记(一)消息传递