消息扩展上的 UUID 发生了奇怪的事情

Strange Thing Going on with UUID on messages extension

我正在创建这个作为游戏的消息扩展程序。

当我在 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

什么?我的UUID和之前一样,而我的对手UUID完全不一样??通过在消息上切换用户,我期望看到条目被还原。怎么可能?错误?

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

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

From the docs:

This UUID is scoped to this device. It remains stable as long as the extension is enabled. If the extension is disabled and reenabled, or if the containing app is removed and reinstalled, the UUID for the local participant changes.

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

值得补充的是 several open radars for Messages identifiers, not least this one,所以你可能是对的,这是一个错误。