我很困惑如何思考何时创建新的匿名用户。这就是我的应用程序现在的设置方式。
我有三个ViewControllers。
1) GetPhoneController ,2) VerificationController ,3) ViewController
GetPhoneController:是第一个视图,如果打开应用程序的用户没有用户存储意义[PFUser currentUser];
等于NULL则会运行此视图,否则 ViewController 将执行(检查在AppDelegate中完成)。该视图将在UITextField中获取用户的电话号码并发送到下一个控制器
VerificationController:打开此视图时,会使用VerificationCode向用户发送短信。我正在使用Twilio解析。验证码保存在User对象的自定义字段中,以便稍后用于匹配代码。(问题在这里你会知道为什么以后)。
如果用户输入了正确的验证码,则进行检查,如果用户确实这样做,那么我希望创建匿名用户并转到下一个控制器。为什么?因为如果我在验证之前创建了用户,那么在某个场景中,用户可能会关闭该应用程序,然后创建一个用户,不会占用额外的空间。
所以我的问题是我尝试将验证码保存到不存在的用户,因为我想在验证后创建它。
如果您有更好的解决方案来更好地解决验证逻辑步骤,那么解决方案将会非常棒甚至更好。
此外,我从不签署用户,因为我不希望用户在验证完成后登录,这也意味着匿名用户将被删除,是坏的还是可以使用像是什么?
谢谢!
答案 0 :(得分:1)
如果您不想在验证完成之前在Parse中创建用户,则可以将验证令牌保存到NSUserDefaults
。
在VerificationController中发送验证码的方法......
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:verificationCode forKey:@"code"];
[defaults synchronize];
然后,检查用户何时输入代码,然后点击按钮......
- (void)userTappedCheckCodeButton:(id)sender {
NSString *enteredCode = codeField.text;
NSString *storedCode = [[NSUserDefaults standardUserDefaults] objectForKey:@"code"];
if ([enteredCode isEqualToString:storedCode]) {
// Code matches. Create your anonymous user as the code has been verified.
} else {
// No code match. Tell the user, or maybe ask if they want to send the code again.
}
}
---使用新信息进行编辑,代码生成发生在服务器端---
如果你真的不想创建用户,直到他们被验证并且代码生成发生在服务器端,你可以使用在Parse中创建一个新的VerificationToken
对象。您可以通过[[NSUUID UUID] UUIDString]
为用户设备生成标识符,并存储在NSUserDefaults
中(这样,您不需要使用广告标识符,并且它在应用程序执行期间保持不变)。在该UUID中发送生成代码并将代码发送给用户的请求,并使用您的云代码函数将其保存在验证对象中。
在VerificationController
上,只需使用您从NSUserDefaults
检索到的UUID发送代码,搜索与其匹配的VerificationToken
对象,返回成功,然后创建匿名用户。
最后,如果您担心有成千上万个未完成的VerificationToken
对象混乱Parse,只需告诉用户他们只能持续24小时,并创建一个计划的云代码作业去删除所有VerificationToken
createdAt
1}} {1}}日期早于1天的对象,并安排任务每天运行。