1

我正在创建这个消息扩展,它是一个游戏。

当我收到关于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 和以前一样,而我的对手UUID 完全不同??通过在消息上切换用户,我希望看到条目被还原。怎么可能?漏洞?

4

1 回答 1

2

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

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

从文档

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

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

值得补充的是,消息标识符有几个开放的雷达,尤其是这个,所以你可能是对的,它是一个错误。

于 2016-09-01T18:31:28.113 回答