【问题标题】: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 的内部调用就会被执行。但同样,当应用程序未打开或手机被锁定时,什么也不会发生。

这里有什么想法/建议吗?

【问题讨论】:

    标签: ios swift parse-platform push-notification


    【解决方案1】:

    我假设您正确配置了所有证书和配置文件。因为正如您所说,当应用程序处于活动状态时您会收到响应(用您的话来说它已打开)

    但是当应用程序处于后台模式或您锁定设备时,您的应用程序的状态不是活动的。并且您没有收到推送通知的警报或声音。

    这是因为 PAYLOAD 包含有关系统如何提醒用户或处理您发送的数据的信息。

    对于每个通知,您需要编写一个 JSON 字典对象,其中包含另一个名为 "aps"

    的目录

    aps 包含以下内容:

    1. 警告消息(将显示给用户)[String OR 字典]

    2. 要标记的数字(显示在应用图标的右上角。)[数字]

    3. 要播放的声音(它播放声音)[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 文档阅读这可能会有所帮助:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多