【问题标题】:SleekXmpp custom stanza to parse Google's CCS xmpp responseSleekXmpp 自定义节来解析 Google 的 CCS xmpp 响应
【发布时间】:2015-05-25 09:13:24
【问题描述】:

我正在尝试用 python 编写一个简单的 XMPP 推送通知 3rd 方服务器,并且我正在使用 SleekXMPP。

当我的应用发送上游消息时,我会收到类似

的消息
<message id="3" type="error" to="123456789@gcm.googleapis.com/ABC">
  <gcm xmlns="google:mobile:data">
     { Json Arrays }
  </gcm>
  <error code="400" type="modify">
    <bad-request xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
    <text xmlns="urn:ietf:params:xml:ns:xmpp-stanzas">
      InvalidJson: JSON_PARSING_ERROR : Missing Required Field: message_id\n
    </text>
  </error>
</message>

但是阅读 SleekXMPP 的文档对于理解我应该使用什么来获取此标签 &lt;gcm xmlns="google:mobile:data"&gt; 的内容并将其更改为 json 以便我可以进一步使用它并没有太大帮助。

我的理解是我必须实现我的自定义节模板,但是我写的,它总是返回空:

class GCMMessage(ElementBase):
    name = 'gcm'
    namespace = 'google:mobile:data'
    plugin_attrib = 'gcm'
    interfaces = {'to', 'message_id',
                  'data', 'time_to_live',
                  'delay_if_idle',
                  'delivery_receipt_requested'
                  }
    sub_interfaces = interfaces

结果是:

GCMMessage(xml=msg.find('{google:mobile:data}gcm')).keys() 

返回

['to', 'time_to_live', 'delay_if_idle', 'delivery_receipt_requested', 'data', 'message_id', u'lang']

而这些键的所有值都是 ""。

GCMMesage(xml=msg).get('to) = None

我什至尝试使用:

GCMMessage(xml=msg.xml.getchildren()[0])

但话又说回来,keys() 返回我的推送通知键,但 get 返回 None。

**我应该如何使用定义我的自定义节以及我应该如何使用它们?由于它没有命名空间,我怎样才能得到错误节? **

非常感谢任何帮助。
提前致谢。

【问题讨论】:

    标签: android python push-notification xmpp google-cloud-messaging


    【解决方案1】:
    1. 如果您只想从 gcm 元素中获取 JSON 对象,则不需要子类化 Message
    json_data = msg.find('{google:mobile:data}gcm').text    
    

    将返回您想要的 JSON,您可以直接使用它:

    import json 
    jsonobject = json.loads(json_data)
    
    1. 在您的GCMMessage 中,您已经定义了接口,但忘记实现如何获取值。您需要为每个所需字段添加至少 getXXX,例如:
    # don't forget to read jsonobject in class initialization
    def getData(self):  
        return jsonobject["data"]
    

    然后它将按预期工作:

    GCMMessage(xml=msg.xml)["data"] # will return value from json data field
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 2023-03-15
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-09
      相关资源
      最近更新 更多