首页 > 解决方案 > 有没有办法在不触发观察功能的情况下更新 Firebase 中的孩子?

问题描述

在我的应用程序中,当用户取消关注另一个用户时,我希望从 firebase 中删除相应的关注通知。但是,当我更新该通知的引用时,会立即触发观察功能并删除新通知。

那么我如何——如果有办法——在不触发观察者功能的情况下更新通知值呢?

以下是我上传通知和删除通知的功能“关注通知”

func uploadNotification(toUser user: User, type: NotificationType, postID: String? = nil){
      guard let uid = Auth.auth().currentUser?.uid else { return }
      //users do not get notifications of themselevs
      guard uid != user.uid else { return }
      var values: [String: Any] = ["timestamp": Int(NSDate().timeIntervalSince1970),
                                   "uid": uid,
                                   "type": type.rawValue]
      
      if let postID = postID {
          values["postID"] = postID
      }
      REF_NOTIFICATIONS.child(user.uid).childByAutoId().updateChildValues(values) { (error, ref) in
          
          guard let reference = ref.key else { return }
          
          if type == .follow {
              REF_FOLLOW_NOTIFICATIONS.child(user.uid).updateChildValues([reference: String(type.rawValue)])
          }
      }
  }

func unfollowUser(uid: String, completion: @escaping DatabaseCompletion) {
      guard let currentUID = Auth.auth().currentUser?.uid else { return }
       self.deleteFollowNotification(uid: uid)
      
      
      REF_USER_FOLLOWING.child(currentUID).child(uid).removeValue { (error, ref) in
          REF_USER_FOLLOWERS.child(uid).child(currentUID).removeValue(completionBlock: completion)
         
      }
  }
  
  
  func deleteFollowNotification(uid: String){
      REF_FOLLOW_NOTIFICATIONS.child(uid).observeSingleEvent(of: .value) { snapshot in
          
           let notificationKey = snapshot.key
          REF_NOTIFICATIONS.child(uid).child(notificationKey).removeValue()
          
      }
      REF_FOLLOW_NOTIFICATIONS.child(uid).removeValue()
      
  }

标签: swiftfirebasefirebase-realtime-database

解决方案


使数据库观察者完全忽略特定更新是不可能的。您要么必须完全删除观察者,要么在其中编写一些代码来决定它在被调用时是否应该采取行动。


推荐阅读