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

用于iOS的GCM下游消息JSON格式

胡夕
2023-03-14

我有一个swft/iOS9应用程序使用GCM的通知(WIP)。

申请授权可以。证书没问题。配置文件正常。一切都是在苹果的开发门户网站上配置的。

收到通知时调用此函数。

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
  GCMService.sharedInstance().appDidReceiveMessage(userInfo);
  print(userInfo.debugDescription)
}

问题

当服务器发送以下格式时,我只能在前面描述的函数中检测到通知,并且它“有效”,因为我有一个断点来检测它,否则什么也不会发生。

{
  "registration_ids" : ["regId"],
  "data" :
   {
      "to" : "regId",
      "notification" : 
      {
         "sound" : "default",
         "badge" : "2",
         "title" : "anyTitle",
         "body" : "anyMessage" 
      }
   }
}

负责Web服务的人为我做了这个,它复制了现有的Android(注册ID有用吗?)。

由于行为不是预期的,我们在GCM网站上尝试了以下方法:

{“to”:“regId”,“content_available”:true,“notification”:{“body”:“great match!”,“title”:“葡萄牙vs.丹麦”}

消息创建错误服务器端(GCM格式无效?)

我们错过了什么明显的东西吗?

请求是post和headers/url:

https://gcm-http.googleapis.com/gcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

编辑

添加工作和非工作的日志。

{  
   "registration_ids":[  
      "regId"
   ],
   "data":{  
      "to":"regId",
      "notification":{  
         "sound":"default",
         "badge":"2",
         "title":"testNotif",
         "body":"welcome in the Showcase Apple owner"
      }
   }
}

Exchange[
Id                  ID-FR-LIL-D00184-54996-1457452459441-0-5
ExchangePattern     InOnly
Headers             {Accept=text/html,application/xhtml+xml,application/xml;q=0.9,​*/*​;q=0.8, Accept-Encoding=gzip, deflate, Accept-Language=fr-fr, Authorization=key=AIzaSyAB_E2Op0GqShCmCmh_6ZxnwrFKoXOaIHU, beaconId=46589-47438, breadcrumbId=ID-talend2-48271-1456928459992-11-173, Cache-Control=max-age=0, CamelHttpMethod=POST, CamelHttpPath=, CamelHttpQuery=custLogin=alex@cgi.com&beaconId=46589-47438&regId=khjGINhshr4:APA91bGXuzrC3tU_jkBMZGCziqIwA9wKv1B-U4acxy68sQxvChJQvKb187o863CzKJyop1AwhP0BNo7I2SJJiWdrtnHFC42LxcBQzOo2Ah868xPde9TBFmj_FLVG8rhyH4Yl48zuQMCJ, CamelJmsDeliveryMode=2, CamelRedelivered=false, CamelRedeliveryCounter=0, CamelServletContextPath=/setBeaconEvent, Connection=keep-alive, Content-Type=application/json, custLogin=, dateEvent=20160308172331, deviceType=ios, DNT=1, Host=192.168.1.239, JMSCorrelationID=null, JMSDeliveryMode=2, JMSDestination=queue://Q.NOTIFIER, JMSExpiration=0, JMSMessageID=ID:FR-LIL-D00184-64570-1457442695117-1:52:1:1:1, JMSPriority=4, JMSRedelivered=false, JMSReplyTo=null, JMSTimestamp=1457454212345, JMSType=null, JMSXGroupID=null, JMSXUserID=null, regId=khjGINhshr4:APA91bGXuzrC3tU_jkBMZGCziqIwA9wKv1B-U4acxy68sQxvChJQvKb187o863CzKJyop1AwhP0BNo7I2SJJiWdrtnHFC42LxcBQzOo2Ah868xPde9TBFmj_FLVG8rhyH4Yl48zuQMCJ, User-Agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/601.4.4 (KHTML, like Gecko) Version/9.0.3 Safari/601.4.4}
BodyType            String
Body                {"registration_ids":["khjGINhshr4:APA91bGXuzrC3tU_jkBMZGCziqIwA9wKv1B-U4acxy68sQxvChJQvKb187o863CzKJyop1AwhP0BNo7I2SJJiWdrtnHFC42LxcBQzOo2Ah868xPde9TBFmj_FLVG8rhyH4Yl48zuQMCJ"],"to":"khjGINhshr4:APA91bGXuzrC3tU_jkBMZGCziqIwA9wKv1B-U4acxy68sQxvChJQvKb187o863CzKJyop1AwhP0BNo7I2SJJiWdrtnHFC42LxcBQzOo2Ah868xPde9TBFmj_FLVG8rhyH4Yl48zuQMCJ", "content_available": true, "notification":{"title": "testNotif","body": "welcome in the Showcase Apple owner" }}
]
Stacktrace
---------------------------------------------------------------------------------------------------------------------------------------
org.apache.camel.component.http.HttpOperationFailedException: HTTP operation failed invoking https://android.googleapis.com/gcm/send?custLogin=alex@cgi.com&beaconId=46589-47438&regId=khjGINhshr4:APA91bGXuzrC3tU_jkBMZGCziqIwA9wKv1B-U4acxy68sQxvChJQvKb187o863CzKJyop1AwhP0BNo7I2SJJiWdrtnHFC42LxcBQzOo2Ah868xPde9TBFmj_FLVG8rhyH4Yl48zuQMCJ with statusCode: 400

编辑2

多亏了亚瑟的建议,通知现在没有错误地离开服务器,我收到了。

目前的格式是:

{  
  "to":"regId",
  "data":{  
     "notification":{  
        "sound":"default",
        "badge":"2",
        "title":"testNotif",
        "body":"welcome in the Showcase Apple owner"
     }
  }
}

剩下的问题是,如果应用程序位于后台,didReceiveEmotentification fetchCompletionHandler不会收到它。当应用程序位于前台时,didReceiveMemotentification也会收到它,但如果我不显示它,则不会发生任何事情。

我应该打电话给什么东西来得到“系统风格”的通知?如果格式正确,是否已准备就绪?

我在网上找不到这方面的信息。

共有1个答案

史智志
2023-03-14

因此,当您使用您提到的第一种格式时,您会收到通知(应用程序在断点处停止)?我唯一的想法是,当你收到通知时,你的应用程序可能在前台?它应该在后台或关闭,否则你不会注意到任何东西。

 类似资料:
  • 我正在开发android GCM,以便我的应用程序向用户发送推送通知。我正在学习这个教程 http://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-and-mysql/ 但是在本教程中,它表明我们可以向单个设备发送推送通知。但我想一次向所有用户发送推送通知。

  • 问题内容: 我们最近为推送通知应用程序设置了GCM。服务器api在Node.js中,因此我正在使用节点模块node-gcm将通知推送到gcm服务器。 我们注意到有时数据包没有传递给最终用户。搜索后,我调整了一些设置,这些设置对提高可靠性有很大帮助 我将较旧的设置更改为以下新设置: delayWhileIdle标志从true变为false, 一天中时间而非“演示”的关键 timeToLive改为72

  • 我使用AES方法对从txt文件调用的sentance进行加密。我使用了GCM模式并创建了一个特定的密钥。一切都在工作(代码如下)。 我尝试实现解密过程,也就是说,我只有密钥(HexMyKeyvalue)和加密消息(HexEncryptedOriginalMessage value)并且我想对其进行解密。但问题是我错过了一些东西... 我写了下面的代码,但我有错误消息。 TypeError:decr

  • 更新:已弃用GCM,请使用FCM 如何将新的Google云消息集成到PHP后端?

  • 我为android编写应用程序,它将与GCM通信。我可以得到消息,但我想在屏幕上显示它,并得到错误。 有我的代码,我在行Activity act=(Activity)上下文中有问题; 我得到错误“这个类文件的JAR属于容器'Android dependencies',它不允许修改其条目上的源附件”

  • 我想通过javascript代码发送gcm消息。为此,我们需要发布一个json对象。 gcm文档:http://developer.android.com/google/gcm/adv.html.中给出了url和json对象格式 出于测试目的,我编写了一个完美运行的Java代码。但是爪哇脚本代码不起作用。如果有人有一些示例工作代码(gcm的爪哇脚本),请发布。 脚本代码 :