注意:以下文档只适用于TOP接口,请谨慎使用!

消息订阅服务

为了满足更加个性化的IM接入需求,我们提供了服务端接收/ 发送消息

场景示例-数据迁移

目前提供了针对离线账号(未登录IM)的IM消息订阅接收。
接收消息有两种方式:
1、长连接接收
2、TOP API主动拉取
 
推荐开发者使用长链接方式获取消息,实时性更高

前置条件

使用IM 客户端接口或者服务端接口发送消息,并且有账号处于未登录状态。

IM相关的消息

taobao_openim_OffMsgPush
未登录的离线账号的IM消息 

使用说明

消息服务使用完整介绍: //open.taobao.com/doc/detail.htm?id=101663

 

订阅消息

开放平台应用管理后台如下页面订阅消息:

 

 

点击消息名称,就能查看具体的返回信息字段

 

 

代码实现接收消息

1、为用户开通消息服务

百川无线应用类型可以不需要此步骤;
2、接收消息,实现方式有两种: 通过SDK接收消息通过API接收消息

通过SDK接收消息

目前支持JAVA语言,其它语言建议采用API接收消息。通过SDK接收消息只需要关注业务的处理,不需要操心消息重发、确认、长连接的重连等操作,SDK会自动处理好一切。
Java接口说明
public interface MessageHandler {
/**
*消息服务客户端收到消息后,会回调该方法处理具体的业务,处理结果可以通过以下两种方式来表述:
<li>抛出异常或设置status.fail()表明消息处理失败,需要消息服务端重发
<li>不抛出异常,也没有设置status信息,则表明消息处理成功,消息服务端不会再投递此消息
@param message消息内容
@param status处理结果,如果调用status.fail(),消息服务将会择机重发消息;否则,消息服务认为消息处理成功
@throws Exception消息处理失败,消息服务将会择机重发消息
*/
public void onMessage(Messagemessage,MessageStatusstatus)throws Exception;
} 
Java示例代码:
	TmcClient client=new TmcClient("app_key","app_secret","default");
		client.setMessageHandler(new MessageHandler(){
		public void onMessage(Message message,MessageStatus status){
		try{
		System.out.println(message.getContent());
		System.out.println(message.getTopic());
		//默认不抛出异常则认为消息处理成功
		}catch(Exceptione){
		e.printStackTrace();
		status.fail();//消息处理失败回滚,服务端需要重发
		}
		}
		});
		client.connect();
注:采用Java main方法在Eclipse里面运行上面的代码测试时,请在client.connect()后面加上Thread.sleep让main线程等待一段时间结束,以便观察消息的实时接收情况,否则main线程结束后,TMC长连接也会跟着断开。如果是在web服务器上运行上面的代码,则不用在client.connect()后面加任何Thread.sleep代码,也不需要在外面包一层while(true)循环,因为web服务器上的主线程只要服务器不关闭都是不会结束的,TMC的长连接会一直保持。

通过API接收消息

提供API接收消息的目的是那种对多线程和长连接处理不方便的语言使用的,比如PHP、Pyton,这些语言官方暂时没有提供SDK,可以通过下面两个API配合使用也能达到准实时接收和确认消息的目的。
首先:消费消息
API入参:
说明:消息消费后,指针自动后移,下次调用自动获取到未消费过的消息,但是消费确认后的消息无法再次获取。
然后:确认消息
API入参:
说明:获取消息后,如果不确认,消息服务会选择时机重发,重发次数由消息服务控制,如果消息7天内都没有被确认将会被删除。
Java API方式代码:
	TaobaoClient client=new DefaultTaobaoClient("http://gw.api.taobao.com/router/rest","app_key","app_secret","json");
		do{
		longquantity=100L;
		TmcMessagesConsumeResponse rsp=null;
		do{
		TmcMessagesConsumeRequest req=new TmcMessagesConsumeRequest();
		req.setQuantity(quantity);
		req.setGroupName("default");
		rsp=client.execute(req);
		if(rsp.isSuccess()&&rsp.getMessages()!=null){
		for(TmcMessagemsg:rsp.getMessages()){
		//handlemessage 
		System.out.println(msg.getContent());
		System.out.println(msg.getTopic()); 
		//confirmmessage
		TmcMessagesConfirmRequest cReq=newTmcMessagesConfirmRequest();
		cReq.setGroupName("default");
		cReq.setsMessageIds(String.valueOf(msg.getId()));
		TmcMessagesConfirmResponse cRsp=client.execute(cReq);
		System.out.println(cRsp.getBody());
		}
		} 
		System.out.println(rsp.getBody()); 
		}while(rsp!=null&&rsp.isSuccess()&&rsp.getMessages()!=null&&rsp.getMessages().size()==quantity);
		Thread.sleep(3000L);
		}while(true); 
更多请查看消息服务完整介绍: //open.taobao.com/doc/detail.htm?id=101663

PHP API方式

	<?

	include("tmcmessagesconsumerequest.php");

	include("topclient.php");

	include("TmcMessagesConfirmRequest.php");

	//实例化TopClient类

	$c=new TopClient;

	$c->appkey="21749834";

	$c->secretKey="83d21fd8f1ba9f150c774a568deef058";

	$c->gatewayUrl="http://gw.api.taobao.com/router/rest";

	$c->format="json";

	//实例化具体API对应的Request类

	$req=new TmcMessagesConsumeRequest;

	$req->setQuantity(10);

	$resp=$c->execute($req);

	print_r($resp);

	for($i=0;$i<count($resp->messages->tmc_message);$i++)

	{

	$messages_ids.=$resp->messages->tmc_message[$i]->id.",";

	}

	$messages_ids=substr($messages_ids,0,strlen($messages_ids)-1);

	/*

	*dosomething

	*

	**/

	echo$messages_ids;

	//确认消息

	$req2=new TmcMessagesConfirmRequest;

	$req2->setSMessageIds($messages_ids);

	$resp2=$c->execute($req2);

	?>

返回数据实例

文本消息:
{"content":"文本啊啊啊","to_id":"it3d3hxlxiaomishu","nickname":"it3d3hxltest0","from_id":"it3d3hxltest0","gmt_send":"1444297001","msg_id":"6269105334747922432"}
表情消息:
{"content":"/:^_^/:^$^/:Q/:815/:809","to_id":"it3d3hxlxiaomishu","nickname":"it3d3hxltest0","from_id":"it3d3hxltest0","gmt_send":"1444297009","msg_id":"6269105334748446721"}
图片消息:
{"content":"http://interface.im.taobao.com/mobileimweb/fileupload/downloadPriFile.do?type\u003d1\u0026fileId\u003d23e68ee552050865afcad1aca4cb508d.jpg\u0026suffix\u003djpg\u0026width\u003d1560\u0026height\u003d2104\u0026mediaSize\u003d259544","to_id":"it3d3hxlxiaomishu","nickname":"it3d3hxltest0","from_id":"it3d3hxltest0","gmt_send":"1444297028","msg_id":"6269105334749495298"}
语音消息:
{"content":"http://interface.im.taobao.com/mobileimweb/fileupload/downloadPriFile.do?type\u003d2\u0026fileId\u003d6a4bf52b5b640003ab22998290ed26d6.amr\u0026suffix\u003damr\u0026mediaSize\u003d3398\u0026duration\u003d2","to_id":"it3d3hxlxiaomishu","nickname":"it3d3hxltest0","from_id":"it3d3hxltest0","gmt_send":"1444297033","msg_id":"6269105334750019587"}
注意:返回的数据是json格式,其中content内容中的&、?、=等符号进行了编码,需要用json进行解码。
 

 

FAQ

关于此文档暂时还没有FAQ
返回
顶部