Ios 解析匿名用户不持久并导致会话错误
我目前正在使用Parse的匿名用户,在Ios 解析匿名用户不持久并导致会话错误,ios,parse-platform,pfuser,Ios,Parse Platform,Pfuser,我目前正在使用Parse的匿名用户,在didFinishLaunchingWithOptions创建一个匿名用户,使用的逻辑是,如果未检测到[PFUser currentUser],则创建一个: if ([PFUser currentUser]){ NSLog(@"there is a current user"); } else { [PFUser enableAutomaticUser]; PFACL *defaultACL = [PFA
didFinishLaunchingWithOptions
创建一个匿名用户,使用的逻辑是,如果未检测到[PFUser currentUser]
,则创建一个:
if ([PFUser currentUser]){
NSLog(@"there is a current user");
} else {
[PFUser enableAutomaticUser];
PFACL *defaultACL = [PFACL ACL];
[PFACL setDefaultACL:defaultACL withAccessForCurrentUser:YES];
NSLog(@"make an Automatic user");
[[PFUser currentUser] saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error){
if (error){
NSLog(@"Error: %@", error);
}
}];
}
但是,我遇到了一个问题,在我重新启动应用程序时,有时会重新创建匿名用户,或者在我尝试将数据保存给同一匿名用户时,它会提供会话错误。我是否应该执行其他检查?谢谢 这里不是使用Parse匿名用户,而是我的解决方法。它基于设备供应商的
标识
,该标识对于特定安装的特定设备是唯一的。这意味着在正常情况下,用户只安装一次应用程序,然后再进行更新,字符串将保持不变。但是,如果您多次在测试设备上进行调试和安装/删除,这不是最佳解决方案
下面有一些关于密码字段的非常骇客的东西,你不应该为生产应用程序这样做。希望这有帮助
if (![PFUser currentUser]){
NSString *uuid = [[UIDevice currentDevice] identifierForVendor].UUIDString;
PFQuery *userQuery = [PFUser query];
[userQuery whereKey:@"username" equalTo:uuid];
[userQuery findObjectsInBackgroundWithBlock:^(NSArray * _Nullable objects, NSError * _Nullable error) {
if (error){
NSLog(@"Error: %@", error);
} else {
if (objects.count == 0){
//Make new user
PFUser *newUser = [PFUser user];
newUser.username = uuid;
newUser.password = @"123456";
NSString *deviceType = [UIDeviceHardware platformString];
if (deviceType){
[newUser setObject:deviceType forKey:@"deviceName"];
}
[newUser signUpInBackgroundWithBlock:^(BOOL succeeded, NSError * _Nullable error) {
if (error){
NSLog(@"Error: %@", error);
} else {
NSLog(@"New user signed up: %@", newUser.username);
NSLog(@"done");
}
}];
} else {
NSString *newUUID = [NSString stringWithFormat:@"%@-%@", uuid, [self generate4Alphanumeric]];
PFUser *newUser = [PFUser user];
newUser.username = newUUID;
newUser.password = @"123456";
NSString *deviceType = [UIDeviceHardware platformString];
if (deviceType){
[newUser setObject:deviceType forKey:@"deviceName"];
}
[newUser signUpInBackgroundWithBlock:^(BOOL succeeded, NSError * _Nullable error) {
if (error){
NSLog(@"Error: %@", error);
} else {
NSLog(@"Modified user signed up: %@", newUser.username);
NSLog(@"done");
}
}];
}
}
}];
} else {
NSLog(@"currentUser: %@", [PFUser currentUser].username);
}
你找到解决这个问题的方法了吗?我的应用程序现在也遇到了同样的问题…谢谢@Seishin的提醒。让我回答我自己的问题。daspianist,感谢您的快速回复和建议的解决方法。我只是想问你,苹果公司是否同意这样做?我的意思是获取和存储设备的UUID?据我所知,在安卓系统中是禁止的。谢谢!:)好问题。这个应用程序已经被苹果公司批准了,所以我认为它还可以。我相信这是因为UUID在新安装时确实会发生变化,这就是为什么这不是跟踪用户的好方法。然而,这里似乎有一个比我的使用钥匙链的解决方案更好的解决方案——也许可以试一试?