当前位置: 首页 > 知识库问答 >
问题:

GCM后台通知在Android上工作;不在iOS上

田马鲁
2023-03-14

我尝试了以下各种组合:

  • 在ap有效载荷中传递了一个空警报
  • 一个空的声音通过ap有效载荷
  • content_available:真
  • 内容可用: 1

优先级设置为高。我的目标功能在后台模式中启用了后台抓取和远程通知。

这是我的有效载荷的样子:

JsonObject jGcmData = new JsonObject();
jGcmData.addProperty("to", "/topics/global");
jGcmData.addProperty("priority", "high");

JsonObject jData = new JsonObject();
jData.addProperty("id", nObj.id);
jData.addProperty("title", nObj.title);
jData.addProperty("body", nObj.body);

JsonObject apsData = new JsonObject();
apsData.addProperty("content-available", "1");
apsData.addProperty("alert", "");

jGcmData.add("aps", apsData);
jGcmData.add("data", jData);

我一打开应用程序,通知就会进来,但不是在后台。

看起来是这样的:

[AnyHasable("body"): NTCIP示例单元:现在显示WALNUT TREE(Tue Nov15 14:01:30EST 2016), AnyHasable("id"): idhere, AnyHasable("collapse_key"):do_not_collapse, AnyHasable("from"): /topics/global, AnyHasable("title"):消息更改的通知]

My AppDelegate在收到前台和后台通知时起作用:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler handler: @escaping (UIBackgroundFetchResult) -> Void) {
        print("background notification received: \(userInfo)")
        GCMService.sharedInstance().appDidReceiveMessage(userInfo);
        NotificationCenter.default.post(name: NSNotification.Name(rawValue: messageKey), object: nil, userInfo: userInfo)
        handler(UIBackgroundFetchResult.noData);
    }

    func applicathtml" target="_blank">ion(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
        print("foreground notification received: \(userInfo)")
        GCMService.sharedInstance().appDidReceiveMessage(userInfo);
        NotificationCenter.default.post(name: NSNotification.Name(rawValue: messageKey), object: nil, userInfo: userInfo)
    }

我从未看到调用应用程序(DidReceiveEmotentification:::fetchCompletionHandler)。

请帮帮忙!

共有1个答案

姜俊逸
2023-03-14

原来我需要jGcmData.add(通知,jData);而不是jGcmData.add(数据,jData); APNS处理后台通知。做出这种改变,我现在看到应用程序(didReceive远程通知::: ftchCompletionHandler)被调用,除了改变我如何处理有效载荷之外,我相信我的后台通知问题已经解决!

(链接到SO问题,帮助我找到这个决议将很快添加!)

澄清:GCM接受有效负载描述,因为APNS希望它是后台通知的通知或数据

 类似资料:
  • 您可以看到,我的JSON中有两个块:一个通知块(在后台接收通知),一个数据块(在前台接收通知)。 我不明白为什么没有收到后台通知。我的怀疑是关于块的顺序(如果我把“数据”块放在“通知”块之前会有问题吗?)。 编辑:有关问题的更多信息。 编辑2: 当应用程序在后台时,不会收到通知,但当我打开应用程序时,会立即收到相同的通知(方法didReceiveRemoteNotification被激发)。

  • 当应用程序关闭时,我无法使通知工作。 我从FCM/GCM(python服务器)发送此消息: 所以curl是这样的: curl-头"授权:key=MYKEY"-头"内容类型:应用/json"https://fcm.googleapis.com/fcm/send-d'{"registration_ids":["APA91bEDB9dVf-..."],"collapse_key":空,"content_

  • 我需要帮助。Firebase通知在后台不工作。这是我的代码:

  • 我正在尝试将GCM用于IOS和Android客户端。当应用程序位于前台时,它似乎可以与IOS配合使用,但是,当应用程序位于后台时,通知中心不会收到消息,并且不会调用带有completionHandler的DidReceiveEmotentification。 我发现一个问题是从GCM到APN的消息格式错误。也就是说,它看起来就是这样: {“aps”:{“内容可用”:1},“数据id”:345} 顺

  • 问题内容: 我在iOS上的FCM通知有问题。 我收到成功通知时,我的应用程序是在前台(回调中被激发),但是当应用程序在后台(我看不出在iOS中的通知栏的任何东西)我没有收到通知。 因此,我认为问题在于FCM发送的消息格式。我的服务器发送到FCM的json格式如下: 如您所见,我的json中有两个块:一个通知块(用于在后台接收通知)和一个数据块(用于在前台接收通知)。 我不明白为什么没有收到后台通知

  • 最好的做法是什么,以通知所有的片断,在一些变化的后备栈? 我尝试使用和每个片段订阅事件,然后当发生更改时,主活动向所有订阅者发送post事件。 只有我取消订阅被破坏的片段。 我不喜欢这个解决方案,因为如果backbackback中有很多片段,它可能会同时占用大量的侦听器。 我的应用程序,有无限深入,从一个片段替换到另一个片段(并添加到backstack),您可以再次替换(并添加到backstack