Firebase云消息传递onMessageSent未被调用

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

你尝试发送了多少条消息?onMessageSent的acks是批处理的,因此当您成功发送一条消息时,您可能不会立即收到回调。这是为了帮助节省电池寿命。尝试发送10条或更多的上行消息,大约在发送10条消息后,您应该会收到一个onMessageSent回调。 - Arthur Thompson
我进行了大量测试并发送了许多信息,所以不是这个问题... - Wouter Van der Schraelen
1个回答

6

我曾经遇到过同样的问题,参考这篇答案的第二部分解决了我的问题。 基本上,你需要在发送的消息中设置TTL(生存时间)。 例如:

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

1
我向Firebase支持团队报告了这个问题。他们承认这是一个错误,但无法提供修复的时间表。所以也许在未来的某个时候,这个问题会被解决。偶尔查看一下新版本的发布说明也不会有什么坏处,我想。 - Moritz
Firebase API仍存在此问题。 - Tasneem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接