我用Swift为IOS 10.2开发了一个应用程序。我使用来自服务器的苹果推送通知。在这个应用程序中,我使用UserDefaults作为用户设置。
我希望,如果用户希望收到当天的新闻,我的应用程序允许显示新闻类别的推送通知。因此,在向用户显示之前,我可以管理推送通知吗?
我必须将设置保存在服务器上吗?有什么建议吗?谢谢。
发布于 2017-02-06 07:22:14
苹果在iOS 10中引入了通知服务扩展。您可以使用这个扩展来修改APNS发送的通知的内容。此扩展允许您在向用户显示或修改通知的内容(如标题、字幕、描述)之前下载图像/视频/gif内容。但是,您将不被允许完全取消通知。
虽然如果您将通知设置保存在Suite UserDefaults中(通过使用AppGroups),但您可以访问Notification扩展中的这些设置,并且在读取这些设置之后,可以将通知的内容更改为一般通知,并使用API将通知设置发送到外部服务器,并停止向客户端发送该特定通知。但是是的,取消/停止特定通知的逻辑必须写在服务器上。
希望这能帮到你。
发布于 2020-11-11 03:02:25
苹果的通知团队有时(几乎每次)都会做出一些非常愚蠢的决定--,如:
...and 无法使用NotificationServiceExtension取消推送通知,这是一个很好的例子。为什么不取消无效或损坏的推送通知,然后使用notification扩展显示给用户?
除了开发团队痴呆症或恶意之外,没有其他有效的解释。
但是你可以“巨魔系统”!太棒了!
构建一个无效的、空的通知内容,并将其发送回notification以消化和阻塞。在您的UNNotificationServiceExtension中:
public override func didReceive(
_ request: UNNotificationRequest,
withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void
){
self.contentHandler = contentHandler
self.content = (request.content.mutableCopy() as? UNMutableNotificationContent)
if let content = content {
print("Valid FCM received")
contentHandler(content)
}
else {
// Invalidates the notification
print("Invalid FCM received")
contentHandler(UNNotificationContent())
}
}拿着,大哥。
https://stackoverflow.com/questions/42062159
复制相似问题