Reputation: 395
I'm switching from GCM to FCM. I only use it to send messages to my server trough FCM. I extended FirebaseMessagingService
to implement the callbacks. For example, onSendError()
works just fine, but onMessageSent()
is never executed... I don't know if it is relevant, but I send the 'ack' stanza from my server when the message is received.
My FirebaseMessegingService class:
public class FCMListenerService extends FirebaseMessagingService {
public FCMListenerService() {
super();
}
@Override
public void onDeletedMessages() {
Log.d("wouter", "onDeletedMessages: ");
super.onDeletedMessages();
}
@Override
public void onMessageSent(String msgID) {
Log.e("wouter", "##########onMessageSent: " + msgID );
super.onMessageSent(msgID);
Database database = new Database(this);
database.confirmFCMMessageSend(msgID);
database.closeDatabase();
}
@Override
public void onSendError(String msgID, Exception exception) {
Log.e("wouter", "onSendError ", exception );
super.onSendError(msgID, exception);
Database database = new Database(this);
database.eraseFCMMsgIDFromFGMMessageLog(msgID);
database.closeDatabase();
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
}
}
And the relevant part of my Manifest:
<service android:name=".FCM.FCMListenerService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
Upvotes: 4
Views: 2547
Reputation: 1286
Had the same problem and the second part of this answer fixed it for me. Basically, you have to set the TTL at the message you send. Something like:
RemoteMessage myMessage = new RemoteMessage.Builder(SENDER_ID + "@gcm.googleapis.com").setMessageId(id).setData(data).setTtl(86400).build();
Upvotes: 6