未调用 Firebase Cloud Messaging onMessageSent
Firebase Cloud Messaging onMessageSent not called
我正在从 GCM 切换到 FCM。我只用它通过 FCM 向我的服务器发送消息。我扩展了 FirebaseMessagingService
来实现回调。例如,onSendError()
工作正常,但 onMessageSent()
永远不会执行......我不知道它是否相关,但我在消息时从我的服务器发送 'ack' 节已收到。
我的 FirebaseMessegingService class:
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>
遇到了同样的问题,this answer 的第二部分为我解决了这个问题。
基本上,您必须在发送的消息中设置 TTL。
类似于:
RemoteMessage myMessage = new RemoteMessage.Builder(SENDER_ID + "@gcm.googleapis.com").setMessageId(id).setData(data).setTtl(86400).build();
我正在从 GCM 切换到 FCM。我只用它通过 FCM 向我的服务器发送消息。我扩展了 FirebaseMessagingService
来实现回调。例如,onSendError()
工作正常,但 onMessageSent()
永远不会执行......我不知道它是否相关,但我在消息时从我的服务器发送 'ack' 节已收到。
我的 FirebaseMessegingService class:
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>
遇到了同样的问题,this answer 的第二部分为我解决了这个问题。 基本上,您必须在发送的消息中设置 TTL。 类似于:
RemoteMessage myMessage = new RemoteMessage.Builder(SENDER_ID + "@gcm.googleapis.com").setMessageId(id).setData(data).setTtl(86400).build();