Firebase アプリ開発

【Firebase】Firestoreを用いたリアルタイム更新


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, アプリ開発
-,

© 2024 Yosshi Labo. Powered by AFFINGER5