2016-05-26 3 views
4

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

Мой 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> 
+0

Сколько сообщений вы пытались отправить? Если вы отправили сообщение успешно, вы можете не получить обратный вызов в течение некоторого времени. Это поможет при работе от аккумулятора. Попробуйте отправить 10 или более восходящих сообщений, вы должны получить обратный вызов onMessageSent после примерно 10 сообщений. –

+0

Я много тестировал и отправлял кучу сообщений, так что это не так ... –

ответ

4

Если бы та же проблема, а вторая часть this answer фиксированной для меня. В принципе, вы должны установить TTL в отправляемом сообщении. Нечто вроде:

RemoteMessage myMessage = new RemoteMessage.Builder(SENDER_ID + "@gcm.googleapis.com").setMessageId(id).setData(data).setTtl(86400).build(); 
+0

Это работает! Благодаря! –

+1

Я сообщил об этой проблеме поддержке Firebase. Они признали это как ошибку, но не смогли предоставить график исправления. Поэтому, возможно, в какой-то момент в будущем это будет исправлено. Я думаю, проверять выпуски новых версий раз в то время не повредит. – Moritz

+0

Этот вопрос все еще существует в Firebase api. – Tasneem