跨设备的iOS唯一用户标识符

6

感谢您抽出时间和兴趣阅读这篇文章,希望您能帮我解决问题。

我需要一个iOS的唯一用户标识符。我的意思是一个独特的字符串,苹果提供的,对于用户而言是唯一的,而不是设备,也就是说它将在多个设备上保持不变。我想过苹果ID或类似的东西,但这是不可能的,因为苹果没有提供它(至少我不知道),但我想要类似的东西。

它不能是UDID,因为(除了被弃用)它不能跨设备保持持久性。我想要这样做是为了验证用户,而不需要用户登录或注册。这是可能的,因为有些应用程序可以这样做。我没有使用另一台设备登录或任何操作,但它仍认证了我。我曾以为它是由苹果ID实现的,但这是不可能的。

我查看了此答案:iOS unique user identifier。看起来这可能是解决方案,但我不太明白,因为我不知道如何使其对每个新用户都是唯一的(能够区分多个用户以及在不同设备上的相同用户)。

我真的很感激大家阅读并尝试帮助。

附注:

谢谢您如此快速地回答!我已经读了很多遍,但我就是不明白。你们能帮我更好地理解一下吗?

我的理解是这样的:

1. 创建一个UUID(每次安装都会更改)。 2. 使用默认服务(我认为应该将其与应用程序ID-com.bla.bla-关联),以及默认帐户"users"将其存储到Keychain中(据我所知,保存在Keychain上的值是本地的)。这将是本地的,因此每个安装都将执行此操作,并为每个安装使用不同的UUID(不一定是每个用户)。 3. 将UUID保存到NSUserDefaults中。 4. 将UUID保存到云公共数据存储中(云数据存储中的UUID、Keychain和NSUserDefaults应该是相同的)。

因此,如果运行了5个安装,则Cloud的公共数据存储应如下所示:

An Array of 5 values:
[
XXXX-EEEEE-FFFFF,
SFSDFFWE-WERW-SDFS,
XXXX-XXXXX-XXXXX,
ZZZZZ-ZZZZ-ZZZZX,
XZXZZX-ZXZXZXS-ADADS
]

5.-每次运行应用程序时,都会执行所有这些操作,首先检查公共云存储中是否有存储的值。这里我感到困惑的是,不同设备如何知道哪个UUID是你的?我的意思是,有5个不同的UUID可以选择。也许不应该将其保存在公共数据存储中,而应该保存在私人数据存储中,但为此,您还需要识别每个用户。这就是我感到困惑的地方。

如果未设置UUID,则执行最后4个步骤。

所以,我对第5步感到困惑,大多数人理解这个解决方案,无需任何更多的解释,所以我必须无知于某些东西的工作方式,可能是云服务吗?我认为问题可能是我不理解iCloud的工作原理以及它如何存储其值。我只是不明白第X个运行该应用程序的第5(随机数字,它可能是第2或第2000个)设备将如何知道UUID XXX...是用户X的UUID,而不是用户Z的UUID。

再次感谢您快速回答,我以为可能要等几天,而不是几分钟。请原谅我的无知,我在这方面有点新手,但我想学习。已经困扰了我几天这个问题。

2个回答

2

你所提到的答案是正确识别用户的方法。解决方案是保存该标识称为UUID(唯一用户ID)的值 - 而不是UDID(唯一设备ID)。

当然,作为开发人员,唯一的缺点是用户可能会删除并重新安装应用程序,从而拥有不同的ID。


2
正如丹尼尔所说,UUID 是正确的识别用户的方式。我想补充一下:你说过:
“我不知道它怎么能对每个新用户都是唯一的。”
根据维基百科的这篇文章:
随机生成的 UUID 有 122 位随机比特……即使每秒钟生成 10 亿个 UUID,接下来的 100 年,创建一个重复的概率也只有约 50%。如果地球上的每个人都拥有 6 亿个 UUID,则出现一个重复的概率大约为 50%。
因此,您可以相当确定 UUID 将对每个用户都是唯一的。
此外,MAC 地址基于您的以太网卡的 MAC 地址、时间戳和其他一些杂项信息。这增加了 UUID 的唯一性,如 Superuser 上的 this 问题所述。
MAC地址通常是独一无二的。前3个八位组定义制造商,后3个八位组通常在PROM烧录时生成,制造商可以自行决定如何生成。这意味着每个制造商有16777215个可能的独特MAC地址,数量相当大,因此制造商不应重复使用其中一个。基本上,UUID为MAC地址增加了额外的独特性。总之,对于您的目的,UUID将是完美的选择。希望这能帮到您!

@Sismetic - 没问题。我们都是这样开始的。 - pasawaya
谢谢您的理解 :) 我喜欢 Stack Overflow :P。您能帮我更好地理解这个过程吗? - Sismetic
@Sismetic - 在你的笔记中,当你在第4步中说“运行了5个安装”,你是指在不同的设备上吗?另外,当你说“云”时,是指iCloud还是你设置的某个服务器?谢谢。 - pasawaya
抱歉回复晚了,我得做些家务。是的,使用不同的设备和用户。这将是一个游戏,例如,您作为用户Qegal是第一位玩家,在您的设备A上运行它,因此第一次安装将是Qegal-A,第二次将是Sismetic-A(我用另一个设备),以此类推,然后您会尝试在另一个设备上玩它,所以它将是安装Qegal-B。您的B设备如何知道您是Qegal而不是我?通过Cloud,我的意思是iCloud。 - Sismetic
我正在使用Titanium的Appcelerator,它实现了云服务。因此,如果要实现Apple的IOS SDK上的某些功能,Titanium的开发人员需要在他们的SDK上实现它以供我使用,或者我必须找到与Appcelerator兼容的模块。他们将iCloud称为ACS(Appcelerator Cloud Services),它实现了Apple的iCloud服务。 - Sismetic
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接