swift - 有没有办法在不触发观察功能的情况下更新 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()
}
解决方案
使数据库观察者完全忽略特定更新是不可能的。您要么必须完全删除观察者,要么在其中编写一些代码来决定它在被调用时是否应该采取行动。
推荐阅读
- javascript - 将数字拆分为 4 个随机数
- java - 如何使用 mockito 或 Junit 测试此方法?
- list - 对子列表的操作
- python - 无法修复“浮动”对象不可调用错误
- laravel - 护照身份验证在我的 Laravel 5.4 应用程序中不起作用?
- python - Django:并行运行几个任务
- java - Spring boot Reactive app 启动 tomcat 代替 Netty
- android - 如何在 Google Play 控制台中更新已删除的应用
- linux - 如何通过 unix shell 脚本从远程服务器为特定用户发送电子邮件
- django - Django JWT 获取用户信息