gpt4 book ai didi

ios - 唯一标识一个 iOS 用户

转载 作者:IT王子 更新时间:2023-10-29 07:42:47 24 4
gpt4 key购买 nike

我想在服务器上为应用程序的新用户创建一个用户帐户,但我也不想要求用户输入任何内容。理想情况下,我希望这是自动的,就像 Game Center 一样。

但我想知道这是否可能。有什么我可以用来唯一识别用户的吗?我不太可能找到用户的 Apple ID。此外,设备 ID 唯一标识设备,而不是用户,因此如果用户拥有更多设备,它就没有用了......

还有什么我可以用的吗?

关于隐私——我不想在用户背后发现任何事情。我完全可以要求用户访问他们的信息(如果有一个 API 可以授予我这些信息,那么如果 API 自己询问这个就太好了)。正如史蒂夫乔布斯自己所说,这就是隐私的全部意义所在 - 强制应用程序在对用户的私有(private)数据进行任何操作之前先征得用户的许可。

最佳答案

正确的解决方案是使用 iCloud Key-Value Store ,您可以在其中存储唯一的用户 ID,而无需任何类型的身份验证或用户信息(例如电子邮件地址)。

最终结果是一个随机的 UUID(实际上并不能识别用户),每个用户都不同,但会在注册到同一 iCloud 帐户的多台设备上持续存在。

我们在 iCloud KV Store 中定义了一个字段,我们称它为 userID。当应用程序启动时,我们首先检查用户 ID。如果它在那里,那么我们都设置了我们用户的唯一 ID。如果没有,那么这是我们第一次为这个用户运行。我们生成一个随机的 UUID 并将其存储在 userID 下的 KV Store 中。仅此而已。

我们的经验表明,此 UUID 对于每个 iTunes 帐户都是唯一的。如果您的最终用户正在使用家庭共享,这些帐户将被分配不同的 UUID(这可能是合意的,也可能不是合意的,但您对此无能为力)。在同一 iTunes 帐户下启动的任意数量的设备都将看到相同的 UUID。

这种方法是完全合法的,应该得到 Apple 的认可,没有任何问题。

显然,您必须在 Xcode 的 Capabilities 下启用 iCloud Key-Value store,只需打开 iCloud Switch。

这是一个在 Objective-C 中实现这个概念的简单类:

@implementation EEUserID

+ (NSUUID *) getUUID
{
NSUUID *uuid = nil;
NSString *uuidString = [[NSUbiquitousKeyValueStore defaultStore] stringForKey: @"EEUserID"];
if (uuidString == nil)
{
// This is our first launch for this iTunes account, so we generate random UUID and store it in iCloud:
uuid = [NSUUID UUID];
[[NSUbiquitousKeyValueStore defaultStore] setString: uuid.UUIDString forKey: @"EEUserID"];
[[NSUbiquitousKeyValueStore defaultStore] synchronize];
}
else
{
uuid = [[NSUUID alloc] initWithUUIDString: uuidString];
}

return uuid;
}

+ (NSString *) getUUIDString
{
NSUUID *uuid = [self getUUID];
if (uuid != nil)
return uuid.UUIDString;
else
return nil;
}

+ (void) load
{
// get changes that might have happened while this
// instance of your app wasn't running
[[NSUbiquitousKeyValueStore defaultStore] synchronize];
}

@end

对于头文件:

#import <Foundation/Foundation.h>

@interface EEUserID : NSObject

+ (NSUUID *) getUUID;
+ (NSString *) getUUIDString;

@end

要使用,您只需调用:

NSString *uniqueIDForiTunesAccount = [EEUserID getUUIDString];

享受吧。

关于ios - 唯一标识一个 iOS 用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11597100/

24 4 0
文章推荐: ruby-on-rails - Ruby on rails :- 找不到 RubyGem rails (>= 0) (Gem::LoadError)
文章推荐: ios - NSTimeZone: "UTC"和 "GMT"之间有什么区别吗?
文章推荐: ruby - 让 ruby​​ 对象响应任意消息?
文章推荐: ruby - 如何检查
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com