我使用Swift为IOS 10.2开发了一个应用程序。我从服务器使用Apple推送通知。在这个应用程序中,我使用UserDefaults进行用户设置。
我希望如果用户想要接收当天的新闻,我的应用程序允许显示新闻类别的推送通知。因此,我可以在向用户显示之前管理推送通知吗?是否必须保留服务器上的设置?有什么建议吗?感谢。
答案 0 :(得分:1)
Apple在iOS 10中引入了Notification Service Extension。您可以使用此扩展来修改APNS发送的通知的内容。此扩展程序允许您在向用户显示之前下载图像/视频/ gif内容,或修改通知的内容,如标题,副标题,说明。但是,您将不被允许完全取消通知。
虽然如果您在Suite UserDefaults中保存通知设置(通过使用AppGroups),您可以访问Notification Service扩展中的这些设置,并且在从设置中读取后,您可以将通知的内容更改为一般通知并使用API将通知设置发送到外部服务器,并停止向客户端发送该特定通知。但是,是的,取消/停止特定通知的逻辑必须写在服务器上。
希望这会对你有所帮助。
答案 1 :(得分:0)
Apple通知小组有时(几乎每次)做出一些愚蠢的决定,例如:
通过操作按钮和 通知内容扩展,导致庞大而不必要的 系统上已注册类别标识符的笛卡尔乘积。
初始触发日期 或更高。
创建UNPushNotificationTrigger并丢失所有其他内容
UNNotificationTrigger用于推送的功能
通知。
...和无法使用Notification Service Extension取消推送通知就是一个很好的例子。为什么在使用Notification Service Extension向用户显示无效或损坏的推送通知之前,不要取消它?
对此没有其他有效的解释,但开发团队患有痴呆症或疾病。
但是您可以“ 拖动系统”!是的!
构建一个无效且为空的通知内容,然后将其发送回Notification Service,以消化和消亡。 在您的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())
}
}
接过,大哥。