zoukankan      html  css  js  c++  java
  • Android应用之——最新版本号SDK V2.4实现QQ第三方登录

    为什么要写这篇博客呢?由于。我在做这个第三方登录的时候,找了非常多资料,发现要么就是过时了。要么就是说的非常不清楚。非常罗嗦。并且非常多都是一些小demo,不是什么实例。甚至连腾讯官方的文档都有这个问题,文档中非常多地方用的不是最新的sdk写的演示样例,用最新版本号的sdk发现根本没法达到预期的效果。非常多api已经发生了变化,demo还是用的原来的api中的方法。最坑爹是demo下载下来还要一个支持的库文件,可是sdk中又没有提供。。



    自己跌跌撞撞。查找资料,整合,弄了几个小时,最终把它给整出来了。用在了开发的项目上面。达到了预期的效果。请看效果图:

                  


    以下来说下怎么实现的。尽量贴上所有代码,并解释清楚

    点击登录界面的QQ图标。触发调用第三方的事件

    代码例如以下:

    findViewById(R.id.iv_tencent_login).setOnClickListener(new OnClickListener() {
    
    	@Override
    	public void onClick(View v) {
    	// TODO Auto-generated method stub
    	mTencent = Tencent.createInstance(
    		AppConst.TENCENT_APP_ID,getApplicationContext());
    <span style="white-space:pre">	</span>mTencent.login(E_SigninActivity.this,AppConst.TENCENT_SCOPE, new BaseUiListener());
    		}
    });

    当中 onclick中的几句代码就是调用QQ登录的过程

    Tencent.createInstance(AppConst.TENCENT_APP_ID,getApplicationContext());
    这句代码得到Tencent实例。我们就是利用这个实例的login方法来 触发QQ登录的。

    上面的creatInstance方法有两个參数,第一个參数就是你的APP_ID 这个是要在腾讯开放平台申请的,详细怎么申请能够參考开放平台的介绍。

    第二个參数是一个全局的context上下文


    以下来看第二句代码

    mTencent.login(E_SigninActivity.this,AppConst.TENCENT_SCOPE, new BaseUiListener());
    通过这句代码,SDK实现了QQ的登录。这种方法有三个參数。第一个參数是context上下文,第二个參数SCOPO 是一个String类型的字符串,表示一些权限

    官方文档中的说明:应用须要获得哪些API的权限。由“,”分隔。

    比如:SCOPE = “get_user_info,add_t”;全部权限用“all” 

    第三个參数。是一个事件监听器,IUiListener接口的实例,这里用的是该接口的实现类



    调用login方法后,就会监听登录事件。登录成功或者失败后,会回调监听器里面的几个方法,详细请看以下

    private class BaseUiListener implements IUiListener {
    		private String nickname;
    		@Override
    		public void onComplete(Object response) {
    			Toast.makeText(getApplicationContext(), "回调成功", 0).show();
    			JSONObject responseJsonobject = (JSONObject) response;
    			final String openid = responseJsonobject.optString("openid");
    			final String access_token = responseJsonobject.optString("access_token");
    			final String expires_in = responseJsonobject.optString("expires_in");
    
    			Log.i(TAG, response.toString());
    			QQToken qqToken = mTencent.getQQToken();
    			UserInfo info = new UserInfo(getApplicationContext(), qqToken);
    			info.getUserInfo(new IUiListener() {
    				@Override
    				public void onError(UiError arg0) {
    					// TODO Auto-generated method stub
    				}
    				
    				@Override
    				public void onComplete(Object response) {
    					// TODO Auto-generated method stub
    					JSONObject jsonObject = (JSONObject) response;
    					nickname = jsonObject.optString("nickname");
    					/** QQ登录成功后,获取相关信息,登录应用*/
    					loginModel.loginFromWeiboAndQQ("qq", openid, access_token,
    							expires_in, nickname, BeeFrameworkApp.getInstance().getImei(),
    							SharedPrefsUtil.getString(E_SigninActivity.this,
    									AppConst.LATITUDE), SharedPrefsUtil.getString(
    									E_SigninActivity.this, AppConst.LONGITUDE));
    				}
    				
    				@Override
    				public void onCancel() {
    					// TODO Auto-generated method stub
    				}
    			});
    		}
    
    		@Override
    		public void onError(UiError e) {
    		}
    
    		@Override
    		public void onCancel() {
    		}
    	}

    当自己定义的监听器实现IUiListener接口后。必需要实现接口的三个方法,onComplete  onCancel onError

    分别表示第三方登录成功,取消 。错误。

    我们在QQ登录成功后要进行的兴许操作就是写在onComplete方法里面的,在这里进行开发就可以。

    onComplete的參数response封装了一些关键的信息。详细信息例如以下图所看到的:



    普通情况下。QQ登录成功了,我们还想获取一些QQ的基本信息。比方昵称,头像什么的。这个时候怎么办?

    sdk给我们提供了一个类UserInfo,这个类中封装了QQ用户的一些信息,我么能够通过这个类拿到这些信息


    怎样得到这个UserInfo类呢? 

    QQToken qqToken = mTencent.getQQToken();
    UserInfo info = new UserInfo(getApplicationContext(), qqToken);

    得到了userInfo对象后,调用它的getUserInfo(iuilistener)方法就能够得到用户的基本信息

    info.getUserInfo(new IUiListener() {
    				@Override
    				public void onError(UiError arg0) {
    					// TODO Auto-generated method stub
    				}
    				
    				@Override
    				public void onComplete(Object response) {
    					// TODO Auto-generated method stub
    					
    					Log.i(TAG, response.toString());
    					
    					JSONObject jsonObject = (JSONObject) response;
    					nickname = jsonObject.optString("nickname");
    					/** QQ登录成功后,获取相关信息,登录应用*/
    					loginModel.loginFromWeiboAndQQ("qq", openid, access_token,
    							expires_in, nickname, BeeFrameworkApp.getInstance().getImei(),
    							SharedPrefsUtil.getString(E_SigninActivity.this,
    									AppConst.LATITUDE), SharedPrefsUtil.getString(
    									E_SigninActivity.this, AppConst.LONGITUDE));
    				}
    				
    				@Override
    				public void onCancel() {
    					// TODO Auto-generated method stub
    				}
    			});

    获取用户信息成功后,相同会调用onComplete方法,它的第一个參数response就封装了用户的信息,它事实上是一个json格式的字符串。在之前的版本号中是json格式的,新版本号改为了Object。可是我们还是能够把它强转成JSONObject 然后取当中的字段。从下图能够看出它里面的全部信息。


    我们临时仅仅须要nickname昵称,所以通过optstring得到nickname

    JSONObject jsonObject = (JSONObject) response;
    nickname = jsonObject.optString("nickname");

    得到我们想要的所有信息后,就能够在oncomplete中进行其它一些登录的操作了


    QQ第三方登录的过程基本就是这个样子了,当然API里面还有非常多其它的方法,response里面还有非常多其它信息。大家也能够去挖掘。找到自己想要的,为我所用。

    本篇博客到这里就结束了,希望能帮到你。


    友情提示:转载请注明出处 









  • 相关阅读:
    Python学习笔记之操作yalm
    Python学习笔记之多线程
    Python学习笔记之网络编程
    Python学习笔记之面对象与错误处理
    Python学习笔记之装饰器
    Python学习笔记之内置模块
    Python学习笔记之函数与正则
    PAT甲级1049. Counting Ones
    PAT甲级1045. Favorite Color Stripe
    PAT甲级1034. Head of a Gang
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7236691.html
Copyright © 2011-2022 走看看