您的位置:首页 > 其它

转一个QQ登陆SDK使用说明,附SDK以及demo

2013-12-16 11:35 507 查看
2012年11月8日,Android SDK从V1.1版本升级到V1.2版本。 相比V1.1版本,增加了分享内容到QQ空间的功能,且支持Android V2.2及以上版本

1. Android SDK 简介

Android SDK以Jar包形式提供,封装了QQ登录的登录授权以及大部分OpenAPI,移动应用只需要修改少量代码,不需要理解验证授权流程,即可快速实现QQ登录功能,并可调用平台提供的OpenAPI。

Android平台上的应用,要使用QQ互联提供的Android SDK,请先在QQ互联开放平台进行注册,获取appid和appkey。http://opensns.qq.com/

注意: 1. Android SDK V1.2支持的Android版本:2.2及以上版本。 2. 支持的第三方浏览器:Android系统自带浏览器,Firefox,Opera Mobile。 3. 支持内置的web view与浏览器两种方式进行登录授权,但浏览器方式用户跳跃较大,不建议使用。

2. Android SDK 下载

见本帖附件

3. 创建工程及引用SDK源码文件

以下以eclipse为开发的IDE进行范例说明: (1)创建一个工程,并把 tencent_openapi.jar 放到lib(或libs)目录下,如下图所示: <ignore_js_op>


connect_android_1.jpg (49.73 KB, 下载次数: 42)

下载附件 保存到相册

2012-11-21 21:34 上传

(2)将tencent_openapi.jar加入编译路径中。 具体的操作步骤为:选中tencent_openapi.jar ,右键菜单中选择Build Path, 选择Add to Build Path,如下图所示: <ignore_js_op>


connect_android_2.jpg (127.97 KB, 下载次数: 40)

下载附件 保存到相册

2012-11-21 21:34 上传

在工程的Referenced Libraries目录下看到导入的jar包,说明已经成功将jar包加入build path,如下图所示: <ignore_js_op>


connect_android_3.jpg (47.79 KB, 下载次数: 36)

下载附件 保存到相册

2012-11-21 21:34 上传

4. 登录授权

在调用OpenAPI之前,需要先启动SDK的TAuthView(一个Activity)以获取access token,再用access token获得OpenID。

4.1 获取access token

(1)获取access token需要访问网络,所以需要在AndroidManifest.xml中加入以下代码:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

(2)获取access token的方法在 com.tencent.tauth.TAuthView 这个类中,TAuthView是一个Activity,因此需要在AndroidManifest.xml文件中声明该Activity,代码如下:

<activity android:name="com.tencent.tauth.TAuthView" android:theme="@style/ThemeActivity" android:launchMode="singleTask" android:configChanges="keyboardHidden|navigation|orientation"> <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>

启动TAuthView,需要以 intent.putExtra 的方式传入如下参数:

[align=right]参数[/align]

[align=right]是否必须[/align]

[align=right]含义[/align]

[align=right]client_id[/align]

[align=right]必须[/align]

[align=right]申请注册成功后,分配给应用的appid。[/align]

[align=right]scope[/align]

[align=right]可选[/align]

请求用户授权时向用户显示的可进行授权的列表。
[align=left]可填写的值是【QQ登录】API文档中列出的接口,以及一些动作型的授权(目前仅有:do_like); 如果要填写多个接口名称,请用逗号隔开。 例如:scope=get_user_info,list_album,upload_pic,do_like 不传则默认请求对接口get_user_info进行授权。 建议控制授权项的数量,只传入必要的接口名称,因为授权项越多,用户越可能拒绝进行任何授权。[/align]

[align=right]target[/align]

[align=right]必须[/align]

[align=right]打开登录页面的方式:“_slef”以webview方式打开; "_blank"以内置安装的浏览器方式打开。[/align]

[align=right]callback[/align]

[align=right]可选[/align]

成功授权后的回调地址。
[align=left]必须与注册时填写的回调地址一致,用来进行第三方应用的身份验证。 不能包含特殊字符“#”; 不能是浏览器能识别的协议(如:http://auth.qq.com); 不区分大小写,在AndroidManifest.xml设置的scheme必须是小写; 不传则默认为http://auth.qq.com; 如果设置了,请注意与AndroidManifest.xml里的值一致[/align]

下面是打开登录授权页面的示例代码(在SDK的Demo包中的位置:\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的Demo包中的位置:\TAuthDemo\src\com\tencent\tauthdemo\TAuthDemoActivity.java):

public class AuthReceiver extends BroadcastReceiver { private static final String TAG="AuthReceiver"; @Override public 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 token mAccessToken = access_token; ((TextView)findViewById(R.id.access_token)).setText(access_token); TDebug.msg("正在获取OpenID...", getApplicationContext()); //用access token 来获取open id mTencentOpenAPI.openid(access_token, new OpenIDListener()); } } }

特别提示: 获取到的access token具有3个月有效期,应用需实现防过期策略,并在过期后提示用户再次授权。 移动应用可存储access token信息,以便后续调用OpenAPI访问和修改用户信息时使用。

4.2 获取OpenID

获取到access token后,就可以用access token来获取相应的openid,调用接口如下:

//用access token 来获取openidTencentOpenAPI.openid(access_token, new Callback());

所有OpenAPI的调用都通过TencentOpenAPI类来代理实现。这个类的方法都是异步的,以非阻塞方式工作,所以应用在调用OpenAPI时, 需要实现并传入一个com.tencent.tauth.http.Callback接口的实例,当操作完成后回调相应的方法。 Callback的定义如下:

public interface Callback {

void onSuccess(Object obj); void onFail(int ret, String msg); void onCancel(int flag);

}

实现接口的示例代码如下(在SDK的Demo包中的位置:\TAuthDemo\src\com\tencent\tauthdemo\TAuthDemoActivity.java ):

TencentOpenAPI.openid(access_token, new Callback() {

@Override public void onSuccess(final Object obj) { runOnUiThread(new Runnable() { @Override public void run() { setOpenIdText(((OpenId)obj).getOpenId()); } }); } @Override public void onFail(int ret, final String msg) { runOnUiThread(new Runnable() { @Override public void run() { TDebug.msg(msg, getApplicationContext()); } }); } @Override public void onCancel(int flag) { }

});

5. 使用SDK提供的QQ登录按钮样式

SDK提供了大中小3种登录按钮,以及中小2种退出按钮,开发者可以在代码中设置按钮样式。 获取按钮示例代码如下(在SDK的Demo包中的位置:\TAuthDemo\src\com\tencent\tauthdemo\TAuthDemoActivity.java ):

ImageView loginBtn = (ImageView) findViewById(R.id.login); //登录大按钮 loginBtn.setImageDrawable(TencentOpenRes.getBigLoginBtn(getAssets())); //登录中按钮 //loginBtn.setImageDrawable(TencentOpenRes.getLoginBtn(getAssets())); //登录小按钮 //loginBtn.setImageDrawable(TencentOpenRes.getSmallLoginBtn(getAssets()));
ImageView logoutBtn = (ImageView) findViewById(R.id.logout); //退出中按钮 loginBtn.setImageDrawable(TencentOpenRes.getLogoutBtn(getAssets())); //退出小按钮 loginBtn.setImageDrawable(TencentOpenRes.getSmallLogoutBtn(getAssets()));
6. 调用OpenAPI

成功获取到access token和openid后,就可以调用SDK中的OpenAPI了。 建议:应用在用户登录后,即调用get_user_info接口获得该用户的头像、昵称并显示在应用中,使用户体验统一。

调用OpenAPI的过程与获取openid类似,需要实现并传入一个com.tencent.tauth.http.Callback接口的实例,当操作完成后回调相应的方法。

下面以调用get_user_info接口为例: (在SDK的Demo包中的位置:\TAuthDemo\src\com\tencent\tauthdemo\clickListener\GetUserInfoClickListener.java )

TencentOpenAPI.userInfo(mActivity.mAccessToken, mActivity.mAppid, mActivity.mOpenId, new Callback() { @Override public void onSuccess(final Object obj) { mActivity.runOnUiThread(new Runnable() { @Override public void run() { mActivity.dismissDialog(TAuthDemoActivity.PROGRESS); mActivity.showMessage("用户信息", obj.toString()); } }); } @Override public void onFail(int ret, final String msg) { mActivity.runOnUiThread(new Runnable() { @Override public void run() { mActivity.dismissDialog(TAuthDemoActivity.PROGRESS); TDebug.msg(msg, mActivity); } }); }
@Override public void onCancel(int flag) { }

});

7. 分享内容到QQ空间

(1)实现分享内容到QQ空间功能,需要用到SDK的一个Activity,因此需要在AndroidManifest.xml文件中声明该Activity,代码如下:

<activity android:name="com.tencent.tauth.AddShareView" android:theme="@style/ThemeActivity" android:launchMode="singleTask" android:configChanges="keyboardHidden|navigation|orientation"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="tauth"/> </intent-filter> </activity>

(2)调用TencentOpenAPI2.sendStore方法,示例代码如下:

Bundle bundle = new Bundle(); //必须。feeds的标题,最长36个中文字,超出部分会被截断。 bundle.putString("title", "QQ登录SDK:Add_Share测试"); //必须。分享所在网页资源的链接,点击后跳转至第三方网页, 请以http://开头。 bundle.putString("url", "http://www.qq.com" + "#" + System.currentTimeMillis()); //用户评论内容,也叫发表分享时的分享理由。禁止使用系统生产的语句进行代替。最长40个中文字,超出部分会被截断。 bundle.putString("comment", ("QQ登录SDK:测试comment" + new Date())); //所分享的网页资源的摘要内容,或者是网页的概要描述。 最长80个中文字,超出部分会被截断。 bundle.putString("summary", "QQ登录SDK:测试summary"); //所分享的网页资源的代表性图片链接",请以http://开头,长度限制255字符。 //多张图片以竖线(|)分隔,目前只有第一张图片有效,图片规格100*100为佳。 bundle.putString("images", "http://imgcache.qq.com/qzone/space_item/pre/0/66768.gif"); //分享内容的类型。4表示网页;5表示视频(type=5时,必须传入playurl)。 bundle.putString("type", "5"); //视频链接。长度限制为256字节。仅在type=5的时候有效。 bundle.putString("playurl",http://player.youku.com/player.php/Type/Folder/Fid/15442464/Ob/1/Pt/0/sid/XMzA0NDM2NTUy/v.swf"); TencentOpenAPI2.sendStore(mActivity.getApplicationContext(), mActivity.mAccessToken, mActivity.mAppid,

mActivity.mOpenId, "_self", bundle, new Callback() {

@Override public void onSuccess(final Object obj) { mActivity.runOnUiThread(new Runnable() { @Override public void run() { mActivity.dismissDialog(TAuthDemoActivity.PROGRESS); Toast toast = Toast.makeText(mActivity, "成功分享到QQ空间!", Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); } }); } @Override public void onFail(final int ret, final String msg) { mActivity.runOnUiThread(new Runnable() { @Override public void run() { Toast toast = Toast.makeText(mActivity, "分享失败,错误信息:" + ret + ",

" + msg, Toast.LENGTH_SHORT);

toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); } }); }
@Override public void onCancel(int flag) { // TODO Auto-generated method stub } }, null);
附录:Android SDK主要类说明

1. TAuthView.java:这个类是一个Activity,用来处理用户登录授权,如果成功则返回access token, 并以广播的形式广播出去。 2. TencentOpenHost.java:这个类用来定义接口用到的URL地址常量。 3. TencentOpenAPI.java:这个类封装了主要的OpenAPI,每一个接口都是异步的,以非阻塞的方式工作。 4. AddShareView.java:这个类是一个Activity,用来实现分享内容到QQ空间。 5. TencentOpenAPI2.java:这个类封装分享内容到QQ空间的接口。

QQ互联, QQ登陆, SDK, 开放平台
<ignore_js_op>


Connect_Android_SDK_V1.2.zip

2012-11-21 21:32 上传

点击文件名下载附件

下载积分: 下载豆 -2

94.21 KB, 下载次数: 130, 下载积分: 下载豆 -2

QQ登陆SDK

<ignore_js_op>


Connect_Android_SDK_Demo_V1.2.zip

2012-11-21 21:33 上传

点击文件名下载附件

下载积分: 下载豆 -2

294.59 KB, 下载次数: 183, 下载积分: 下载豆 -2

QQ登陆SDK_demo
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: