Стремясь создать максимально простой пользовательский интерфейс, я поставил перед собой задачу принять пользователя как анонимного пользователя, используя 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, давайте свяжемся и опубликуем учебник, потому что это стоило мне больше часов, чем я хотел бы думать.
Благодарю вас! Ксилус