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());