1

我正在开发一个应用程序,通过FCM发送数据到我的服务器。据the Firebase Docs,我需要发送它看起来像这样将确认消息:Firebase云消息传递发送上游消息多次,但我发送确认

<message id=""> 
    <gcm xmlns="google:mobile:data"> 
    { 
     "to":"REGID", 
     "message_id":"m-123" 
     "message_type":"ack" 
    } 
    </gcm> 
</message> 

我的服务器收到我从我的Android应用程序发送的消息,我把这个Ack消息:

<message to="[email protected]" id="R88Ub-10"> 
    <gcm xmlns="google:mobile:data"> 
    { 
     "to":"dpDymtuUdEO-...-MRDQvLXMhfnEEUqEYZfs", 
     "message_id":"64cc690-...-227a0b7eb61", 
     "message_type":"ack" 
    } 
    </gcm> 
</message> 

(该“-...-”部分只是为了缩短/匿名代码)

但是,如果我重新启动我的服务器,我收到一些消息,我都准备好了,并已准备好发送ACK ...我没有测试“和“标识”在我的标签,但似乎没有任何工作。

我在ACK消息中使用的“to”是我要ACK的消息的“from”。

我在做什么错?我使用Smack作为XMPP库。

回答

0

在与Firebase团队联系后,我们发现将消息的TTL(生存时间)设置为'0'有所帮助。现在发送FCM消息的代码如下所示:

    fcm.send(new RemoteMessage.Builder(FCMConstants.SENDER_ID + "@gcm.googleapis.com") 
        .setMessageId(msgid) 
        .setData(data) 
        .setTtl(0) 
        .build());