qq互联安卓sdk接入

每次新接触一个第三方sdk,根据官网文档接入完成之后,总是会出现各种各样的问题,为此做一下记录,方便有相同需求的朋友。

一、配置sdk到工程

  1、将从官网下载的库文件open-sdk.jar、mta_sdk_x.x.x.jar加入到工程并添加到编译路径中。具体的操作步骤为:选中open-sdk.jar,右键菜单中选择Build Path, 选择Add to Build Path,如下图所示:

     

2、配置AndroidManifest文件

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

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 
<application>
 <activity
       android:name="com.tencent.tauth.AuthActivity"
       android:noHistory="true"
       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" />
           <data android:scheme="tencent你的AppId" />
    </intent-filter>
 </activity>
<application>

二、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<String> imageUrls = new ArrayList<String>();
    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











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值