可能覆盖iOS上的现有推送通知

可能覆盖iOS上的现有推送通知,ios,cordova,notifications,Ios,Cordova,Notifications,在Android中,如果您继续使用相同的通知id,则可以覆盖现有的推送通知 iOS在任何方面都可以做到这一点吗 似乎很难找到有关替换推送通知的任何信息,因为许多答案都使用静默推送通知并手动删除它们 我使用Cordova,因此在接收推送通知时,后台进程的选项有限 在iOS上,当应用程序处于后台时,我无法运行代码手动删除任何推送通知 否,在iOS中,您不能覆盖已安排的远程/本地通知 import UIKit import PushKit @UIApplicationMain class AppDe

在Android中,如果您继续使用相同的通知id,则可以覆盖现有的推送通知

iOS在任何方面都可以做到这一点吗

似乎很难找到有关替换推送通知的任何信息,因为许多答案都使用静默推送通知并手动删除它们

我使用Cordova,因此在接收推送通知时,后台进程的选项有限


在iOS上,当应用程序处于后台时,我无法运行代码手动删除任何推送通知

否,在iOS中,您不能覆盖已安排的远程/本地通知

import UIKit
import PushKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate,PKPushRegistryDelegate {

var window: UIWindow?
let notificationObject = UILocalNotification()

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {


    return true
}

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {



    notificationObject.fireDate = NSDate(timeIntervalSinceNow: 1)
    notificationObject.alertBody =  "Title"
    notificationObject.alertAction = "Open"
    notificationObject.soundName = "SoundFile.mp3"
    notificationObject.category = ""
    notificationObject.userInfo = "As per payload you receive"

    UIApplication.sharedApplication().scheduleLocalNotification(notificationObjectCall)


}
您必须安排另一个推送通知

通过维护一些标志或检查键/值。您必须在恢复新通知时删除以前的通知

import UIKit
import PushKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate,PKPushRegistryDelegate {

var window: UIWindow?
let notificationObject = UILocalNotification()

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {


    return true
}

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {



    notificationObject.fireDate = NSDate(timeIntervalSinceNow: 1)
    notificationObject.alertBody =  "Title"
    notificationObject.alertAction = "Open"
    notificationObject.soundName = "SoundFile.mp3"
    notificationObject.category = ""
    notificationObject.userInfo = "As per payload you receive"

    UIApplication.sharedApplication().scheduleLocalNotification(notificationObjectCall)


}
希望这有帮助

已更新

另一种方法是,一旦收到推送通知,根据推送通知负载中收到的信息

您可以安排本地通知

import UIKit
import PushKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate,PKPushRegistryDelegate {

var window: UIWindow?
let notificationObject = UILocalNotification()

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {


    return true
}

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {



    notificationObject.fireDate = NSDate(timeIntervalSinceNow: 1)
    notificationObject.alertBody =  "Title"
    notificationObject.alertAction = "Open"
    notificationObject.soundName = "SoundFile.mp3"
    notificationObject.category = ""
    notificationObject.userInfo = "As per payload you receive"

    UIApplication.sharedApplication().scheduleLocalNotification(notificationObjectCall)


}
Swift 4.2代码

import UIKit
import PushKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, PKPushRegistryDelegate{
    func pushRegistry(_ registry: PKPushRegistry, didUpdate pushCredentials: PKPushCredentials, for type: PKPushType) {
        <#code#>
    }


var window: UIWindow?

let notificationObject = UILocalNotification()


func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    return true
}

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {



    notificationObject.fireDate = NSDate(timeIntervalSinceNow: 1) as Date
    notificationObject.alertBody =  "Title"
    notificationObject.alertAction = "Open"
    notificationObject.soundName = "SoundFile.mp3"
    notificationObject.category = ""
    notificationObject.userInfo = "As per payload you receive"

    UIApplication.shared.scheduleLocalNotification(notificationObject)


}
导入UIKit
导入推送套件
@UIApplicationMain
类AppDelegate:UIResponder、UIApplicationDelegate、PKPushRegistryDelegate{
func pushRegistry(registry:PKPushRegistry,didUpdate pushCredentials:PKPushCredentials,for type:PKPushType){
}
变量窗口:UIWindow?
让notificationObject=UILocalNotification()
func应用程序(application:UIApplication,didFinishLaunchingWithOptions launchOptions:[UIApplication.launchOptions键:任意]?)->Bool{
//应用程序启动后自定义的覆盖点。
返回真值
}
func应用程序(应用程序:UIApplication,DidReceiveEmoteNotification用户信息:[NSObject:AnyObject],fetchCompletionHandler completionHandler:(UIBackgroundFetchResult)->Void){
notificationObject.fireDate=NSDate(TimeIntervalenceNow:1)作为日期
notificationObject.alertBody=“Title”
notificationObject.alertAction=“打开”
notificationObject.soundName=“SoundFile.mp3”
notificationObject.category=“”
notificationObject.userInfo=“根据您收到的有效负载”
UIApplication.shared.scheduleLocalNotification(notificationObject)
}
正如您在上面的代码中所看到的,本地通知对象是全局声明的。因此,每当您收到有效负载时,该对象将被一次又一次地覆盖

对于远程通知,您不能创建对象并覆盖它

我不太了解cordova,但在本机iOS中,通过这种方式,您可以使用本地通知进行覆盖

import UIKit
import PushKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate,PKPushRegistryDelegate {

var window: UIWindow?
let notificationObject = UILocalNotification()

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {


    return true
}

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {



    notificationObject.fireDate = NSDate(timeIntervalSinceNow: 1)
    notificationObject.alertBody =  "Title"
    notificationObject.alertAction = "Open"
    notificationObject.soundName = "SoundFile.mp3"
    notificationObject.category = ""
    notificationObject.userInfo = "As per payload you receive"

    UIApplication.sharedApplication().scheduleLocalNotification(notificationObjectCall)


}
希望您了解所使用的技术,并帮助您找到解决方案。

在iOS10(及更高版本)中,以及通过新的v2 apns协议(来自苹果),您现在可以使用apns折叠id,该id或多或少与Android的标签相同,以覆盖旧的NOTIF。更多信息请参见此处