iOS 如果 "aps" 在 JSON 中通知,则推送通知不起作用

iOS push notifications doesn't work if "aps" informed in JSON

如果我关闭了我的应用程序并发送了这样的推送通知:

{
     "alert" : "Hello, world!",
     "sound" : "default"
}

我的应用程序正确接收推送通知。但是如果我发送这个:

{
    "aps" : {
        "alert" : "Hello, world!",
        "sound" : "default"
    }
}

我的应用程序从不显示通知。

如果我的应用程序打开,我会在委托中正确收到最后一条通知 didReceiveRemoteNotification userInfo: [NSObject : AnyObject]

为什么 iOS 8 不解析最后一条通知并将其显示为通知?

如果没有实际发送通知的代码,则完全不清楚问题出在哪里,因为如果您使用某些库或包装器,它可能会添加 aps 条目本身。现在,您应该像第一个示例一样继续发送通知,您还将在 didReceiveRemoteNotification userInfo: [NSObject : AnyObject]

中收到它们

对于Objective C。 看看你是否正确收到了 Json。对于第一个选项你已经使用了我认为这样的代码

(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)notification {


 }

这将收到您拥有的字典。但是第二个选项你已经发送了一个数组,它的第一个索引有一个字典所以用 NSArray 替换 NSDictionary 然后接收数组

第一个索引 & 像这样检索字典

 (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSArray *)notification {

......

  }

对于 Swift 此代码对我有效。

 func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
        println("Push Received")
        println(userInfo)
        println(userInfo["aps"])

        var state: UIApplicationState = application.applicationState

        if state == UIApplicationState.Active {

            println(userInfo)
            println(userInfo["aps"])

            var alert2 = UIAlertController(title: "Push", message: "Received", preferredStyle: UIAlertControllerStyle.Alert)
            alert2.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { action in

            }))



        }