奇怪的事情继续消息传递

时间:2016-09-01 11:48:15

标签: ios ios10 ios-messages-extension msmessage

我正在创建这个游戏的消息扩展。

当我在didBecomeActiveWithConversation收到对话时,我抓住了我的UUID和对手的UUID,例如:

myUUID = [conversation.localParticipantIdentifier UUIDString];
opponentUUID = [[conversation.remoteParticipantIdentifiers firstObject] UUIDString];

此时如果我打印出来,我会得到类似

的内容
myUUID = 3A00236E-606E-41BE-BD11-97658AF13434
opponentUUID = 794DC7EB-E0AF-46CD-9BF0-5B6D39CC6773

然后我在游戏中移动并发送给对手。

在模拟器上,我从“Kate”切换到“John Appleseed”。

当方法didBecomeActiveWithConversation再次触发时,现在对于其他用户,我再次抓取两个UUID。这是结果:

myUUID = 3A00236E-606E-41BE-BD11-97658AF13434
opponentUUID = B4621E05-4407-443E-9526-C8F0C82753D6

什么? myUUID和以前一样,我的opponentUUID完全不同?通过切换用户的消息,我希望看到条目还原。怎么可能?错误?

1 个答案:

答案 0 :(得分:2)

Apple并不喜欢发布可用于识别超出严格要求的用户的号码。在这种情况下,localParticipantIdentifier属性对于每个设备都是唯一的(因此人A在与他们交谈的每个设备上具有不同的标识符)和每个应用程序安装(因此两个不同的应用程序将看到两个不同的标识符)。

事实上,如果用户删除并重新安装了您的扩展程序,则标识符将会更改 - 就像identifierForVendor上的UIDevice一样。

From the docs

  

此UUID的范围限定为此设备。只要启用了扩展,它就会保持稳定。如果已禁用并重新启用扩展,或者删除并重新安装了包含应用程序,则本地参与者的UUID会更改。

这个特殊情况因为您使用模拟器而变得复杂,模拟器被Apple操纵看起来像两个帐户,即使它是一个设备。我怀疑当你在两个真实设备上运行相同的代码时,你会在两边找到两个完全不同的数字。

值得补充的是,消息标识符有several open radars个,而不是this one,所以你可能是错的。