如何确保我的应用不会发送太多通知



我正在开发一个iOS活动应用程序,该应用程序将在许多不同的情况下使用通知(例如,您有一个新的关注者,您收到了新的赞,有人对您的活动发表了评论) - 每个通知类别都可以由用户在应用程序设置中单独打开/关闭。

由于大多数用户不会花费太多时间编辑通知设置,因此我想对在设定的时间间隔内发送给单个用户的通知数量实施某种形式的限制。

例如。用户发布了一条消息,他/她收到了 10 个赞超过 30 分钟。为每个喜欢发送通知似乎有点过分。也许第一个喜欢应该发送通知,但下一个通知应该至少在 30 分钟后。因此,如果同时收到了多个赞,则下一个通知应显示"您已收到X个赞"。

我可能想限制每个类别的喜欢数量,但也要限制应用程序的整体喜欢数。然后,可能有一些类别很重要,可以直接独立于总体限制发送。

我绝对不是第一个尝试解决这个问题的人,但我还没有找到任何好的信息来源。有没有人有任何最佳实践示例可以分享如何处理这个问题?还是一个好的教程?

可能不是最佳实践,但我会以这种方式解决它。

场景 1 - 检查上次发送时间:在后端,我将保留目标的上次通知发送时间。据此,您可以决定是否发送新通知。

场景 2 - 时间范围:如果你想在 30 分钟内实现 10 条消息这样的 sth,无论它们之间的距离如何,它或多或少都是相同的。您必须将发送到目标的每个通知添加到数据库中。如果要发送新记录,您将清除所有超过 30 分钟的记录,并检查计数是否小于阈值。

这不是你问的100%,但可能会给你一个提示。

你可以为此使用去保镖。去抖动器可防止该方法(又名通知)在特定时间段内频繁触发。

去抖类:

final class Debounce: NSObject {
var callback: (() -> ())
var delay: Double
weak var timer: Timer?
init(_ callback: @escaping (() -> ()), delay: Double = 0.25) {
self.delay = delay
self.callback = callback
}
func call() {
timer?.invalidate()
let nextTimer = Timer.scheduledTimer(timeInterval: delay, target: self, selector: #selector(Debounce.fireNow), userInfo: nil, repeats: false)
timer = nextTimer
}
@objc func fireNow() {
self.callback()
}
}

使用示例为:

var sendNotificationDebounce: Debounce?
override func viewDidLoad() {
super.viewDidLoad()
searchTermDebounce = Debounce({ [weak self] in
guard let `self` = self else {
return
}
self.sendNotification()
}, delay: 300) // delay is in seconds (300 would be 5 mins)
}
func sendNotification() {
// sends notification
}
func someOtherMethod() {
sendNotificationDebounce?.call()
}

最新更新