Firebase Cloud Messaging onMessageSent未调用

时间:2016-05-26 21:43:13

标签: android firebase firebase-cloud-messaging

我正在从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>

1 个答案:

答案 0 :(得分:5)

有同样的问题,this answer的第二部分为我修复了它。 基本上,您必须在发送的消息中设置TTL。 类似的东西:

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