Parse + Swift + Anonymous

时间:2015-08-07 00:43:16

标签: ios swift session parse-platform anonymous-users

为了尽可能地创建最简单的用户体验,我的任务是使用Parse + Swift接受用户作为匿名用户。我曾想过在Parse中使用匿名用户函数来实现这一点。结果,我创建了以下代码:

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.
    self.setupParse()
    // self.setupAppAppearance()

第一部分是创建一个用户,看看是否在此过程中 - 我有一个nil objectId(通常在用户首次尝试打开应用程序时为true)。

    var player = PFUser.currentUser()
    if player?.objectId == nil {

    }
    else
    {
        println(player!.objectId)
    }

如果我有一个objectId(表示我之前已经在这条路上并保存了一个匿名用户对象) - 将其扔到控制台,这样我就能看到它是什么并在Parse用户对象中检查它。很酷 - 到目前为止很好。

下一步 - 检查对象是否再次为零 - 这次是否决定是否尝试执行匿名登录 - 除了匿名登录之外,不能用于生成匿名用户动作。

    if player?.objectId == nil {
        PFAnonymousUtils.logInWithBlock({
            (success, error) -> Void in
            if (error != nil)
            {
                println("Anonymous login failed.")
            }
            else
            {
                println("Anonymous login succeeded.")

如果匿名登录成功(仍然考虑在尝试运行这些位之前进行网络可用检查...但假设网络有效)将Bool保存到" isAnonymous"在服务器上,以确保我们已将此用户标识为匿名 - 我可能稍后想要这些信息,因此似乎值得采取此行动。

问题1:我是否需要重新查询PFUser.currentUser()(称为播放器)以确保我有一个连接到服务器的有效匿名用户对象,或者我之前分配的播放器对象认识到我已经登录并因此认识到我可以将其他信息投入相关的在线记录?我认为这是按原样运行的 - 但我已经得到了奇怪的会话令牌错误:

  

[错误]:会话令牌无效(代码:209,版本:1.7.5)

                player!["isAnonymous"] = true as AnyObject
                player!.saveInBackgroundWithBlock {
                    (success, error) -> Void in
                    if (error != nil)
                    {
                        println("error updating user record with isAnonymous true")
                    }
                    else
                    {
                        println("successfully updated user record with isAnonymous true")
                    }
                }
            }
        })
    }
    else
    {

    }

    return true
}

func setupParse()
{
    Parse.setApplicationId("dW1UugqmsKkQCoqlKR3hX8dISjvOuApcffGAWR2a", clientKey: "BtXxjTjBRZVnCZbJODhd3UBUU8zuoPU1HBckXh4t")

    enableAutomaticUserCreateInParse()

下一步就是试图找出处理这些令牌问题的方法。不知道它是否对我有任何好处。它说在实例化Parse连接后立即打开它。

    PFUser.enableRevocableSessionInBackgroundWithBlock({
        (error) -> Void in
        if (error != nil) {
            println(error?.localizedDescription)
        }
    })

接下来 - 只是抛弃物体,因为我一直在努力与连接和存储东西或没有连接或失去会话令牌。所以 - 直到我解决了这个问题 - 我创造了更多的测试对象,而不是我可以摇晃它。

    var testObject = PFObject(className: "TestObject")

    testObject["foo"] = "barnone"

    testObject.saveInBackgroundWithBlock { (success: Bool, error: NSError?) -> Void in
        println("Object has been saved.")
    }
}

问题2:在我看来PFUser.enableAutomaticUser()非常方便 - 在试图弄清楚我是否登录/在线/无论什么时都会引起一些麻烦。任何人都有这方面的经验,并能够指导我如何检查你是否连接 - 我需要知道以后能够决定是否将更多的东西保存到用户对象。

func enableAutomaticUserCreateInParse() {
    if PFUser.currentUser()?.objectId == nil
    {
        myHumanGamePlayer.playerDisplayName = "Anonymous Player"
        PFUser.enableAutomaticUser()
    }
}

在Parse with Swift中使用匿名用户的专家,让我们联系并发布教程 - 因为这花费了我更多的时间而不是我想要想想。

谢谢! Xylus

1 个答案:

答案 0 :(得分:1)

对于播放器![“isAnonymous”] = true作为AnyObject,不要将其保存为任何对象。将它保存为bool并查看你的解析,看看它是否是一个bool对象。尝试在不同的视图控制器中查询当前用户并打印到命令行。我希望这有帮助