Невозможно создать новые документы в Firestore - PullRequest
0 голосов
/ 10 января 2019

Я недавно переключился на Firestore в одном из моих приложений для iOS. Я пытаюсь сохранить некоторые настройки в коллекции "settings".

У меня есть следующий код:

let data = FSSettings().store() // returns [String : Any]

let db = Firestore.firestore()
let document = db.collection("settings").document(uid) // I tried this

document.setData(data)
{
   error in
   Swift.print(error?.localizedDescription)
}

// And this..
db.collection("settings").addDocument(data: data)
{
    error in
    Swift.print(error?.localizedDescription)
}

Согласно документации Firestore, это создаст документ (а также коллекцию). Но документ не создается. Я установил точку останова в строке print (), но она также никогда не вызывается.

Вот мои правила в Firestore:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

Это также должно работать, потому что я вошел в систему. Я также попробовал другой метод с использованием транзакции:

let db = Firestore.firestore()
let document = db.collection("settings").document(uid)

db.runTransaction(
{
   transaction, errorPointer in

   transaction.updateData(data, forDocument: document)
})
{
   // Completion
   object, error in
   if let error = error
   {
       Swift.print(error.localizedDescription)
   }
}

При выполнении этого оператора выводится следующая строка:

Transaction failed all retries.

Что мне не хватает? Мое приложение работает на iOS 12.0 и использует последнюю версию Firebase / Firestore (CocoaPods).

Когда я создаю документ вручную, я могу без проблем изменять значения, это только создание, которое завершается неудачей.

1 Ответ

0 голосов
/ 10 января 2019

Похоже, что инициализация Firestore занимает некоторое время. Настройки создаются в самом начале приложения, поэтому Firestore еще не был инициализирован. Выполнение кода выше с небольшой задержкой в ​​2 секунды работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...