Firebase Cloud Messaging onMessageSent не вызывается

Я переключаюсь с GCM на FCM. Я использую его только для отправки сообщений на мой сервер через FCM. Я расширил FirebaseMessagingService для реализации обратных вызовов. Например, onSendError() работает просто отлично, но onMessageSent() никогда не выполняется... Я не знаю, имеет ли это значение, но я отправляю строфу 'ack' с моего сервера, когда сообщение получено.

Мой класс FirebaseMessegingService:

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

И соответствующая часть моего манифеста:

<service android:name=".FCM.FCMListenerService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>

person Wouter Van der Schraelen    schedule 26.05.2016    source источник
comment
Сколько сообщений вы пытались отправить? Подтверждения для onMessageSent группируются, поэтому, когда вы успешно отправляете сообщение, вы можете не получить обратный вызов в течение некоторого времени. Это поможет продлить срок службы батареи. Попробуйте отправить 10 или более восходящих сообщений, вы должны получить обратный вызов onMessageSent примерно после 10 сообщений.   -  person Arthur Thompson    schedule 07.06.2016
comment
Я много тестировал и отправил кучу сообщений, так что это не так...   -  person Wouter Van der Schraelen    schedule 09.06.2016


Ответы (1)


Была та же проблема, и вторая часть этого ответа исправила ее для меня. По сути, вы должны установить TTL в сообщении, которое вы отправляете. Что-то типа:

RemoteMessage myMessage = new RemoteMessage.Builder(SENDER_ID + "@gcm.googleapis.com").setMessageId(id).setData(data).setTtl(86400).build();
person Moritz    schedule 21.10.2016
comment
Я сообщил об этой проблеме в службу поддержки Firebase. Они признали это ошибкой, но не смогли указать сроки исправления. Так что, возможно, когда-нибудь в будущем это будет исправлено. Думаю, время от времени проверять примечания к выпуску новых версий не помешает. - person Moritz; 14.11.2016
comment
Эта проблема все еще существует в API Firebase. - person Tas; 15.03.2017