当我在Android应用中使用Smack Library创建消息Stanza时,我仍然没有找到答案,说明为什么我没有从Firebase CCS收到ACK响应。之前我能够得到ACK响应,但由于我的机器崩溃,我所使用的代码丢失了。
我的连接工作正常,因为我收到了我在onMessageReceive方法上的FirebaseMessageService类上发送给自己的消息。
以下是我使用Smack API初始化Stanza Listener的方法:
filter = new StanzaFilter() {
@Override
public boolean accept(Stanza stanza) {
// Accept messages from GCM CCS.
if (stanza.hasExtension(GCM_ELEMENT_NAME, GCM_NAMESPACE)) {
return true;
}
// Reject messages that are not from GCM CCS.
return false;
}
};
stanza_listen = new StanzaListener() {
@Override
public void processPacket(Stanza packet) throws SmackException.NotConnectedException {
String string = ""+packet.getExtension(GCM_NAMESPACE);
String rayString = packet.getExtension(GCM_NAMESPACE).toXML().toString();
Log.d("extension","here you go; "+string+" xmlpacket:\n\n"+rayString+" other extension:\n\n"+packet.getExtension(GCM_ELEMENT_NAME,GCM_NAMESPACE));
JSONObject jason = null;
try {
jason = new JSONObject(string);
Log.d("myJson","here is JSon: "+jason);
} catch (JSONException e) {
Log.d("couldnt","couldnt get extension: "+e);
e.printStackTrace();
}
}
};
当我在我的日志上尝试Log.d时,调用packet.getExtension(GCM_NAMESPACE)我得到的内容如下所示 org.smack.DefaultExtensionElement@4215b 日志显示如下的空扩展名:
<gcm xmlns:google:mobile:data>
There's no JSON payload. Its empty
</gcm>
我打电话给 other_connection.addAsyncStanzaListener(stanza_listen,过滤器)开始 收听来自Firebase CCS的传入消息。
任何建议都将受到赞赏。
感谢