Parse 和 Swift:didReceiveRemoteNotification 未收到带有“aps”的推送通知:“content-available”:1
Posted
技术标签:
【中文标题】Parse 和 Swift:didReceiveRemoteNotification 未收到带有“aps”的推送通知:“content-available”:1【英文标题】:Parse and Swift: Push notifications with "aps": "content-available": 1 not being received by didReceiveRemoteNotificationParse 和 Swift:didReceiveRemoteNotification 未收到带有“aps”的推送通知:“content-available”:1 【发布时间】:2014-11-03 00:12:37 【问题描述】:我发出这样的 Parse REST API 请求
curl -X POST \
-H "X-Parse-Application-Id: key-here" \
-H "X-Parse-REST-API-Key: key-here" \
-H "Content-Type: application/json" \
-d '
"where":
"deviceToken": "token-here",
"deviceType": "ios"
,
"data":
"aps": "content-available": "1"
' \
https://api.parse.com/1/push
现在,当应用打开时,设备会读取它。但是当我锁定设备并再次发出上述 curl 请求时,没有任何反应。下面是我的didReceiveRemoteNotification
函数。
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void)
println("received notification")
var remoteServer = RemoteServer()
remoteServer.sendDataToServer (success) -> () in
completionHandler(UIBackgroundFetchResult.NewData)
只要我打开应用程序,didReceiveRemoteNotification
的内部调用就会被执行。但同样,当应用程序未打开或手机被锁定时,什么也不会发生。
这里有什么想法/建议吗?
【问题讨论】:
【参考方案1】:我假设您正确配置了所有证书和配置文件。因为正如您所说,当应用程序处于活动状态时您会收到响应(用您的话来说它已打开)
但是当应用程序处于后台模式或您锁定设备时,您的应用程序的状态不是活动的。并且您没有收到推送通知的警报或声音。
这是因为 PAYLOAD 包含有关系统如何提醒用户或处理您发送的数据的信息。
对于每个通知,您需要编写一个 JSON 字典对象,其中包含另一个名为 "aps"
的目录aps 包含以下内容:
警告消息(将显示给用户)[String OR 字典]
要标记的数字(显示在应用图标的右上角。)[数字]
要播放的声音(它播放声音)[String] 这里你需要在应用程序包中传递声音文件的名称
如果您想在设备通知面板或锁定屏幕上显示警报或横幅,则您的 aps 必须根据其类型具有适当的值。
还有一件事
"aps": "content-available": "1"
您的 aps 包含上述 JSON。
content-available 此属性值为 1 表示:远程通知工作为 SILENT NOTIFICATION 而当 SILENT NOTIFICATION 类型的通知到达 iOS 激活您的应用程序 后台模式,您可以从中完成后台进度。 (例如:下载数据或其他过程)
这里我提供了 aps 字典的示例。
一个 aps JSON 示例,其中包括“警报、声音和徽章”ia,如下所示:
"aps" :
"alert" : "This a alert",
"badge" : 1,
"sound" : "bingbong.aiff"
并确保您在 AppDelegate 类中正确配置了远程通知。
适用于 iOS7 及更早版本(快速)
var types = UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound | UIRemoteNotificationType.Alert
UIApplication.sharedApplication().registerForRemoteNotificationTypes(types)
对于 iOS8
var notiType = UIUserNotificationType.Badge | UIUserNotificationType.Sound | UIUserNotificationType.Alert
var notiSettings:UIUserNotificationSettings
notiSettings = UIUserNotificationSettings(forTypes:notiType, categories: nil)
UIApplication.sharedApplication().registerUserNotificationSettings(notiSettings)
UIApplication.sharedApplication().registerForRemoteNotifications()
希望对你有帮助。
【讨论】:
是的,我正在传递相同的 json 集。虽然,当我发送声音警报时。同样达到很好。但是当应用程序不活动时,didReceiveRemoteNotification
永远不会被调用。
didReceiveRemoteNotification 方法会在应用激活状态下推送通知到达时被调用。
如果您的应用处于 UIApplicationStateBackground 或 UIApplicationStateInactive 并且用户从通知中心打开了推送通知,则会调用 didReceiveRemoteNotification。
但根据文档,它应该在 bg 中调用,对吗? developer.apple.com/library/ios/documentation/uikit/reference/…:
按照 iOS8 文档阅读这可能会有所帮助:以上是关于Parse 和 Swift:didReceiveRemoteNotification 未收到带有“aps”的推送通知:“content-available”:1的主要内容,如果未能解决你的问题,请参考以下文章
如何为经典的帖子和评论模型构建 Parse 数据模型? (使用 iOS、Swift、Parse)
Swift 和 Parse - PFQueryTableViewController loadingViewEnabled