【问题标题】:Parse + Swift + Anonymous解析 + Swift + 匿名
【发布时间】:2015-08-07 00:43:16
【问题描述】:

为了尽可能创造最简单的用户体验,我的任务是使用 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()(称为 player)以确保我有一个连接到服务器的有效匿名用户对象,还是我之前分配的 player 对象认识到我已经登录并因此认识到我可以将其他信息放入相关的在线记录中?我认为这是按原样工作的 - 但我遇到了奇怪的会话令牌错误:

[错误]:无效会话令牌(代码: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 中使用匿名用户方面的专家,让我们联系并发布教程 - 因为这花费了我比我想的更多的时间。

谢谢! 木质部

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-29
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2013-11-23
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多