Разбор + Swift + Анонимный

Стремясь создать максимально простой пользовательский интерфейс, я поставил перед собой задачу принять пользователя как анонимного пользователя, используя Parse + Swift. Я думал использовать для этого анонимные пользовательские функции в Parse. В результате я создал следующий код:

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

Этот первый раздел предназначен для создания пользователя и проверки того, есть ли на данном этапе процесса - у меня есть нулевой идентификатор объекта (обычно верно для пользователя, когда он впервые пытается открыть приложение).

    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), чтобы убедиться, что у меня есть допустимый объект анонимного пользователя, который подключен к серверу, или объект игрока, который я выделил ранее, распознает, что я вошли в систему и тем самым узнают, что я могу добавить другую информацию в соответствующую запись в Интернете? Я думаю, что это работает как есть, но я получаю странные ошибки токена сеанса:

[Ошибка]: недопустимый токен сеанса (Код: 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 со Swift, давайте свяжемся и опубликуем учебник, потому что это стоило мне больше часов, чем я хотел бы думать.

Благодарю вас! Ксилус


person Xylus Sand    schedule 07.08.2015    source источник


Ответы (1)


Для игрока! ["isAnonymous"] = true как AnyObject, не сохраняйте его как какой-либо объект. Сохраните его как bool и посмотрите на свой синтаксический анализ, чтобы увидеть, является ли он логическим объектом. Попробуйте запросить текущего пользователя в другом контроллере представления и напечатать в командной строке. надеюсь это помогло

person Fallah    schedule 08.08.2015