GCM 无效的 JSON 缺少有效负载

     2023-02-24     262

关键词:

【中文标题】GCM 无效的 JSON 缺少有效负载【英文标题】:GCM Invalid JSON Missing Payload 【发布时间】:2015-05-22 09:49:07 【问题描述】:

我正在尝试使用 Python slimXMPP 通过 Google Cloud Messaging 发送消息。我尝试按照GCM docs 中的示例进行操作。但是,当我调用 send_command 时,我收到“InvalidJson:MissingPayload”错误响应 (400)。我在这里想念什么?以下是我使用的代码。

def random_id():
    return ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(8))

class GcmNotifier(sleekxmpp.ClientXMPP):

    def __init__(self, jid, password):
        super(GcmNotifier, self).__init__(jid, password)
        self.add_event_handler('message', self.on_message_received)

    def send_gcm_message(self, message):
        body = '<gcm xmlns:"google:mobile:data">%s</gcm>' % json.dumps(message)
        print(body)
        self.send_message(mto='', mbody=body)

    def on_message_received(self, message):
        print(message)

    def send_command(self, recipient):
        self.send_gcm_message( 
            'to': recipient,
            'message_id': random_id(),
            'data':
            
                'hello': 'world'
            
        )

xmpp = GcmNotifier(GCM_SENDER_ID + '@gcm.googleapis.com', GCM_API_KEY)
if xmpp.connect((GCM_SERVER, GCM_PORT), use_ssl=True):
    xmpp.process(block=False)

这是我收到的错误:

&lt;message to="REDACTED@gcm.googleapis.com/475DBA7C" type="error" xml:lang="en"&gt;&lt;body&gt;&amp;lt;gcm xmlns:&amp;quot;google:mobile:data&amp;quot;&amp;gt;&amp;quot;to&amp;quot;: &amp;quot;REDACTED&amp;quot;, &amp;quot;data&amp;quot;: &amp;quot;hello&amp;quot;: &amp;quot;world&amp;quot;, &amp;quot;message_id&amp;quot;: &amp;quot;ZGDZ9QTD&amp;quot;&amp;lt;/gcm&amp;gt;&lt;/body&gt;&lt;error code="400" type="modify"&gt;&lt;bad-request xmlns="urn:ietf:params:xml:ns:xmpp-stanzas" /&gt;&lt;text xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"&gt;InvalidJson : MissingPayload&lt;/text&gt;&lt;/error&gt;&lt;/message&gt;

【问题讨论】:

【参考方案1】:

事实证明,SleekXMPP 自动将我的消息包含在 &lt;body /&gt; 标记中,这不是 GCM 服务器预期的消息格式。我最终通过定义自己的节来解决问题,如下所示:

 class Gcm(ElementBase):
    namespace = 'google:mobile:data'
    name = 'gcm'
    plugin_attrib = 'gcm'
    interfaces = set('gcm')
    sub_interfaces = interfaces

class GcmMessage(ElementBase):
    namespace = ''
    name = 'message'
    interfaces = set('gcm')
    sub_interfaces = interfaces
    subitem = (Gcm,)

register_stanza_plugin(GcmMessage, Gcm)

然后像这样发送消息:

def send_gcm_message(self, message):
    msg = GcmMessage()
    msg['gcm'].xml.text = xml.sax.saxutils.escape(json.dumps(message, ensure_ascii=False))
    self.send(msg)

【讨论】:

【参考方案2】:

您收到的Missing Payload 错误是因为您没有将任何参数作为键和值格式传递给被识别为有效负载。

首先,您必须定义一个函数,您将在其中传递有效负载,然后在 GCm 服务器响应后将其转换回纯文本。

这是一个例子:

def plaintext_request(self, registration_id, data=None, collapse_key=None,
                          delay_while_idle=False, time_to_live=None, retries=5, dry_run=False):
if not registration_id:
        raise GCMMissingRegistrationException("Missing registration_id")

    payload = self.construct_payload(
        registration_id, data, collapse_key,
        delay_while_idle, time_to_live, False, dry_run
    )

如果您的代码中需要在一段时间后 ping 服务器,您可以使用指数回退机制。

详细代码实现请阅读以下document。

【讨论】:

这算不算有效载荷: 'to': recipient, 'message_id': random_id(), 'data': 'hello': 'world' 还是我的格式有问题?

Postman 中的 JSON 帖子有效负载无效

】Postman中的JSON帖子有效负载无效【英文标题】:InvalidJSONPostPayloadinPostMan【发布时间】:2018-08-2209:28:16【问题描述】:为什么这不是PostMan中有效的rawJSON(application/json)POST负载?["keyOne":"valueOne","keyTwo":"valueTwo"]【问题讨论】:【参... 查看详情

向 FCM API 发送请求时收到无效的 JSON 有效负载

】向FCMAPI发送请求时收到无效的JSON有效负载【英文标题】:InvalidJSONpayloadreceivedwhensendingrequesttoFCMAPI【发布时间】:2020-03-3004:37:27【问题描述】:我正在通过我的PHP应用程序向FCM发送请求,但它返回以下错误:"code":400,"message":"Inv... 查看详情

python google sheet API的无效JSON有效负载错误

】pythongooglesheetAPI的无效JSON有效负载错误【英文标题】:InvalidJSONPayloaderrorwithpythongooglesheetsAPI【发布时间】:2017-11-2603:46:26【问题描述】:我正在尝试使用googlesheetAPI将新行附加到现有的googlesheet。身份验证已经成功进行,并且... 查看详情

C# Google API - 收到无效的 JSON 有效负载

】C#GoogleAPI-收到无效的JSON有效负载【英文标题】:C#GoogleAPI-InvalidJSONpayloadreceived【发布时间】:2020-12-0114:11:30【问题描述】:我即将向googlesAPI创建一个请求,目的是更改gmail帐户的签名。这是触发错误的请求部分。如果我将“签... 查看详情

收到无效的 JSON 有效负载。未知名称 click_action

】收到无效的JSON有效负载。未知名称click_action【英文标题】:InvalidJSONpayloadreceived.Unknownnameclick_action【发布时间】:2018-08-0120:14:09【问题描述】:所以我目前正在开发PWA。我现在正在使用推送通知,并且我已经能够使用以下非常... 查看详情

Firebase 云消息传递 - 发布消息说 JSON 有效负载无效

】Firebase云消息传递-发布消息说JSON有效负载无效【英文标题】:FirebaseCloudMessaging-PostingMessageSaysInvalidJSONPayload【发布时间】:2019-06-1200:18:25【问题描述】:所以我使用jQueryAjax发布使用我必须从某人的node.js应用程序获取的不记名... 查看详情

wso2 无法保存 JSON 有效负载。找到无效的输入流

】wso2无法保存JSON有效负载。找到无效的输入流【英文标题】:wso2CouldnotsaveJSONpayload.Invalidinputstreamfound【发布时间】:2015-06-1914:11:28【问题描述】:这是我在WSO2中的第一个RESTAPI,在wso2中的顺序如下。<?xmlversion="1.0"encoding="UTF-8"... 查看详情

AFNetworking 序列化正斜杠使 JSON 有效负载无效

】AFNetworking序列化正斜杠使JSON有效负载无效【英文标题】:AFNetworkingserializesforwardslashmakingtheJSONpayloadinvalid【发布时间】:2015-10-0903:03:55【问题描述】:我正在使用AFNetworking2.0。在AFNetworking,AFHTTPRequestOperationManager对象有一个API... 查看详情

使用无效注册 ID 时 GCM 返回 BAD 请求

】使用无效注册ID时GCM返回BAD请求【英文标题】:GCMreturnsBADRequestwheninvalidregistrationidisused【发布时间】:2016-01-0807:42:33【问题描述】:我们目前在测试GCM服务时遇到了一个奇怪的问题。当我们发送一个有效的请求(带有一个有效... 查看详情

无效的捆绑结构 - 不包括有效负载目录

】无效的捆绑结构-不包括有效负载目录【英文标题】:InvalidBundleStructure-DoesnotincludeaPayloadDirectory【发布时间】:2014-09-0312:20:33【问题描述】:将二进制文件上传到iTunes后,我收到“无效二进制文件”和以下邮件:尊敬的开发者... 查看详情

尽管有效负载与成功的浏览器发起的请求相同,但通过 HTTPRequest 与 VBA 的“无效的多部分有效负载格式”

...成功的浏览器发起的请求相同,但通过HTTPRequest与VBA的“无效的多部分有效负载格式”【英文标题】:"Invalidmultipartpayloadformat"viaHTTPRequestwithVBAdespiteidenticalpayloadtosuccessfulbrowserinitiatedrequests【发布时间】:2022-01-2111:45:16【问... 查看详情

有效负载中指定的无效资源的 HTTP 状态代码

】有效负载中指定的无效资源的HTTP状态代码【英文标题】:HTTPStatuscodeforinvalidresourcespecifiedinpayload【发布时间】:2018-07-1920:14:16【问题描述】:我有一个REST请求(虽然不是完全REST)。输入数据通过HTTP负载作为XML接收,因此要读... 查看详情

IPA 文件结构无效 - 有效负载目录不得包含以下文件

】IPA文件结构无效-有效负载目录不得包含以下文件【英文标题】:InvalidIPAFileStructure-ThePayloaddirectorymustnotcontainthefollowingfile(s)【发布时间】:2014-06-2922:57:38【问题描述】:将我的应用上传到AppStore时,“无效二进制”的状态会发... 查看详情

Firebase FCM - 为啥会收到:有效负载错误,无效的“android”(或“apns”)属性

】FirebaseFCM-为啥会收到:有效负载错误,无效的“android”(或“apns”)属性【英文标题】:FirebaseFCM-WhyamIgetting:payloaderror,invalid\'android\'(or\'apns\')propertyFirebaseFCM-为什么会收到:有效负载错误,无效的“android”(或“apns”)属性... 查看详情

错误 ITMS-90596:“无效的捆绑包。有效负载的资产目录”

】错误ITMS-90596:“无效的捆绑包。有效负载的资产目录”【英文标题】:ERRORITMS-90596:"InvalidBundle.TheassetcatalogatPayload"【发布时间】:2016-12-0206:46:26【问题描述】:我正在使用xCode8.0并为我的项目构建一个ipa并使用ApplicationL... 查看详情

带有 mikrotik 的 Azure 站点到站点:缺少有效负载:ID_R

】带有mikrotik的Azure站点到站点:缺少有效负载:ID_R【英文标题】:AzureSite-to-sitewithmikrotik:Payloadmissing:ID_R【发布时间】:2019-09-1112:59:35【问题描述】:我正在尝试使用Mikrotik(RouterOS6.43.10)在Azure虚拟网络网关和本地站点之间建立站... 查看详情

Laravel DecryptException - 有效负载无效

】LaravelDecryptException-有效负载无效【英文标题】:LaravelDecryptException-Thepayloadisinvalid【发布时间】:2017-11-2222:43:17【问题描述】:我正在向我的LaravelAPI发送AJAX发布请求并收到此错误消息:compiled.php第13235行中的DecryptException:负载... 查看详情

通过 AWS SNS 将 JSON 数据负载发送到 FCM

...】:2017-03-2012:40:51【问题描述】:我正在尝试将具有data有效负载的json消息从AWSSNS发送到FCM。根据另一个线程,我从SNS发送的JSON消息应采用以下形式:"GCM":"\\"data\\":\\"message\\":\\"testmessage\\""在我的Andro 查看详情