ios - 解析 + Swift + 匿名

标签 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 用户对象中检查它。酷 - 到目前为止还不错。

下一步 - 再次检查对象是否为 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()(称为播放器)以确保我有一个连接到服务器的有效匿名用户对象,或者我之前分配的播放器对象识别我已经登录并因此识别我可以将其他信息放入在线关联记录中?我认为这是按原样工作的 - 但我遇到了奇怪的 session token 错误:

[Error]: invalid session token (Code: 209, Version: 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()

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

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

下一步 - 只是扔掉对象,因为我一直在努力连接和存储东西,或者不连接或丢失 session token 。所以 - 在我解决这个问题之前 - 我正在创建更多的测试对象,而不是我可以摇摇晃晃的棍子。

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

谢谢! 木质素

最佳答案

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

关于ios - 解析 + Swift + 匿名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31867952/

相关文章:

ios - Cordova 应用程序。代码 : The launch image set named "LaunchImage" did not have any applicable content

iphone - 将唯一条目添加到数组中 - Xcode/Objective-C

objective-c - 将时间戳转换为 nsdate 格式

c# - HttpSessionState 在哪里、如何、优点?

ios - 如何在 TableView Cell 上使用 iOSCharts (https ://github. com/danielgindi/Charts)?

ios - XCTAssert 中断函数

ios - SKStoreReviewController.requestReview() 在 Live App 中不起作用

jquery - Ajax调用从grails show.gsp保存数据,接收到 “Session is Closed!”异常

c# - ASP.Net 中静态类的生命周期

iOS - 如何声明类型未知的 Swift 枚举属性?