【QQ登录】Android_SDK使用说明QQ登录Android SDK以Jar包形式提供,封装了QQ登录的登录授权以及大部分OpenAPI,应用只需要修改少量代码,不需要理解验证授权流程,即可快速实现QQ登录功能。
Android平台上的应用,请在申请appid,appkey后,使用QQ互联提供的Android SDK。
注意:1. QQ登录Android SDK支持的Android版本:2.1及以上版本。
2. 支持的第三方浏览器:Android系统自带浏览器,Firefox,Opera Mobile。
3. 支持web view与浏览器两种方式,即支持跳转到手机浏览器上进行QQ登录与验证流程,开发者可在SDK包中选择浏览器模式即可,但浏览器方式用户跳跃较大,不建议使用。
4. 仅适用于移动应用,即基于【QQ登录】使用Implicit_Grant方式获取Access_Token接入的应用。
1. Android SDK 下载请到【QQ登录】SDK下载页面下载QQ登录Android SDK。
2. 创建工程及引用SDK源码文件以下以eclipse为开发的IDE进行范例说明:1. 创建一个工程,并把tencent_openapi.jar 放到lib中,如下图所示:2. 将tencent_openapi.jar加入编译路径中。
具体的操作步骤为:选中tencent_openapi.jar ,右键菜单中选择Build Path,选择Add to Build Path,如下图所示:看到类似以下的样子,说明已经成功将jar包加入build path :3. 修改必要的代码3.1 使用SDK提供的按钮样式SDK提供了大中小3种登录按钮,开发者可以在代码中设置按钮样式。
示例代码如下(在SDK包中的位置:\TAuthDemo\src\com\tencent\tauthdemo\TAuthDemoActivity.java )ImageViewloginBtn = (ImageView) findViewById(R.id.login);//大按钮loginBtn.setImageDrawable(TencentOpenRes.getBigLoginBtn(getAssets()));//中按钮//loginBtn.setImageDrawable(TencentOpenRes.getLoginBtn(getAssets()));//小按钮//loginBtn.setImageDrawable(TencentOpenRes.getSmallLoginBtn(getAssets()));3.2 获取access token(1)获取Access token 需要访问网络,所以需要修改AndroidManifest.xml,加入以下代码:<uses-permission android:name="android.permission.INTERNET"></uses-permission><activity android:name="com.tencent.tauth.TAuthView" 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" /><!—这里的scheme必须与下面设置的CALLBACK一致,且全部小写。
默认值是auth -><data android:scheme="auth"/></intent-filter></activity>(2)处理登录页面的打开方式在com.tencent.tauth.TAuthView.class这个类中。
需要以intent.putExtra下面是打开登录授权页面的示例代码(在SDK包中的位置:\TAuthDemo\src\com\tencent\tauthdemo\TAuthDemoActivity.java )private void auth(String clientId, String target){// 使用WebView打开Intent intent = new Intent(TAuthDemoActivity.this,com.tencent.tauth.TAuthView.class);intent.putExtra(TAuthView.CLIENT_ID, clientId);intent.putExtra(TAuthView.SCOPE, scope);intent.putExtra(TAuthView.TARGET, target);intent.putExtra(TAuthView.CALLBACK, CALLBACK);startActivity(intent);}(3)成功授权后会以广播的形式把相应的access token,expires_in的值广播,需要写一个接收器来接收相关的数值。
示例代码如下(在SDK包中的位置:\TAuthDemo\src\com\tencent\tauthdemo\TAuthDemoActivity.java ) public class AuthReceiver extends BroadcastReceiver{private static final String TAG="AuthReceiver";@Overridepublic void onReceive(Context context, Intent intent){Bundle exts = intent.getExtras();String raw = exts.getString("raw");String access_token = exts.getString("access_token");String expires_in = exts.getString("expires_in");Log.i(TAG, String.format("raw: %s, access_token:%s, expires_in:%s", raw, access_token, expires_in));if (access_token != null){//获取到access tokenmAccessToken = access_token;((TextView)findViewById(R.id.access_token)).setText(access_token);TDebug.msg("正在获取OpenID...", getApplicationContext());//用access token 来获取open idmTencentOpenAPI.openid(access_token, new OpenIDListener());}}}特别提示:获取到的access token具有3个月有效期,网站需实现防过期策略,并在过期后提示用户再次授权。
第三方网站可存储access token信息,以便后续调用OpenAPI访问和修改用户信息时使用。
3.3 获取OpenID获取到access token后,就可以依据access token 来获取相应的openid://用access token 来获取openidTencentOpenAPI.openid(access_token, new Callback());所有的开发接口的调用都通过TencentOpenAPI类来代理实现。
这个的类里的接口的调用是一个非阻塞模式进行的,所以要注册一个回调函数,当完成后进行相应的处理。
示例代码如下(在SDK包中的位置:\TAuthDemo\src\com\tencent\tauthdemo\TAuthDemoActivity.java )TencentOpenAPI.openid(access_token, new Callback() {@Overridepublic void onSuccess(final Object obj){runOnUiThread(new Runnable(){@Overridepublic void run(){setOpenIdText(((OpenId)obj).getOpenId());}});}@Overridepublic void onFail(int ret, final String msg){runOnUiThread(new Runnable(){@Overridepublic void run(){TDebug.msg(msg, getApplicationContext());}});}});4. 调用OpenAPI成功获取到access token和openid后,就可以调用QQ登录的OpenAPI了。
建议网站在用户登录后,即调用getUserInfo接口获得该用户的头像、昵称并显示在网站上,使用户体验统一。
调用OpenAPI的过程与获取OpenID类似,要注册一个回调函数,当完成后进行相应的处理。
下面以调用get_user_info接口为例(在SDK包中的位置:\TAuthDemo\src\com\tencent\tauthdemo\clickListener\GetUserInfoClickListener.java )erInfo(mActivity.mAccessToken, mActivity.mAppid, mActivity.mOpenId, new Callback() {@Overridepublic void onSuccess(final Object obj){mActivity.runOnUiThread(new Runnable(){@Overridepublic void run(){mActivity.dismissDialog(TAuthDemoActivity.PROGRESS);mActivity.showMessage("用户信息", obj.toString());}});}@Overridepublic void onFail(int ret, final String msg){mActivity.runOnUiThread(new Runnable(){@Overridepublic void run(){mActivity.dismissDialog(TAuthDemoActivity.PROGRESS);TDebug.msg(msg, mActivity);}});}});附录:Android SDK主要类说明1. TAuthView.java:这个类是处理用户授权登录的,如果成功返回access token, 会以广播的形式广播出去。