qq互联安卓sdk接入

每次新接触一个第三方sdk,根据官网文档接入完成之后,总是会出现各种各样的问题,为此做一下记录,方便有相同需求的朋友。
一、配置sdk到工程
1、将从官网下载的库文件open-sdk.jar、mta_sdk_x.x.x.jar加入到工程并添加到编译路径中。具体的操作步骤为:选中open-sdk.jar,右键菜单中选择Build Path, 选择Add to Build Path,如下图所示:
qq互联安卓sdk接入
文章图片

2、配置AndroidManifest文件
在应用的AndroidManifest.xml增加配置的节点下增加以下配置(注:不配置将会导致无法调用API);


二、qq登录和注销
Tencent是SDK的功能入口,所有的接口调用都得通过Tencent进行调用。因此,调用SDK,首先需要创建一个Tencent实例,其代码如下:

public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Tencent类是SDK的主要实现类,开发者可通过Tencent类访问腾讯开放的OpenAPI。 // 其中APP_ID是分配给第三方应用的appid,类型为String。 mTencent = Tencent.createInstance(APP_ID, this.getApplicationContext()); // 1.4版本:此处需新增参数,传入应用程序的全局context,可通过activity的getApplicationContext方法获取 // 初始化视图 initViews(); }

1、 实现回调 IUiListener
调用SDK已经封装好的接口时,例如:登录、快速支付登录、应用分享、应用邀请等接口,需传入该回调的实例。
IUiListener的实现示例代码如下:
private class baseuilistener implements iuilistener { @override public void oncomplete(jsonobject response) { Util.toastMessage(m_instance, "oncomplete: "); docomplete(response); } protected void docomplete(jsonobject values) { } @override public void onerror(uierror e) { Util.toastMessage(m_instance, "onError: " + e.errorDetail); Util.dismissDialog(); } @override public void oncancel() { Util.toastMessage(m_instance, "onCancel: "); Util.dismissDialog() } }

public void qqLogin() { SdkApi.setLoginType(0); if (!mTencent.isSessionValid()){ loginListener = new BaseUiListener() { @Override protected void doComplete(JSONObject values) { initOpenidAndToken(values); } }; mTencent.login(m_instance, "all", loginListener); } else mTencent.logout(m_instance); }

三、qq分享
1、添加分享监听代码
IUiListener qqShareListener = new IUiListener() { @Override public void onCancel() { if (shareType != QQShare.SHARE_TO_QQ_TYPE_IMAGE) { Util.toastMessage(QQShareActivity.this, "onCancel: "); } } @Override public void onComplete(Object response) { // TODO Auto-generated method stub Util.toastMessage(QQShareActivity.this, "onComplete: " + response.toString()); } @Override public void onError(UiError e) { // TODO Auto-generated method stub Util.toastMessage(QQShareActivity.this, "onError: " + e.errorMessage, "e"); } };

2、分享给好友
public static void qqShare(){ Bundle params = new Bundle() params.putString(QQShare.SHARE_TO_QQ_TITLE, title); params.putString(QQShare.SHARE_TO_QQ_TARGET_URL, targetUrl); //分享的消息摘要,最长50个字 params.putString(QQShare.SHARE_TO_QQ_SUMMARY, summary); params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, imageUrl); //分享的图片url params.putString(QQShare.SHARE_TO_QQ_APP_NAME, appName); params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT); //params.putInt(QQShare.SHARE_TO_QQ_EXT_INT, mExtarFlag); Runnable payRunnable = new Runnable() { @Override public void run() { if (null != mTencent) { mTencent.shareToQQ(m_instance, params, qqShareListener); } } }; Thread checkThread = new Thread(payRunnable); checkThread.start(); }

3、分享到空间
public static void qqZoneShare(){ Bundle params = new Bundle() params.putInt(QzoneShare.SHARE_TO_QZONE_KEY_TYPE, QzoneShare.SHARE_TO_QZONE_TYPE_IMAGE_TEXT); //图文形式 params.putString(QzoneShare.SHARE_TO_QQ_TITLE, title); params.putString(QzoneShare.SHARE_TO_QQ_SUMMARY, summary); params.putString(QzoneShare.SHARE_TO_QQ_APP_NAME, appName); params.putString(QzoneShare.SHARE_TO_QQ_TARGET_URL, targetUrl); ArrayList imageUrls = new ArrayList(); imageUrls.add(imageUrl); params.putStringArrayList(QzoneShare.SHARE_TO_QQ_IMAGE_URL, imageUrls); Runnable payRunnable = new Runnable() { @Override public void run() { if (null != mTencent) { mTencent.shareToQzone(m_instance, params, qqShareListener); } } }; Thread checkThread = new Thread(payRunnable); checkThread.start(); }

4、特别注意
应用调用Andriod_SDK接口时,如果要成功接收到回调,需要在调用接口的Activity的onActivityResult方法中增加如下代码:
protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.d(TAG, "-->onActivityResult " + requestCode+ " resultCode=" + resultCode); if (requestCode == Constants.REQUEST_LOGIN || requestCode == Constants.REQUEST_APPBAR) { mTencent.onActivityResultData(requestCode,resultCode,data,loginListener); } else if (requestCode == Constants.REQUEST_QQ_SHARE || requestCode == Constants.REQUEST_QZONE_SHARE || resultCode == Constants.ACTIVITY_OK) { mTencent.onActivityResultData(requestCode,resultCode,data,qqShareListener); } super.onActivityResult(requestCode, resultCode, data); }

上边的代码一定一定要添加,否则无法接收回调。
注意:QZone接口暂不支持发送多张图片的能力,若传入多张图片,则会自动选入第一张图片作为预览图。多图的能力将会在以后支持。:
另外发现,参数targetUrl对于一些含有特殊字符的链接在分享到好友时没有问题,分享到空间时会出现url error错误
官方文档:http://wiki.open.qq.com/wiki/mobile/API%E8%B0%83%E7%94%A8%E8%AF%B4%E6%98%8E#1.14_.E5.88.86.E4.BA.AB.E5.88.B0QQ.E7.A9.BA.E9.97.B4.EF.BC.88.E6.97.A0.E9.9C.80QQ.E7.99.BB.E5.BD.95.EF.BC.89
















【qq互联安卓sdk接入】

??

    推荐阅读