Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 解析匿名用户不持久并导致会话错误_Ios_Parse Platform_Pfuser - Fatal编程技术网

Ios 解析匿名用户不持久并导致会话错误

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

我目前正在使用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);
            }
        }];
}

但是,我遇到了一个问题,在我重新启动应用程序时,有时会重新创建匿名用户,或者在我尝试将数据保存给同一匿名用户时,它会提供会话错误。我是否应该执行其他检查?谢谢

这里不是使用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在新安装时确实会发生变化,这就是为什么这不是跟踪用户的好方法。然而,这里似乎有一个比我的使用钥匙链的解决方案更好的解决方案——也许可以试一试?