2

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

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

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

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

    }
    else
    {
        println(player!.objectId)
    }

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

Next - 检查 Object 是否再次为 nil - 这次决定是否尝试执行匿名登录 - 除了这个匿名登录操作之外,没有其他东西可用于生成匿名用户。

    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 中使用匿名用户的专家,让我们联系并发布教程 - 因为这花费了我比我想考虑的更多时间。

谢谢!木质部

4

1 回答 1

1

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

于 2015-08-08T17:25:12.370 回答