在iMessage中唯一标识MSConversation

时间:2016-09-19 22:14:39

标签: ios imessage

在开发iMessages应用程序时唯一标识MSConversation的最佳方法是什么?

在我的情况下,我想给游戏对象一个它所属的对话的ID。

2 个答案:

答案 0 :(得分:1)

获取localParticipant ID,将remoteParticipants ID添加到其中;) 这样的事情:

var conversationID = yourConversation.localParticipantIdentifier

for participant in yourConversation.remoteParticipantIdentifiers {
   conversationID += participant
}

编辑: 正如评论中所注意到的,通过这样做,你可能会得到一个很长的ID。因此,我们的想法是对其应用散列,使其具有恒定的大小(MD5足够,我们在这里不需要安全的东西)。如果它仍然太长,您可以裁剪该哈希值,但要注意,在这种情况下,两个会话具有相同ID的可能性很小(取决于您的裁剪量)。

答案 1 :(得分:0)

current top answer存在损坏问题,如果将新人添加到群组聊天中(或者如果有人被删除),您的哈希 ID 将会发生变化。

我认为更优雅的解决方案是在创建第一条消息时创建自己的序列号,并将其作为元数据添加到消息本身。 (当然使用NSURLComponents)。然后只要在打开一条消息时抓住它(从而启动你的消息应用程序)并使用该ID。只需将其保留在发送/接收的任何消息的标题中即可。

但是,这取决于你想要做的事情。我提供的解决方案非常适合基于回合制的多人游戏。对其他场景可能不太好。