下面的接口由極光SDK提供:
/*!
* @abstract 同步分頁獲取最新的消息
*
* @param offset 開始的位置。nil 表示從最初開始。
* @param limit 獲取的數(shù)量。nil 表示不限。
*
* @return 返回消息列表(數(shù)組)。數(shù)組成員的類型是 JMSGMessage*
*
* @discussion 排序規(guī)則是:最新
*
* 參數(shù)舉例:
*
* - offset = nil, limit = nil,表示獲取全部。相當(dāng)于 allMessages。
* - offset = nil, limit = 100,表示從最新開始取 100 條記錄。
* - offset = 100, limit = nil,表示從最新第 100 條開始,獲取余下所有記錄。
*/
- (NSArray JMSG_GENERIC(__kindof JMSGMessage *) *)messageArrayFromNewestWithOffset:(NSNumber *JMSG_NULLABLE)offset
limit:(NSNumber *JMSG_NULLABLE)limit;

在項(xiàng)目中進(jìn)行調(diào)用時(shí)的截圖
以下內(nèi)容為上面截圖中,messaegArray中保存的內(nèi)容,注意:消息發(fā)生了重復(fù)的情況;
<__NSArrayM 0x13f4748d0>(
<JMSGMessage, 0x13e9c1aa0> - [ARRAY - msgId:msgId_1473509068255972, serverMessageId:116387500, otherSide:69117813, isReceived:1, contentType:文本消息, status:消息接收成功, messageJson:{"version":1,"target_type":"group","target_id":"10183381","target_name":"人脈通廣州交流群","from_type":"user","from_id":"69117813","from_name":"梁錦錕","from_platform":"i","create_time":1473506849708,"msg_type":"text","msg_body":{"text":"多,只是都潛水去了"},"from_appkey":"ce6e8aee881ae9689975e3b8"}, content:{
"text" : "多,只是都潛水去了"
}, fromAppKey:ce6e8aee881ae9689975e3b8, targetAppKey:<null>],
<JMSGMessage, 0x13f1b20f0> - [ARRAY - msgId:msgId_1473509082984970, serverMessageId:116387500, otherSide:69117813, isReceived:1, contentType:文本消息, status:消息接收成功, messageJson:{"version":1,"target_type":"group","target_id":"10183381","target_name":"人脈通廣州交流群","from_type":"user","from_id":"69117813","from_name":"梁錦錕","from_platform":"i","create_time":1473506849708,"msg_type":"text","msg_body":{"text":"多,只是都潛水去了"},"from_appkey":"ce6e8aee881ae9689975e3b8"}, content:{
"text" : "多,只是都潛水去了"
}, fromAppKey:ce6e8aee881ae9689975e3b8, targetAppKey:<null>],
<JMSGMessage, 0x13ebe32e0> - [ARRAY - msgId:msgId_1473509045563820, serverMessageId:116261981, otherSide:60018153, isReceived:1, contentType:文本消息, status:消息接收成功, messageJson:{"version":1,"target_type":"group","target_id":"10183381","target_name":"人脈通廣州交流群","from_type":"user","from_id":"60018153","from_name":"吳生生","from_platform":"i","create_time":1473496050433,"msg_type":"text","msg_body":{"text":"好象人不多"},"from_appkey":"ce6e8aee881ae9689975e3b8"}, content:{
"text" : "好象人不多"
}, fromAppKey:ce6e8aee881ae9689975e3b8, targetAppKey:<null>],
<JMSGMessage, 0x13f437fb0> - [ARRAY - msgId:msgId_1473509060277678, serverMessageId:116261981, otherSide:60018153, isReceived:1, contentType:文本消息, status:消息接收成功, messageJson:{"version":1,"target_type":"group","target_id":"10183381","target_name":"人脈通廣州交流群","from_type":"user","from_id":"60018153","from_name":"吳生生","from_platform":"i","create_time":1473496050433,"msg_type":"text","msg_body":{"text":"好象人不多"},"from_appkey":"ce6e8aee881ae9689975e3b8"}, content:{
"text" : "好象人不多"
}, fromAppKey:ce6e8aee881ae9689975e3b8, targetAppKey:<null>],
<JMSGMessage, 0x13f492db0> - [ARRAY - msgId:msgId_1473509082140174, serverMessageId:116260688, otherSide:60018153, isReceived:1, contentType:文本消息, status:消息接收成功, messageJson:{"version":1,"target_type":"group","target_id":"10183381","target_name":"人脈通廣州交流群","from_type":"user","from_id":"60018153","from_name":"吳生生","from_platform":"i","create_time":1473496021410,"msg_type":"text","msg_body":{"text":"在"},"from_appkey":"ce6e8aee881ae9689975e3b8"}, content:{
"text" : "在"
}, fromAppKey:ce6e8aee881ae9689975e3b8, targetAppKey:<null>],
<JMSGMessage, 0x13f27c8e0> - [ARRAY - msgId:msgId_1473479835203404, serverMessageId:115923727, otherSide:67437495, isReceived:1, contentType:文本消息, status:消息接收成功, messageJson:{"version":1,"target_type":"group","target_id":"10183381","target_name":"人脈通廣州交流群","from_type":"user","from_id":"67437495","from_name":"羅文統(tǒng)","from_platform":"i","create_time":1473464578486,"msg_type":"text","msg_body":{"text":"有人在嗎"},"from_appkey":"ce6e8aee881ae9689975e3b8"}, content:{
"text" : "有人在嗎"
}, fromAppKey:ce6e8aee881ae9689975e3b8, targetAppKey:<null>]
)
問題分析:
這個(gè)問題很難重現(xiàn),有時(shí)候重現(xiàn)時(shí),重復(fù)現(xiàn)象非常嚴(yán)重。
根據(jù)本次重現(xiàn)并捕獲的結(jié)果來看,雖然消息內(nèi)容重復(fù),但是確實(shí)是兩個(gè)不同的JMSGMessage對(duì)象實(shí)例,0x13e9c1aa0,0x13f1b20f0; 再仔細(xì)看,會(huì)發(fā)現(xiàn)這兩個(gè)實(shí)例雖然不同、msgId不同,但是serverMessageId 是相同的,因此可以認(rèn)定,這兩條為同一條消息;
再看一個(gè)例子:
下面的例子中,serverMessageId為 <null>,這類消息的contentType為:事件通知消息,如果沒有serverMessageId的話,在項(xiàng)目APP中,就無法做消息去重操作時(shí)的唯一性判斷了。
<JMSGMessage, 0x1564ac320> - [ARRAY - msgId:msgId_1473509120198886, serverMessageId:<null>, otherSide:10206763, isReceived:0, contentType:事件通知消息, status:消息接收成功, messageJson:{"version":1,"target_type":"group","target_id":"10206763","target_name":"微商直銷交流十群","from_type":"user","from_id":"57717435","from_name":"張先生","from_platform":"i","create_time":1473509120000,"msg_type":"event_notification","msg_body":{"toUidList":["17316843"],"eventType":10,"fromUid":0,"cTime":1473508977,"eventDesc":"eventID->62576905,fromUid->0,type->10,eventDescription->(null),gid->10206763,rid->62576905","eventId":62576905,"gid":"10206763"},"from_appkey":null}, content:{
"toUidList" : [
"17316843"
],
"eventType" : 10,
"fromUid" : 0,
"cTime" : 1473508977,
"eventDesc" : "eventID->62576905,fromUid->0,type->10,eventDescription->(null),gid->10206763,rid->62576905",
"eventId" : 62576905,
"gid" : "10206763"
}, fromAppKey:<null>, targetAppKey:<null>],
<JMSGMessage, 0x1564ac9a0> - [ARRAY - msgId:msgId_1473509119631641, serverMessageId:<null>, otherSide:10206763, isReceived:0, contentType:事件通知消息, status:消息接收成功, messageJson:{"version":1,"target_type":"group","target_id":"10206763","target_name":"微商直銷交流十群","from_type":"user","from_id":"57717435","from_name":"張先生","from_platform":"i","create_time":1473509119000,"msg_type":"event_notification","msg_body":{"toUidList":["17107554"],"eventType":10,"fromUid":0,"cTime":1473508953,"eventDesc":"eventID->62576493,fromUid->0,type->10,eventDescription->(null),gid->10206763,rid->62576493","eventId":62576493,"gid":"10206763"},"from_appkey":null}, content:{
"toUidList" : [
"17107554"
],
"eventType" : 10,
"fromUid" : 0,
"cTime" : 1473508953,
"eventDesc" : "eventID->62576493,fromUid->0,type->10,eventDescription->(null),gid->10206763,rid->62576493",
"eventId" : 62576493,
"gid" : "10206763"
}, fromAppKey:<null>, targetAppKey:<null>]