Android实现QQ登录(Android(安卓)Studio开发)
16lz
2021-01-26
很多人看到这篇博客可能会吐槽,官方不是已经写出开发文档,你在写一个不是照抄么?
由于昨天在开发项目中用到三方登录,以前认为很简单 有官方文档应该开启起来很容易,结果大家肯定猜到了,我用了一下午的时间才将三方登陆勉强完成。本人认为官方文档有些地方写的不清不楚(或者是我理解能力有限)。下两篇博客我将写一下微信、新浪微博登陆。
先放置效果图
1、我们应该下载腾讯官方的SDK
下载地址:http://wiki.open.qq.com/wiki/mobile/SDK下载
下载完之后里面还有Sample例子,基础比较好同学可以尝试观看一下。
2、Android Studio环境配置
首先我们先创建一个Android工程,将下载解压的中的jar文件全部拷贝到libs目录下,不要忘记右键Add as Library,
在AndroidManifest中添加必要的数据
权限:
"android.permission.INTERNET" />"android.permission.ACCESS_NETWORK_STATE" />
在application节点中添加
"com.tencent.tauth.AuthActivity" android:noHistory="true" android:launchMode="singleTask" >"android.intent.action.VIEW" />"android.intent.category.DEFAULT" />"android.intent.category.BROWSABLE" />"tencent222222" />
如果您下载的版本为SDK_V2.0以上的还需要添加
"com.tencent.connect.common.AssistActivity"android:theme="@android:style/Theme.Translucent.NoTitleBar"android:configChanges="orientation|keyboardHidden|screenSize" />
其中APPId为用户在腾讯开放平台创建App,系统给你分配的。我使用的是腾讯测试的APPId这个比较简单就不详细说了,不会的留言或者私信。
3、Activity的逻辑编写
如果上面环境配置成功,下面开始实现逻辑,首先展示一下我的布局,比较简单就一个简单的Button
"http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.lx.qqlogin.MainActivity"> "@+id/iv_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:src="@mipmap/ic_launcher"/>
MainActivity中的代码如下;
public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; private Tencent mTencent; private TextView mTvResult; private ImageView mIvIcon; private Context mContext; private String nicknameString; private String openidString; private Bitmap bitmap; private String APP_ID = "222222"; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == 0) { JSONObject response = (JSONObject) msg.obj; if (response.has("nickname")) { try { nicknameString = response.getString("nickname"); mTvResult.setText("QQ名:" + nicknameString); } catch (JSONException e) { e.printStackTrace(); } } } else if (msg.what == 1) { Bitmap bitmap = (Bitmap) msg.obj; mIvIcon.setImageBitmap(bitmap); } } }; private Button mBtn_login; private Button mBtn_logout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext = this; initUI(); } /** * 初始化UI控件 */ private void initUI() { mTvResult = (TextView) findViewById(R.id.tv_result); mIvIcon = (ImageView) findViewById(R.id.iv_icon); } //按钮的点击事件 public void login(View view) { mTencent = Tencent.createInstance(APP_ID, mContext); mTencent.login(this, "all", new BaseUiListener()); } /** * 当自定义的监听器实现IUiListener接口后,必须要实现接口的三个方法, * onComplete onCancel onError * 分别表示第三方登录成功,取消 ,错误。 */ private class BaseUiListener implements IUiListener { public void onCancel() { } public void onComplete(Object response) { try { //获得的数据是JSON格式的,获得你想获得的内容 //如果你不知道你能获得什么,看一下下面的LOG openidString = ((JSONObject) response).getString("openid"); } catch (JSONException e) { e.printStackTrace(); } /**到此已经获得OpneID以及其他你想获得的内容了 QQ登录成功了,我们还想获取一些QQ的基本信息,比如昵称,头像什么的,这个时候怎么办? sdk给我们提供了一个类UserInfo,这个类中封装了QQ用户的一些信息,我么可以通过这个类拿到这些信息 如何得到这个UserInfo类呢? */ QQToken qqToken = mTencent.getQQToken(); UserInfo info = new UserInfo(mContext, qqToken); //这样我们就拿到这个类了,之后的操作就跟上面的一样了,同样是解析JSON info.getUserInfo(new IUiListener() { public void onComplete(final Object response) { mHandler.obtainMessage(0, response).sendToTarget(); /**由于图片需要下载所以这里使用了线程,如果是想获得其他文字信息直接在mHandler里进行操作*/ new Thread() { @Override public void run() { JSONObject json = (JSONObject) response; Log.e(TAG, json.toString()); try { bitmap = Util.getbitmap(json.getString("figureurl_qq_2")); } catch (JSONException e) { e.printStackTrace(); } mHandler.obtainMessage(1, bitmap).sendToTarget(); } }.start(); } @Override public void onError(UiError uiError) { } public void onCancel() { } }); } public void onError(UiError arg0) { } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Tencent.onActivityResultData(requestCode, resultCode, data, new BaseUiListener()); }}
4、利用Util获取用户QQ的头像,使用的是HttpURLConnection,你们也可以使用Xutils、OkHttp等。Util代码如下:
public class Util { public static String TAG = "UTIL"; public static Bitmap getbitmap(String imageUri) { Log.v(TAG, "getbitmap:" + imageUri); // 显示网络上的图片 Bitmap bitmap = null; try { URL myFileUrl = new URL(imageUri); HttpURLConnection conn = (HttpURLConnection) myFileUrl .openConnection(); conn.setDoInput(true); conn.connect(); InputStream is = conn.getInputStream(); bitmap = BitmapFactory.decodeStream(is); is.close(); Log.v(TAG, "image download finished." + imageUri); } catch (IOException e) { e.printStackTrace(); Log.v(TAG, "getbitmap bmp fail---"); return null; } return bitmap; }}
看到这里已经接近尾声。 如果有任何疑问或者本人哪里出现错误,请大家指出,你们的支持是我最大动力,谢谢您的观看。
更多相关文章
- android 文件下载(一)
- 3月份工作回顾
- Android(安卓)Okhttp断点续传面试深入解析
- 『叫兽学堂』手把手教你如何正确启动Android(安卓)SDK 1.5模拟器
- Android系统定制之源码完美下载(一)
- android外部存储读写权限问题
- Android和iOS应用下载实现合成一个二维码
- Android(安卓)版本更新下载自动安装APK,并解决Android6.0安装失败
- Android2.0游戏开发实战宝典下载