Разбор анонимных пользователей не сохраняется и вызывает ошибки сеанса

В настоящее время я использую анонимного пользователя 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);
    }
Другие вопросы по тегам