Firebase Cloud Messaging onMessageSent未调用 [英] Firebase Cloud Messaging onMessageSent not called

查看:93
本文介绍了Firebase Cloud Messaging onMessageSent未调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在从GCM切换到FCM.我只使用它通过FCM将消息发送到服务器.我扩展了FirebaseMessagingService以实现回调.例如,onSendError()正常工作,但是onMessageSent()从未执行过……我不知道它是否相关,但是当收到消息时,我会从服务器发送'ack'节.

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.

我的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>

推荐答案

遇到相同的问题,并且是此答案的第二部分为我修复. 基本上,您必须在发送的消息上设置TTL. 像这样:

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

这篇关于Firebase Cloud Messaging onMessageSent未调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆