如果在 JSON 中通知“aps”,iOS 推送通知将不起作用

Posted

技术标签:

【中文标题】如果在 JSON 中通知“aps”,iOS 推送通知将不起作用【英文标题】:iOS push notifications doesn't work if "aps" informed in JSON 【发布时间】:2015-05-05 09:23:59 【问题描述】:

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


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

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


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

我的应用从不显示通知。

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

问题在于第三方服务。他们在 JSON 推送通知中添加“aps:”。非常感谢【参考方案2】:

对于目标 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

            ))



        

【讨论】:

以上是关于如果在 JSON 中通知“aps”,iOS 推送通知将不起作用的主要内容,如果未能解决你的问题,请参考以下文章

iOS 本地推送

iOS 9-10 静默推送通知的 JSON 结构

如果我有免费的 iOS 开发人员配置文件,如何调试“推送通知”?

如何在 facebook 应用程序/Safari IOS 中通知应用程序用户已更改

iOS:无法解析来自 firebase 的推送通知

处理锁屏ios上的推送通知