【コピペで使える】Firebase 書き込み方法 まとめ | Swift

この記事ではSwiftでFirestoreにデータを書き込む方法を書きます。

Firestoreがbeta版からついに正式リリースされ、 これからもっとサーバーレスが使われる様になりますね。 先週に使い方の勉強をしている際に、なぜか書き込めなかったりしたので 今回はその解決方法も記載したいと思います。


Could not reach Cloud Firestore backend でつまる。。。

DBのリファレンス作成

DBを扱える様にリファレンスを作成します。 DBに書き込む際に TimeStamp が同時にセットされる様に設定しておかないと、 Warningが出る様になっていたので書き込んだ日時がセットされる様に設定しておきます。


let db = Firestore.firestore()
let settings = db.settings
settings.areTimestampsInSnapshotsEnabled = true
db.settings = settings


ドキュメントの作成・書き込み

以下の様に書くと指定したコレクションの中にドキュメントを自動生成してくれます。


var ref: DocumentReference? = nil
ref = db.collection("コレクションID").addDocument(data: [ "キー" : "値" ], completion: { (err) in
    if let err = err {
        debugPrint("Error adding document: \(err)")
    } else {
        debugPrint("documentID: \(ref!.documentID)")
    }
})


ドキュメントの更新・書き込み

またドキュメントの更新をする際は以下の様にドキュメントIDをリファレンスに設定する事でできます。


var ref: DocumentReference? = nil
ref = db.collection("コレクションID").addDocument(data: [ "キー" : "値" ], completion: { (err) in
    if let err = err {
        debugPrint("Error adding document: \(err)")
    } else {
        debugPrint("documentID: \(ref!.documentID)")
    }
})


指定できるデータ型

保存できるデータの型は以下の通りです。


let docData: [String: Any] = [
    "stringExample": "Hello world!",
    "booleanExample": true,
    "numberExample": 3.14159265,
    "dateExample": NSDate(),
    "arrayExample": [5, true, "hello"],
    "nullExample": NSNull(),
    "objectExample": [
        "a": 5,
        "b": [
            "nested": "foo"
        ]
    ]
]

また、位置情報については別の GeoFirestore というライブラリがとても便利なのでそれを使う事をおすすめします。 GeoFirestore を利用すると指定した範囲内のユーザーのみを抽出するなど、自分でアルコリズムを書く必要もなく実装できます。 マッチングアプリなどを作るなら是非。


Firebase 位置情報を保存する

書き込みができない場合

ほとんどの場合、Auth認証の実装をすると解決します。 Firestoreにはルールという項目があり、そこでデバッグ用(誰でも書き込める設定)にしていましたが書き込めませんでした。 実際、しばらく放置していたのですが、Auth証をやった後全く同じ実装で書き込める様になったので おそらく認証周りのエラーだったのかもしれません。(実際のエラー内容にはには認証エラーとはでない)



最後に

ここまでがFirestoreの書き込みの処理になります。 だれかのお役に立てたら嬉しく思います。

0 コメント