切换到自定义生成的设备UUID正变成一场真正的噩梦!我希望有人之前遇到过这种情况,并且可能知道处理它的方法。
假设用户的应用程序的数据集为500,000(小),那么简单地复制设备的整个数据库并合并它们是不可行的。用户将此应用程序安装在:
上当连接到同一物理网络时,每个设备可以看到对方并可以启动同步。 实现三路数据同步(不依赖于中央服务器或互联网连接)。
如果用户备份他们的iphone或ipad,并将其恢复到另一个iphone或ipad上,问题就出现了。在这种情况下,我们最终得到的用户在本地网络上有两个具有相同UUID的设备。更新最终(随机)转到一个或其他相同标识的设备。
我知道我们现在可以继续使用设备唯一标识符了,但我担心一旦它消失就会发生!
答案 0 :(得分:2)
在应用程序启动时,您将在名为udid.txt的应用程序文档文件夹中搜索文件。如果此文件不可用,请创建它并生成自定义UDID,并将其保存到此文件中。使用以下函数向此文件添加标志,以将其从备份和同步例程中排除。
#include <sys/xattr.h>
- (void) AddSkipBackupAttributeToFile: (NSURL*) url
{
u_int8_t b = 1;
setxattr([[url path] fileSystemRepresentation], "com.apple.MobileBackup", &b, 1, 0, 0);
}
此解决方案的问题是用户可能使用iPhoneExplorer或类似的东西来更改UDID。尝试加密或隐藏文件以防止他这样做。
注意:仅适用于iOS 5.0.1。
答案 1 :(得分:2)
您可以将生成的设备UDID存储在Caches目录中的文件中,在该文件中不会备份它。将备份还原到新设备时,将存在数据库,但不会有UDID文件。在这种情况下,创建一个新的UDID;其他实例会将此视为一个新实例,并可以推送最近的任何更改。您可能希望更改逻辑,以便其他实例将查询新UDID上的时间戳,而不是假设新实例完全为空。
在iOS 5.0之前,系统不会自动删除您的UDID文件。但是在iOS 5.0中,您需要忍受在低磁盘空间情况下可能会被清除的事实。如果发生这种情况,只需按照恢复到新设备时的相同步骤操作:创建新的UDID;其他实例会将此视为一个新实例并推送最近的更改。
正如Floix所说,iOS 5.0.1中有一种新机制(尚未发布),它允许您指定该文件既不应备份也不应该被清除。