【发布时间】:2015-11-20 20:24:46
【问题描述】:
握手完成并从 GCM xmpp 连接收到<success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>。
现在,我正在格式化并将 send-to-sync 消息从 APP 服务器发送到 GCM 以发送到移动设备,如下所示
ostringstream sync;
sync << "<message id=\"1234\">";
sync << "<gcm xmlns=\"google:mobile:data\">";
sync << " { ";
sync << "\"to\":\"eA_hcHITvwo:APA91bEB83Gci\",";
sync << " \"message_id\":\"1234\",";
sync << " \"time_to_live\":" << 10;
sync << " } ";
sync << "</gcm></message>";
string msg = sync.str();
sslSock_->write(msg.c_str(), msg.length());
std::string syncResp = readFromGcm(); // ack/nack
不幸的是,SSL 套接字正在关闭并且没有收到确认。任何想法,我在这里做错了什么?
我尝试发送的实际消息如下所示
Sending msg=<message id="150827111504042682"><gcm xmlns="google:mobile:data"> { "to":"eA_hcHITvwo:APA91bEB83Gci", "message_id":"150827111504042682", "time_to_live":10 } </gcm></message>
在收到来自 GCM 的成功消息后和发送任何节之前,我是否需要发送任何确认? 或者我需要在花括号和名称值对之后添加换行符吗?
消息流
Sent1: <stream:stream to='gcm.googleapis.com' version='1.0' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'>
Received1: <stream:stream from="gcm.googleapis.com" id="EBA37684C852364D" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client">
Received2: <stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>X-OAUTH2</mechanism><mechanism>X-GOOGLE-TOKEN</mechanism><mechanism>PLAIN</mechanism></mechanisms></stream:features>
Sent2: <auth mechanism='PLAIN' xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>ADM2NTU4MjFZVV0F1LVJV</auth>
Received3: <success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>
Sent3: <message id=""><gcm xmlns="google:mobile:data">{"to":"eA_hcHITvwo:APA91bEB83Gci","message_id":"150827161659237590","data":{"title":"Alert: mydata","text":"mydata refresh"},"time_to_live":10,"delay_while_idle":true,"delivery_receipt_requested":true}</gcm></message>
Received4: None. Socket closed
我刚刚注意到设备令牌 (eA_hcHITvwo:APA91bEB83Gci) 中有冒号?我是否需要将其转换为某种东西,以便 google xmpp 处理器不会与 json 冒号(“to”:“deviceToken”)混淆?
【问题讨论】:
标签: android c++ unix xmpp google-cloud-messaging