【问题标题】:Push notification not receiving in background iOS推送通知未在后台 iOS 中接收
【发布时间】:2016-04-29 04:58:16
【问题描述】:

我正在通过 GCM 在我的项目中进行推送通知。我的应用程序能够在前台接收通知,但不能在后台接收。

我在方法中收到一条消息

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject])  

当应用程序在前台,但我没有收到对该方法的任何调用

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

当应用程序处于后台模式时。

我在 Internet 上进行了长时间的搜索,然后才知道这是我收到的有效负载格式的问题。我收到的有效载荷看起来像

[通知:{“body”:“anything”,“title”:“any title”},优先级:高,content_available:true,至:kcF23gblKok..,collapse_key:do_not_collapse,来自:7812.. ..]

谁能建议我正确的payload格式?

【问题讨论】:

  • 如果推送在应用程序未运行时到达,则不执行任何代码。见stackoverflow.com/questions/11153631/…
  • 我的确切问题是当应用程序进入后台模式时我根本没有收到任何消息。在前台模式下,所有消息都成功接收。
  • 你开启后台模式功能了吗?
  • 试试这个链接它对你很有帮助stackoverflow.com/questions/31109514/…
  • 可能重复。在此thread 中解决了让 GCM 在 iOS 设备的后台工作的问题

标签: ios swift push-notification google-cloud-messaging


【解决方案1】:

使用此有效负载

{
    "aps": {
        "alert": "Hello World",
        "sound": "default"
        "content-available" :1
    }
}

启用内容可用:

1 个应用程序在前台

没有显示系统警报

application:didReceiveRemoteNotification:fetchCompletionHandler: 被调用

2 应用在后台

显示系统警报

application:didReceiveRemoteNotification:fetchCompletionHandler: 被调用

3App 处于暂停状态

应用状态更改为背景

显示系统警报

application:didReceiveRemoteNotification:fetchCompletionHandler: 被调用

4 应用程序未运行,因为被用户杀死

显示系统警报

不调用回调

【讨论】:

  • 谢谢,但在后台模式下仍然没有收到通知
  • 在您的后台模式中选中远程通知选项
【解决方案2】:

对于那些使用 Pushy 而不是 GSM 的用户,pushy 的完成处理程序可能不会在应用程序处于后台时被调用,因为:

即使您使用适当的键和值配置通知负载,例如:

{"to":"device***Token", "data": {"message": "Hello World!"}, "notification": {"title": "test", "body": "my message"}, "content_available": true}

并使用 Pushy 的控制台发送它,碰巧所有这些数据都放置在 pushy 的站点字段中:“通知数据”。因此,使用控制台我们发现无法发送:true,对于密钥:“content_available”,当应用程序处于后台时,这需要处理程序。

例如,您可以使用 Postman 来摆脱这种情况,将您的请求配置为:

  1. 类型:POST;
  2. 原始的;
  3. 网址:https://api.pushy.me/push?api_key=YOUR_APP_API_KEY;
  4. 内容类型:应用程序/json;

在正文中,您需要发送一些东西,例如:

 {"data":{"message": "Hello World!"},"tokens":["device***Token"],"content_available": true}

这样,您将把“content_available”键放在“aps”中而不是“data”中,这将在应用程序处于后台时调用您的处理程序。

【讨论】:

    【解决方案3】:

    以这种模式创建通知

    {
        "to": "ID",
        "notification": {
            "sound": "default",
            "title": "TITLE",
            "body": "BODY"
        },
        "priority": "high"
    }
    

    【讨论】:

    • 优先级应为 5 或 10(高)
    猜你喜欢
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 2015-02-14
    相关资源
    最近更新 更多