import Firebase /** snapshotでリアルタイム更新の処理を作成 */ func addEventListener_realtime()->Void{ } func FirebaseTest()->Void{ // FirestoreのDB取得 let db = Firestore.firestore() // personsコレクションを取得 db.collection("hairdresser_menu").getDocuments() { collection, err in // エラー発生時 if let err = err { print("Error getting documents: \(err)") } else { // コレクション内のドキュメントを取得 for document in collection!.documents { print(document) } } } } // Firestoreへのデータ書き込み func firestore_set()->Void{ let db = Firestore.firestore() db.collection("hairdresser_menu") .document("menu") // menuというドキュメントで生成。ここはユーザーIDとかでも良いね! .collection("prefectures") // サブコレクションであるprefecturesがない場合、自動でリストが生成される。 .document("osaka") .setData(["capital": "osaka","specialty": "takoyaki"] ) { err in if let err = err { print("Error writing document: \(err)") } else { print("Document successfully written!") } } } // Firestoreへのデータ書き込み(一回読み込ませておくと、以下の指定したcollection内で値の変更があれば再度処理。 func realtime_firestore_get()->Void{ let db = Firestore.firestore() db.collection("hairdresser_menu").addSnapshotListener { (documentSnapshot, error) in // ドキュメントスナップショットの取得に失敗した場合はエラー内容を表示 guard let documentSnapshot = documentSnapshot else { print("Error fetching document: \(error!)") return } // 対象ドキュメントの変更内容 documentSnapshot.documentChanges.forEach{ diff in if (diff.type == .added){ print("ドキュメントが追加された場合") } if (diff.type == .modified){ // 更新された値を取得 db.collection("hairdresser_menu").document("menu").getDocument { (snap, error) in if let error = error { fatalError("\(error)") } guard let data = snap?.data() else { return } print(data) } print("ドキュメントが変更された場合") } if (diff.type == .removed){ print("ドキュメントが削除された場合") } } print("リスナーをアタッチして、コールバックを受け取った。") } } // Firestoreからのデータ取得 func data_get()->Void{ let db = Firestore.firestore() let docRef = db.collection("hairdresser_menu").document("menu") // ユーザーIDで取得 // ドキュメント取得 docRef.getDocument { (document, error) in if let document = document, document.exists { let dataDescription = document.data().map(String.init(describing:)) ?? "nil" print("Document data: \(dataDescription)") } else { print("Document does not exist") } } // サブコレクション取得 docRef.getDocument { (collection, error) in if let collection = collection, collection.exists { let dataDescription = collection.data().map(String.init(describing:)) ?? "nil" print("Document data: \(dataDescription)") } else { print("Document does not exist") } } }
【Firebase】Firestoreを用いたリアルタイム更新