Android_API调用说明

目录

1.接口调用说明

接口主要有: 登录/校验登录态:login(Activity activity, String scope, IUiListener listener)
注销:logout(Context context)
设置QQ头像:setAvatar(Activity activity, Bundle params, IUiListener listener) [需授权,申请]
增量授权:reAuth(Activity activity, String scope, IUiListener listener)
发送请求:ask(Activity activity, Bundle params, IUiListener listener) [需授权,暂不接受新申请]
分享消息到QQ(无需QQ登录):shareToQQ(Activity activity, Bundle params, IUiListener listener)
分享到QQ空间(无需QQ登录):shareToQzone(Activity activity, Bundle params, IUiListener
listener)/publishToQzone(Activity activity, Bundle params, IUiListener listener)
好友召回:reactive(Activity activity, Bundle params, IUiListener listener) [需授权,暂不接受新申请]
获取unionId: UnionInfo.getUnionId(IUiListener listener)
分享轻应用消息 : QQShare.SHARE_TO_QQ_ARK_INFO

1.1 登录/校验登录态

通过调用Tencent类的login函数发起登录/校验登录态。
该API具有两个作用:
(1)如果开发者没有调用mTencent实例的setOpenId、setAccessToken API,则该API执行正常的登录操作;
(2)如果开发者先调用mTencent实例的setOpenId、setAccessToken API,则该API执行校验登录态的操作。如果登录态有效,则返回成功给应用,如果登录态失效,则会自动进入登录流程,将最新的登录态数据返回给应用。

建议开发者在每次应用启动时调用一次该API(先调用setOpenId、setAccessToken),以确保每次打开应用时用户都是有登录态的。

调用登录API的示例代码如下:

 private void doLogin() {
 	IUiListener listener = new BaseUiListener() {
 		@Override
 		protected void doComplete(JSONObject values) {
 			updateLoginButton();
 		}
 	};
 	mTencent.login(this, SCOPE, listener);
}


调用登录API参数说明如下:

参数 参数说明
activity 调用者activity。应用使用SDK时,会从应用自己的Activity跳转到SDK的Activity,应用调用SDK的Activity即为这里的调用者activity。
scope 应用需要获得哪些API的权限,由“,”分隔。

例如:SCOPE = “get_user_info,add_t”;所有权限用“all”

listener 回调API,IUiListener实例。

注:在某些低端机上调用登录后,由于内存紧张导致APP被系统回收,登录成功后无法成功回传数据。
解决办法如下
在调用login的Activity或者Fragment重写onActivityResult方法,示例代码如下:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == Constants.REQUEST_API) {
	if(resultCode == Constants.RESULT_LOGIN) {
	    mTencent.handleLoginData(data, loginListener);
    }
    super.onActivityResult(requestCode, resultCode, data);
}


1.2 注销

通过调用Tencent类的logout函数注销。
调用注销API的示例代码如下:

mTencent.logout(this);


调用注销API参数说明如下:

参数 参数说明
context 调用者的context。Context是上下文的意思,每一个Activity都有对应的Context。示例中的this为调用者Activity对应的Context。

1.3 邀请好友

特别声明:该接口目前仅支持白名单应用。出于信息安全的考虑,本接口目前升级中。升级完成前暂不接受开发者的授权申请。升级完成后,所有接入QQ登录的开发者将均可调用。 已接入过该接口的开发者,不需要更改调用的接口,将自动兼容。

邀请好友的基本流程为:
(1)判断用户是否已经登录,且应用是否获取了openid;
(2)创建一个Bundle,并填入必要参数;
(3)调用SDK中Tencent类的inviteAPI,启动邀请界面。

通过调用Tencent类的invite函数实现邀请功能。

调用邀请API的示例代码如下:

 private void onClickInvite() {
	if (mTencent.isSessionValid() && mTencent.getOpenId() != null) {
			Bundle params = new Bundle();
			params.putString(Constants.PARAM_APP_ICON,
"http://imgcache.qq.com/qzone/space_item/pre/0/66768.gif");
			params.putString(Constants.PARAM_APP_DESC,
					"AndroidSdk_1_3: invite description!");
			params.putString(Constants.PARAM_APP_CUSTOM,
					"AndroidSdk_1_3: invite message!");
            params.putString(Constants.PARAM_ACT, "进入应用");
			mTencent.invite(MainActivity.this, params, new BaseUiListener());	
    }
}


调用邀请API参数说明如下:

参数 是否必传 类型 参数说明
Constants.PARAM_APP_ICON 必传 String 邀请弹框中显示的应用图标的URL。
Constants.PARAM_APP_DESC 必传 String 邀请弹框中显示的邀请内容。
Constants.PARAM_SOURCE 可选 String 由开发者自定义该参数内容,用于判断好友来源。

邀请成功后,被邀请方通过邀请链接进入应用时会携带该参数并透传给应用。

1.6 增量授权

通过调用Tencent类的reAuth函数进行授权。
当应用调用API返回没有权限(返回码为100030)时,可以调用增量授权函数让用户重新进行授权。调用时所使用的参数跟登录是一样的,只是在授权页面那里只会显示要增量授权的项,即所传的scope参数。

这里的scope参数跟登录时所传的scope参数作用是不一样的,这里只需要传需要增量授权的项,即用户之前没有授权的项。一般来说,就是前面调用失败的那个API的scope。

调用增量授权API的示例代码如下:

 //调用"add_topic" API的listener
 IUiListener listener = new BaseUiListener() {
	@Override
    protected void doComplete(JSONObject response, Object state) {
 		int ret=response.getInt("ret");
		if(ret==100030){
            //这里进行增量授权的操作
			if(mNeedReAuth){
				Runnable r=new Runnable(){
					public void run(){
						mTencent.reAuth(MainActivity.this,"add_topic",new BaseUiListener());
					}
				};
				MainActivity.this.runOnUiThread(r);
			}
		}
    }
};


调用增量授权API参数说明如下:

参数 参数说明
activity 调用者activity。应用使用SDK时,会从应用自己的Activity跳转到SDK的Activity,应用调用SDK的Activity即为这里的调用者activity。
scope 应用需要获得哪些API的权限,由“,”分隔。

例如:SCOPE = “get_user_info,add_t”;

listener 回调API,IUiListener实例。

1.7 发送请求

特别声明:该接口目前仅支持白名单应用。出于信息安全的考虑,本接口目前升级中。升级完成前暂不接受开发者的授权申请。升级完成后,所有接入QQ登录的开发者将均可调用。 已接入过该接口的开发者,不需要更改调用的接口,将自动兼容。

通过调用Tencent类的ask函数发起请求。

调用发送请求API的示例代码如下:

 private void onClickAsk() {
	if (mTencent.isSessionValid() && mTencent.getOpenId() != null) {
		Bundle b = new Bundle();
		b.putString(Constants.PARAM_RECEIVER, "15762FF138EE42D88FE2234D3B89C44B");
		b.putString(Constants.PARAM_TITLE, "title字段测试");
		b.putString(Constants.PARAM_SEND_MSG, "msg字段测试");
		b.putString(Constants.PARAM_IMG_URL, "http://i.gtimg.cn/qzonestyle/act/qzone_app_img/app888_888_75.png");
		b.putString("exclude", "");
		b.putString("specified", "");
		b.putString("only", "0"); // 0或者1
		b.putString(Constants.PARAM_SOURCE, URLEncoder.encode(""));
		mTencent.ask(this, b, new BaseUiListener());
	}
}


调用发送请求API参数说明如下:

参数 是否必传 类型 参数说明
Constants.PARAM_RECEIVER 必传 String 若receiver包含OpenID,则表示使用模式一(应用指定接收者模式),授权使用应用内关系链的应用才可使用模式一。

(1)传入的OpenID必须为应用内关系链,即为已安装该应用的QQ好友;
(2)传入个数不得超过10个,若超过10个则自动截取前10个,剩余舍弃。
若receiver为空,代表使用模式二(用户指定接收者模式)。

Constants.PARAM_TITLE 必传 String 免费礼物或请求名称(最多6个汉字)。
Constants.PARAM_SEND_MSG 必传 String 礼物或请求的默认赠言,由应用传入,当应用未传入时使用系统默认赠言。

长度限制:35个汉字以内,超过限制自动截断。

Constants.PARAM_IMG_URL 必传 String 请求或礼物配图的URL。如果不传,则默认在弹框中显示应用的icon。
exclude 可选 String 在用户自己指定好友的场景中,如果开发者不希望某些用户显示在好友选择器中,可传入这些用户的openid,多个openid之间用“,”分隔(“exclude”和“specified”一共最多可传入50个openid),好友选择器则不显示这些openid对应的用户。
specified 可选 String 在用户自己指定好友的场景中,如果开发者需要在好友选择器中显示指定的用户,可传入这些用户的openid,多个openid之间用“,”分隔(“exclude”和“specified”一共最多可传入50个openid),好友选择器会显示这些openid对应的用户。
only 可选 String 仅当设置了“specified”,需要传入该参数,用于标识是否在好友选择器中只显示“specified”指定的用户。默认值为“0”。

“0”:显示“specified”指定的用户,同时显示好友列表和已安装好友。
“1”:只显示“specified”指定的用户,无好友列表和已安装好友。此时必须保证“specified”有可用的openid传入,否则会报错。

Constants.PARAM_SOURCE 必传 String 由开发者自定义该参数内容,用于判断用户接收的哪个好友的礼物或请求。

例如:
用户A向C赠送礼物/发送好友请求时,source的值为“openid=001”,用户B向C赠送礼物/发送好友请求时,source的值为“openid=002”。当用户C点击链接进入免费礼物或好友请求的查看页面时,url中会携带app_custom参数,app_custom的值为“openid=001”,说明C响应的是A的请求,如果app_custom的值为“openid=002”,说明C响应的是B的请求。

1.11 分享消息到QQ(无需QQ登录)

分享消息到QQ的接口,可将新闻、图片、文字、应用等分享给QQ好友、群和讨论组。Tencent类的shareToQQ函数可直接调用,不用用户授权(使用手机QQ当前的登录态)。调用将打开分享的界面,用户选择好友、群或讨论组之后,点击确定即可完成分享,并进入与该好友进行对话的窗口。
本接口支持3种模式,每种模式的参数设置不同,下面分别进行介绍:
(1) 分享图文消息
调用分享接口的示例代码如下:

private void onClickShare() { 
    final Bundle params = new Bundle();
    params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT);
    params.putString(QQShare.SHARE_TO_QQ_TITLE, "要分享的标题");
    params.putString(QQShare.SHARE_TO_QQ_SUMMARY,  "要分享的摘要");
    params.putString(QQShare.SHARE_TO_QQ_TARGET_URL,  "http://www.qq.com/news/1.html");
    params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL,"http://imgcache.qq.com/qzone/space_item/pre/0/66768.gif");
    params.putString(QQShare.SHARE_TO_QQ_APP_NAME,  "测试应用222222");
    params.putInt(QQShare.SHARE_TO_QQ_EXT_INT,  "其他附加功能");		
    mTencent.shareToQQ(MainActivity.this, params, new BaseUiListener());
}


调用分享接口的params参数说明如下:

参数 是否必传 类型 参数说明
QQShare.SHARE_TO_QQ_KEY_TYPE 必填 Int 分享的类型。图文分享(普通分享)填Tencent.SHARE_TO_QQ_TYPE_DEFAULT
QQShare.PARAM_TARGET_URL 必填 String 这条分享消息被好友点击后的跳转URL。
QQShare.PARAM_TITLE 必填 String 分享的标题, 最长30个字符。
QQShare.PARAM_SUMMARY 可选 String 分享的消息摘要,最长40个字。
QQShare.SHARE_TO_QQ_IMAGE_URL 可选 String 分享图片的URL或者本地路径
QQShare.SHARE_TO_QQ_APP_NAME 可选 String 手Q客户端顶部,替换“返回”按钮文字,如果为空,用返回代替
QQShare.SHARE_TO_QQ_EXT_INT 可选 Int 分享额外选项,两种类型可选(默认是不隐藏分享到QZone按钮且不自动打开分享到QZone的对话框):

QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN,分享时自动打开分享到QZone的对话框。
QQShare.SHARE_TO_QQ_FLAG_QZONE_ITEM_HIDE,分享时隐藏分享到QZone按钮

(2) 分享纯图片
调用分享接口的示例代码如下:

private void onClickShare() {
    Bundle params = new Bundle();
    params.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL,imageUrl.getText().toString());
    params.putString(QQShare.SHARE_TO_QQ_APP_NAME, appName.getText().toString());
    params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_IMAGE);
    params.putInt(QQShare.SHARE_TO_QQ_EXT_INT, QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN);
    mTencent.shareToQQ(MainActivity.this, params, new BaseUiListener());
}
参数 是否必传 类型 参数说明
QQShare.SHARE_TO_QQ_KEY_TYPE 必选 Int 分享类型,分享纯图片时填写QQShare.SHARE_TO_QQ_TYPE_IMAGE。
QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL 必选 String 需要分享的本地图片路径。
QQShare.SHARE_TO_QQ_APP_NAME 可选 String 手Q客户端顶部,替换“返回”按钮文字,如果为空,用返回代替。
QQShare.SHARE_TO_QQ_EXT_INT 可选 Int 分享额外选项,两种类型可选(默认是不隐藏分享到QZone按钮且不自动打开分享到QZone的对话框):

QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN,分享时自动打开分享到QZone的对话框。
QQShare.SHARE_TO_QQ_FLAG_QZONE_ITEM_HIDE,分享时隐藏分享到QZone按钮。

(3) 分享音乐
音乐分享后,发送方和接收方在聊天窗口中点击消息气泡即可开始播放音乐。
调用分享接口的示例代码如下:

private void onClickAudioShare() {
    final Bundle params = new Bundle();
    params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_AUDIO);
    params.putString(QQShare.SHARE_TO_QQ_TITLE, "要分享的标题");
    params.putString(QQShare.SHARE_TO_QQ_SUMMARY,  "要分享的摘要");
    params.putString(QQShare.SHARE_TO_QQ_TARGET_URL,  "http://www.qq.com/news/1.html");
    params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, "http://imgcache.qq.com/qzone/space_item/pre/0/66768.gif");
    params.putString(QQShare.SHARE_TO_QQ_AUDIO_URL, "音乐链接");
    params.putString(QQShare.SHARE_TO_QQ_APP_NAME,  "测试应用222222");
    params.putInt(QQShare.SHARE_TO_QQ_EXT_INT,QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN);		
    mTencent.shareToQQ(MainActivity.this, params, new BaseUiListener());
}

调用分享接口的params参数说明如下:

参数 是否必传 类型 参数说明
QQShare.SHARE_TO_QQ_KEY_TYPE 必填 Int 分享的类型。分享音乐填Tencent.SHARE_TO_QQ_TYPE_AUDIO。
QQShare.PARAM_TARGET_URL 必选 String 这条分享消息被好友点击后的跳转URL。
QQShare.SHARE_TO_QQ_AUDIO_URL 必填 String 音乐文件的远程链接, 以URL的形式传入, 不支持本地音乐。
QQShare.PARAM_TITLE 必选 String 分享的标题, 最长30个字符。
QQShare.PARAM_SUMMARY 可选 String 分享的消息摘要,最长40个字符。
QQShare.SHARE_TO_QQ_IMAGE_URL 可选 String 分享图片的URL或者本地路径。
QQShare.SHARE_TO_QQ_APP_NAME 可选 String 手Q客户端顶部,替换“返回”按钮文字,如果为空,用返回代替。
QQShare.SHARE_TO_QQ_EXT_INT 可选 Int 分享额外选项,两种类型可选(默认是不隐藏分享到QZone按钮且不自动打开分享到QZone的对话框):

QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN,分享时自动打开分享到QZone的对话框。
QQShare.SHARE_TO_QQ_FLAG_QZONE_ITEM_HIDE,分享时隐藏分享到QZone按钮。

(4) 分享应用
应用分享后,发送方和接收方在聊天窗口中点击消息气泡即可进入应用的详情页。
调用分享接口的示例代码如下:

private void onClickAppShare() {
    final Bundle params = new Bundle();
    params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_APP);
    params.putString(QQShare.SHARE_TO_QQ_TITLE, "要分享的标题");
    params.putString(QQShare.SHARE_TO_QQ_SUMMARY,  "要分享的摘要");
    params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, "http://imgcache.qq.com/qzone/space_item/pre/0/66768.gif");
    params.putString(QQShare.SHARE_TO_QQ_APP_NAME,  "测试应用222222");
    mTencent.shareToQQ(MainActivity.this, params, new BaseUiListener());
}

调用分享接口的params参数说明如下:

参数 是否必传 类型 参数说明
QQShare.SHARE_TO_QQ_KEY_TYPE 必填 Int 分享的类型。分享音乐填Tencent.SHARE_TO_QQ_TYPE_PP。
QQShare.PARAM_TITLE 必选 String 分享的标题, 最长30个字符。
QQShare.PARAM_SUMMARY 可选 String 分享的消息摘要,最长40个字符。
QQShare.SHARE_TO_QQ_IMAGE_URL 可选 String 分享图片的URL或者本地路径。
QQShare.SHARE_TO_QQ_APP_NAME 可选 String 手Q客户端顶部,替换“返回”按钮文字,如果为空,用返回代替。
QQShare.SHARE_TO_QQ_EXT_INT 可选 Int 分享额外选项,两种类型可选(默认是不隐藏分享到QZone按钮且不自动打开分享到QZone的对话框):

QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN,分享时自动打开分享到QZone的对话框。
QQShare.SHARE_TO_QQ_FLAG_QZONE_ITEM_HIDE,分享时隐藏分享到QZone按钮。

(5) 分享携带轻应用消息
QQ轻应用简介:
轻应用为QQ打造了新一代消息体,相比当前使用的结构化消息具有明显的优势,包括:
全新的卡片展示形式:以支持展示更多有价值的信息。
支持可交互操作:信息卡片上可支持交互操作,大幅提升了用户操作的便捷性。
支持动态信息更新:卡片上承载的信息可实时更新状态,适用于服务状态实时变动的场景。
11.jpg
如何支持轻应用:
为了降低第三方业务信息以轻应用形式在QQ内展示,互联已更新了对应SDK,业务方只需要更新SDK版本,即可体验QQ轻应用
22.jpg
调用例子:
// todo Bundle携带图文信息后,再添加ARK信息。
String arkStr = arkInfoTxt.getText().toString();
params.putString(QQShare.SHARE_TO_QQ_ARK_INFO, arkStr);
注意:携带ARK信息的同时,需要携带原本的图文信息,ARK信息只是作为可选项,传递的JSON串为空或者不规范,分享的仍然为原本的图文信息。
轻应用消息JSON格式定义

字段名称 类型 描述 备注
app string 轻应用id 本分享消息将使用哪个应用进行打开,必须是当前互联id对应的轻应用。
view string 视图id 指定需要展示的轻应用具体视图名称,必须是本应用有效的视图id
meta object 数据对象 打开指定view时候传递的参数,view创建成功后,将通过对应view的lua脚本OnSetMetadata函数传递

例一:
{

   "app": "com.tencent.sample", 
"view": "sample",
"meta": {}

}
这条消息将用id为com.tencent.sample的应用的id为sample的view打开,不传递任何参数

例二:
{

   "app": "com.tencent.sample", 
"view": "sample",
"meta": {
"data": "value"
}

}
这条消息将用id为com.tencent.sample的应用的id为sample的view打开,运行时通过OnSetMetadata传递meta对象,脚本可以通过参数用"data"作key获得value为"value "的值。

轻应用安全注意事项:
1. meta对象中的数据默认仅允许传递整型数值
2. meta对象若需要携带其他字符串类型的字段(包括文本和URL)需要应用开发时候进行申请

轻应用规范:
轻应用分享仅支持页卡模式,不能随意调整卡片的尺寸。详情见轻应用接入设计规范。(rtx联系ruifanyuan)


1.12 分享到QQ空间(无需QQ登录)

完善了分享到QZone功能,分享类型参数Tencent.SHARE_TO_QQ_KEY_TYPE,目前只支持图文分享。Tencent. shareToQzone()函数可直接调用,不用用户授权(使用手机QQ当前的登录态)。调用后将打开手机QQ内QQ空间的界面,或者用浏览器打开QQ空间页面进行分享操作。
(1)图文分享

示例代码如下:

private void shareToQzone () {
  //分享类型
  params.putString(QzoneShare.SHARE_TO_QQ_KEY_TYPE,SHARE_TO_QZONE_TYPE_IMAGE_TEXT );
    params.putString(QzoneShare.SHARE_TO_QQ_TITLE, "标题");//必填
    params.putString(QzoneShare.SHARE_TO_QQ_SUMMARY, "摘要");//选填
    params.putString(QzoneShare.SHARE_TO_QQ_TARGET_URL, "跳转URL");//必填
    params.putStringArrayList(QzoneShare.SHARE_TO_QQ_IMAGE_URL, "图片链接ArrayList");
    mTencent.shareToQzone(activity, params, new BaseUiListener());
}

params参数说明如下:

参数 是否必传 类型 参数说明
QzoneShare.SHARE_TO_QQ_KEY_TYPE 选填 Int SHARE_TO_QZONE_TYPE_IMAGE_TEXT(图文)
QzoneShare.SHARE_TO_QQ_TITLE 必填 Int 分享的标题,最多200个字符。
QzoneShare.SHARE_TO_QQ_SUMMARY 选填 String 分享的摘要,最多600字符。
QzoneShare.SHARE_TO_QQ_TARGET_URL 必填 String 需要跳转的链接,URL字符串。
QzoneShare.SHARE_TO_QQ_IMAGE_URL 选填 String 分享的图片, 以ArrayList<String>的类型传入,以便支持多张图片(注:图片最多支持9张图片,多余的图片会被丢弃)。

注意:
QZone接口暂不支持发送多张图片的能力,若传入多张图片,则会自动选入第一张图片作为预览图。多图的能力将会在以后支持。

(2)发表说说、视频或上传图片
示例代码如下:

private void publishToQzone () {
//分享类型
    params.putString(QzoneShare.SHARE_TO_QZONE_KEY_TYPE, PUBLISH_TO_QZONE_TYPE_PUBLISHMOOD );
    params.putString(QzoneShare.SHARE_TO_QQ_SUMMARY, "摘要");
    params.putStringArrayList(QzoneShare.SHARE_TO_QQ_IMAGE_URL, "图片链接ArrayList");
    params.putString(QzonePublish.PUBLISH_TO_QZONE_VIDEO_PATH,"本地视频地址");
    Bundle extParams = new Bundle();
    extParams.putString (QzonePublish. HULIAN_EXTRA_SCENE, "分享场景”);
    extParams.putString (QzonePublish. HULIAN_CALL_BACK, "回调信息”);
    params.putBundle(QzonePublish.PUBLISH_TO_QZONE_EXTMAP, extParams);
    mTencent.publishToQzone(activity, params, new BaseUiListener());
}
}
参数 是否必传 类型 参数说明
PUBLISH_TO_QZONE_KEY_TYP 必填 Int QzonePublish.PUBLISH_TO_QZONE_TYPE_PUBLISHMOOD(发表说说、上传图片)

QzonePublish.PUBLISH_TO_QZONE_TYPE_PUBLISHVIDEO(发表视频)

PUBLISH_TO_QZONE_SUMMARY 选填 String 说说正文(传图和传视频接口会过滤第三方传过来的自带描述,目的为了鼓励用户自行输入有价值信息)
PUBLISH_TO_QZONE_IMAGE_URL 选填 ArrayList 说说的图片, 以ArrayList<String>的类型传入,以便支持多张图片(注:<=9张图片为发表说说,>9张为上传图片到相册),只支持本地图片
PUBLISH_TO_QZONE_VIDEO_PATH 选填 String 发表的视频,只支持本地地址,发表视频时必填;上传视频的大小最好控制在100M以内(因为QQ普通用户上传视频必须在100M以内,黄钻用户可上传1G以内视频,大于1G会直接报错。)
HULIAN_EXTRA_SCENE 选填 String 区分分享场景,用于异化feeds点击行为和小尾巴展示
HULIAN_CALL_BACK 选填 String 游戏自定义字段,点击分享消息回到游戏时回传给游戏

1.13 更改获取用户信息接口

调用获取用户信息接口的示例代码如下:

UserInfo info = new UserInfo(this, MainActivity.mQQAuth.getQQToken());
info.getUserInfo(new BaseUIListener(this,"get_simple_userinfo"));
}

1.14 发布带图微博

用于发送一个带有图片的微博。
示例代码如下:

 private void onClickUserInfo() {
        
 Bundle bundle = new Bundle();
        	bundle.putString("format", "json");
        	bundle.putString("content", "test add pic with url");
			 // 把 bitmap 转换为 byteArray , 用于发送请求
			Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
	        ByteArrayOutputStream baos = new ByteArrayOutputStream();
	        bitmap.compress(Bitmap.CompressFormat.JPEG, 40, baos);
	        byte[] buff = baos.toByteArray();
	        // Log.v(TAG, "length: " + buff.length);
			bundle.putByteArray("pic", buff);
			mTencent.requestAsync(Constants.GRAPH_ADD_PIC_T, bundle,
                  Constants.HTTP_POST, new BaseApiListener("add_pic_t", false), null);
			bitmap.recycle();

            mProgressDialog.show();
}


调用发布带图微博bundle参数说明请参阅http://wiki.connect.qq.com/add_pic_t

1.15 获取unionID信息接口

此接口用于获取用户个人信息。开发者可通过OpenID来获取用户基本信息。特别需要注意的是,如果 开发者拥有多个移动应用、网站应用,可通过获取用户的un ion d来区分用户的唯一性,因为只要是同 一个QQ互联平台帐号下的移动应用、网站应用,用户的union d是唯一的。换句话说,同一用户,对 同一个QQ互联平台下的不同应用,unionid是相同的。(Union d机制暂未对外开放,开发者只能通过 申请获得权限,后续会开放给所有开发者) 调用获取unionID信息接口的示例代码如下:

 UnionInfo unionInfo = new UnionInfo(this, mTencent.getQQToken());
unionInfo.getUnionId(listener);



1.28 Server-Side登录模式

通过调用Tencent类的loginServerSide函数发起Server-Side模式登录。
调用该接口,会启动一个交互界面,完成用户登录和授权的交互流程,通过回调得到server返回的code和openId。其中code的值保存在access_code字段里面。
当安装了手机QQ时,SDK会启用手机QQ的特定Activity,通过此Activity完成登录和授权功能。 当没有找到此Activity时,SDK会执行Oauth2.0的User-Agent流程,即显示一个包含WebView的对话框, 通过加载登录授权网页来完成登录和授权的交互流程。
调用Server-Side模式登录接口的示例代码如下:

private void doLogin() {
	IUiListener listener = new BaseUiListener() {
		@Override
		protected void doComplete(JSONObject values) {
			updateLoginButton();
		}
	};
	mTencent.loginServerSide(this, SCOPE, listener);
}


调用登录接口的参数说明如下:

参数 参数说明
activity 调用者activity。应用使用SDK时,会从应用自己的Activity跳转到SDK的Activity,应用调用SDK的Activity即为这里的调用者activity。
scope 应用需要获得哪些接口的权限,由“,”分隔。例如:

SCOPE = “get_simple_userinfo,add_topic”;所有权限用“all”

listener 回调接口,IUiListener实例。

注:在某些低端机上调用登录后,由于内存紧张导致APP被系统回收,登录成功后无法成功回传数据。
解决办法如下。 在调用login的Activity或者Fragment重写onActivityResult方法,示例代码如下:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
	if(requestCode == Constants.REQUEST_API) {
	    if(resultCode == Constants.RESULT_LOGIN) {
	        mTencent.handleLoginData(data, loginListener);
	        Log.d(TAG, "-->onActivityResult handle logindata");
	    }	
	}
	super.onActivityResult(requestCode, resultCode, data);
}

调用登录接口的参数说明如下:

参数 参数说明
activity 调用者activity。应用使用SDK时,会从应用自己的Activity跳转到SDK的Activity,应用调用SDK的Activity即为这里的调用者activity。
scope 应用需要获得哪些接口的权限,由“,”分隔。例如:

SCOPE = “get_simple_userinfo,add_topic”;所有权限用“all”

listener 回调接口,IUiListener实例。

注:在某些低端机上调用登录后,由于内存紧张导致APP被系统回收,登录成功后无法成功回传数据。
解决办法如下
在调用login的Activity或者Fragment重写onActivityResult方法,示例代码如下:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
	Tencent.onActivityResultData(requestCode,resultCode,data,loginListener);
	super.onActivityResult(requestCode, resultCode, data);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    If (requestCode == Constants.REQUEST_LOGIN) {
	    Tencent.onActivityResultData(requestCode,resultCode,data,loginListener);
    }
	super.onActivityResult(requestCode, resultCode, data);
}



2. OpenApi接口调用说明

2.1 调用说明

上面介绍的功能接口,都是需要SDK提供UI交互来完成后续操作,在SDK中,还有一些功能不需要SDK提供UI交互的OpenApi接口,如获取用户信息、获取用户相册列表、发送分享(addshare)、发表说说、上传图片、创建相册等,更多功能接口请查看《API列表》。
这些功能统一通过调用Tencent类的request或requestAsync方法来实现。request和requestAsync这两个接口的功能相同,区别是一个是同步调用,一个是异步调用。

 request(String graphPath, Bundle params, String httpMethod)		发送同步调用请求访问腾讯提供的OpenAPI。
requestAsync(String graphPath, Bundle params, String httpMethod, IRequestListener listener, Object state) 发送异步调用请求访问腾讯提供的OpenAPI。

参数说明如下:

参数 参数说明
graphPath 要调用的接口名称,通过SDK中的Constant类获取宏定义。
params 以K-V组合的字符串参数。Params是一个Bundle类型的参数,里面以键值对(Key-value)的形式存储数据,应用传入的邀请分享等参数就是通过这种方式传递给SDK,然后由SDK发送到后台。
httpMethod 使用的http方式,如SocialConstants.HTTP_GET,SocialConstants.HTTP_POST。
listener 回调接口,IUiListener实例。
state 状态对象,将在回调时原样传回给 listener,供应用识别异步调用。SDK内部不访问该对象。

其中的graphPath参数用于区别不同的功能接口。
详细的参数值与功能接口的对应,请参照下面的表格:

参数 参数说明
SocialConstants.GRAPH_SIMPLE_USER_INFO 获取用户信息,返回用户昵称、头像URL、是否黄钻用户、黄钻等级等。
SocialConstants.GRAPH_ADD_ALBUM 创建一个QQ空间相册。
SocialConstants.GRAPH_LIST_ALBUM 获取用户QQ空间相册列表,返回用户相册列表以及每个相册的详细信息。
SocialConstants.GRAPH_ADD_SHARE 发送分享,不支持@好友功能。
SocialConstants.GRAPH_ADD_TOPIC 发表一条说说到QQ空间。
SocialConstants.GRAPH_UPLOAD_PIC 上传一张照片到QQ空间相册。

2.2 调用示例

这里以发表说说接口的调用实例,来说明通过requestAsync调用兼容接口的方法:

 private void onClickAddTopic() {
	if (mTencent.isSessionValid() && mTencent.getOpenId() != null)  {
		Bundle params = new Bundle();
		params = new Bundle();
		params.putString("richtype", "2");// 发布心情时引用的信息的类型。1表示图片;2表示网页; 3表示视频。
		params.putString("richval",
				("http://www.qq.com" + "#" + System.currentTimeMillis()));// 发布心情时引用的信息的值。有richtype时必须有richval。
		params.putString("con", "腾讯QQ登录测试:心情不错!");// 发布的心情的内容。
		params.putString("lbs_nm", "广东省深圳市南山区高新科技园腾讯大厦");// 用户发布心情时的所在地。
		params.putString("lbs_x", "+90");// 经度。-180.0到+180.0,+表示东经。
		params.putString("lbs_y", "-60");// 纬度。纬度。-90.0到+90.0,+表示北纬。
		
		mTencent.requestAsync(SocialConstants.GRAPH_ADD_TOPIC, params,
					SocialConstants.HTTP_POST, new BaseApiListener(), null);
		mProgressDialog.show();
	}
}

在上面的调用中,传入了BaseApiListener的实例,此实例的示例代码在《Andriod_SDK使用说明》的“实现回调”一节中已说明。

3开发者作为内容提供者给手机QZone提供内容的接口

这是针对开发者作为数据提供的应用程序,如果要使用互联SDK来作为数据内容的提供者,比如提供图片或者视频,需要按以下步骤来实现:
1. 需要一个Activity来接受QQ应用的调用,对这个Activity,对应的AndroidManifest.xml的配置如下:

<activity android:name="com.sample.DataProviderActivity">
   <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT"/>
      <data android:scheme="tencent222222.data" />
   </intent-filter>
</activity>


这里scheme的格式是"tencent" + appid + ".data"。
2. 在DataProviderActivity的onCreate函数里,必须添加如下代码:

public class DataProviderActivity extends Activity {
    private CallbackManager mCalledManager;
    ...
    protected void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);
       	mCalledManager = new CallbackManager(this); //构建CallbackManager对象 
       ...
    }
...


3.如果要将生成的图片,视频内容发回到QQ的应用里,按照下方的代码来实现:

public void onClick(View v) {
	switch (v.getId()) {
	case R.id.sendimagepathbth: //发送文本和图片路径
		int errorCode = mCalledManager.sendTextAndImagePath ("图片说明文本", 
             "/sdcard/DCIM/Camera/101020.jpg");
        If (errorCode == 0) {
            finish();
        } else {
            ...
        }
     	break;
		case R.id.sendvideopathbtn:
			int errorCode = mCalledManager.sendTextAndVideoPath("视频说明文本", 
                  "/sdcard/DCIM/Camera/101021.mp4");
            If (errorCode == 0) {
               finish();
            } else {
               ...
            }
			break;
		case R.id.sendtextonlybtn:
			int errorCode = mCalledManager.sendTextOnly("文本内容");
            If (errorCode == 0) {
               finish();
            } else {
               ...
            }
			break;
    }


这里支持3种内容格式:1是文本和图片路径;2是文本和视频路径;3是纯文本。
路径支持本地路径和url地址,本地路径必须是在sd卡上的路径。
对应的错误代码有以下值:

public final class ErrorCode {
	public static final int Success = 0;
	public static final int NotSupportThisDataType = -1;
	public static final int NotFromTencentApp = -2;
	public static final int NotFoundReturnActivity = -3;
	public static final int NotFoundTargetApp = -4;
	public static final int FileNotInSdCard = -5;
	public static final int FileSizeTooLarge = -6;
	public static final int PathIsNull = -7;
	public static final int FileNotExist = -8;
	public static final int FileIsEmpty = -9;
	public static final int SdCardNotExist = -10;
}


4. 第三方应用可以检查QQ调用方请求的数据类型。

mCalledManager.isSupportType(DataType.TEXT_AND_IMAGE_PATH)


如果返回true则表示支持,否则不支持。这里DataType的定义如下:

public final class DataType {
		public static final int TEXT_AND_IMAGE_PATH = 0x1; //文本和图片路径
		public static final int TEXT_AND_VIDEO_PATH = 0x2; //文本和视频路径
		public static final int TEXT_ONLY	= 0x4;			//纯文本
}


5. 在调用下面这三个方法后,如果返回值是0, 建议finish掉Activity。
mCalledManager.sendTextAndImagePath(...)
mCalledManager.sendTextAndVideoPath(...)
mCalledManager.sendTextOnly(...)


4. 返回码说明

使用SDK时,所有结果都会通过回调返回给应用。在回调的结果中,会包含每次调用结果的返回码。正常情况下返回码为0,表示调用成功。如果返回码不为0,说明调用出错,需要根据返回码的值来定位错误原因。


5. 登录常见错误码信息

110201:未登陆
110405:登录请求被限制
110404:请求参数缺少appid
110401:请求的应用不存在
110407:应用已经下架
110406:应用没有通过审核
100044:未经过安全校验的包名和签名button_21.png
110500:获取用户授权信息失败
110501:获取应用的授权信息失败
110502:设置用户授权失败
110503:获取token失败
110504:系统内部错误

以上信息是否解决您的问题?

Copyright © 1998 - 2018 Tencent. All Rights Reserved.

腾讯公司 版权所有

有问必答 返回顶部