Разбор анонимных пользователей не сохраняется и вызывает ошибки сеанса
В настоящее время я использую анонимного пользователя Parse, создаю анонимного пользователя на 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);
}
}];
}
Однако я сталкиваюсь с проблемой, когда анонимные пользователи иногда воссоздаются при перезапуске приложения, или оно вызывает ошибки сеанса при попытке сохранить данные для того же анонимного пользователя. Есть ли дополнительные проверки, которые я должен выполнить? Спасибо!
1 ответ
Вместо использования Parse Anonymous User, вот мой обходной путь. Это основано на устройстве identifierForVendor
, который является уникальным для конкретного устройства для конкретной установки. Это означает, что в обычных ситуациях, когда пользователь устанавливает приложение только один раз, а затем обновляет его, строка сохраняется. Однако, если вы выполняете отладку и установку / удаление на своем тестовом устройстве несколько раз, это не является оптимальным решением.
Ниже приведено несколько довольно хакерских вещей с полем пароля, которые вы не должны делать для производственного приложения. Надеюсь это поможет.
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);
}