rid*_*rid 37 authentication ios
我想在服务器上为应用的新用户创建一个用户帐户,但我也不想让用户输入任何内容.理想情况下,我希望这是自动的,就像Game Center一样.
但我想知道是否有可能.有什么我可以用来唯一识别用户吗?我不太可能找到用户的Apple ID.此外,设备ID唯一地标识设备,而不是用户,因此如果用户有更多设备,它将是无用的......
还有什么我可以使用的吗?
关于隐私 - 我不想找到用户背后的任何内容.我要求用户访问他们的信息绝对没有问题(如果有一个API授予我这些信息,那么如果API问这个问题就会很棒).正如史蒂夫乔布斯自己所说,这就是隐私的全部 - 强迫应用程序在对私人数据做任何事情之前要求用户许可.
ldo*_*ogy 26
正确的解决方案是使用iCloud Key-Value Store,您可以在其中存储唯一的用户ID,而无需任何类型的身份验证或用户信息(如电子邮件地址).
最终结果是一个随机的UUID(实际上并不识别用户),对于每个用户来说都是不同的,但对于注册到同一个iTunes帐户的多个设备,它们具有相同的值.
我们在iCloud KV商店中定义一个字段,我们称之为userID.启动应用程序时,我们首先检查用户ID.如果它在那里,那么我们都设置了我们用户的唯一ID.如果没有,那么这是我们第一次为这个用户运行.我们生成一个随机UUID并将其存储在userID下的KV Store中.这里的所有都是它的.
我们的经验表明,这个UUID对于每个iTunes帐户都是唯一的.如果您的最终用户正在使用家庭共享,那么这些帐户将被分配不同的UUID(这可能是也可能不是,但您无能为力).在同一iTunes帐户下启动的任意数量的设备都将看到相同的UUID.
这种方法是完全合法的,应该由Apple批准,没有任何问题.
显然你必须在功能下的Xcode上启用iCloud Key-Value存储,只需打开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
Run Code Online (Sandbox Code Playgroud)
对于头文件:
#import <Foundation/Foundation.h>
@interface EEUserID : NSObject
+ (NSUUID *) getUUID;
+ (NSString *) getUUIDString;
@end
Run Code Online (Sandbox Code Playgroud)
要使用,您所要做的就是调用:
NSString *uniqueIDForiTunesAccount = [EEUserID getUUIDString];
Run Code Online (Sandbox Code Playgroud)
请享用.
Eri*_*rik 22
使用以下方法生成UUID:
NSString *UUID() {
CFUUIDRef cfuuid = CFUUIDCreate(NULL);
NSString *uuid = (__bridge_transfer NSString *)CFUUIDCreateString(NULL, cfuuid);
CFRelease(cfuuid);
return uuid;
}
Run Code Online (Sandbox Code Playgroud)
这里没有任何东西被苹果公司弃用或不赞成 - 实际上,这是他们建议你这样做的方式.将生成的UUID存储在钥匙串中,它将存在 - 即使用户卸载并重新安装您的应用程序.UUID对于设备及其生成时间是唯一的.
然后,您可以使用各种方案让用户将其设备组合在一起 - iCloud,或者您从服务器提供的某种密钥.
祝好运!
加成:
以下是我将其存储在钥匙串中的方法,使用uuid作为用户名并生成随机密码:
uuid = UUID();
[keychainItemWrapper setObject:uuid forKey:(__bridge_transfer id)kSecAttrAccount];
NSString *pass_token = randomString(10);
[keychainItemWrapper setObject:pass_token forKey:(__bridge_transfer id)kSecValueData];
Run Code Online (Sandbox Code Playgroud)
请注意,所有这些都可以在没有用户输入的情况下完成.
更新:
MCSMKeychainItem有一个很好的UUID生成和存储解决方案[MCSMApplicationUUIDKeychainItem applicationUUID].图书馆也有[MCSMGenericKeychainItem genericKeychainItemWithService:service username:username password:password].这些功能共同照顾上面提到的一切.使用CocoaPods也很容易安装.
| 归档时间: |
|
| 查看次数: |
14032 次 |
| 最近记录: |