Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当应用程序位于后台时,onMessageReceived方法不会触发_Android_Firebase_Firebase Cloud Messaging_Badge - Fatal编程技术网

Android 当应用程序位于后台时,onMessageReceived方法不会触发

Android 当应用程序位于后台时,onMessageReceived方法不会触发,android,firebase,firebase-cloud-messaging,badge,Android,Firebase,Firebase Cloud Messaging,Badge,实际上,我需要在应用程序中显示badge图标,但我不知道如何获取badge,以及为什么当应用程序处于后台或应用程序未运行时onMessageReceived不调用 public class Custom_FirebaseMessagingService extends FirebaseMessagingService { private static final String TAG = "FirebaseMsgService";

实际上,我需要在应用程序中显示badge图标,但我不知道如何获取badge,以及为什么当应用程序处于后台或应用程序未运行时onMessageReceived不调用

public class Custom_FirebaseMessagingService extends FirebaseMessagingService          {
            private static final String TAG = "FirebaseMsgService";
            String activityName;

            @Override
            public void onMessageReceived(RemoteMessage remoteMessage) {

                if (remoteMessage == null)
                    return;
                if (remoteMessage.getNotification() != null) {
                    Log.i(TAG, "Notification Body: " + remoteMessage.getNotification().getBody());
                }
                // Check if message contains a data payload.
                if (remoteMessage.getData().size() > 0) {
                    Log.i(TAG, "Data Payload: " + remoteMessage.getData().toString());
                    try{
                        //boolean from_bg = Boolean.parseBoolean(remoteMessage.getData().get("from_bg").toString());
                        Map<String, String> data = remoteMessage.getData();
                        boolean show_fg =  Boolean.parseBoolean(data.get("show_fg"));
                        ..... 
公共类自定义\u FirebaseMessagingService扩展FirebaseMessagingService{
私有静态最终字符串TAG=“FirebaseMsgService”;
字符串activityName;
@凌驾
收到消息时公共无效(RemoteMessage RemoteMessage){
if(remoteMessage==null)
返回;
if(remoteMessage.getNotification()!=null){
Log.i(标记,“通知正文:”+remoteMessage.getNotification().getBody());
}
//检查消息是否包含数据有效负载。
如果(remoteMessage.getData().size()>0){
Log.i(标记,“数据负载:”+remoteMessage.getData().toString());
试一试{
//boolean from_bg=boolean.parseBoolean(remoteMessage.getData().get(“from_bg”).toString());
Map data=remoteMessage.getData();
boolean show_fg=boolean.parseBoolean(data.get(“show_fg”));
..... 

有两种类型的FCM

通知
消息:仅当您的应用程序位于前台时,发送此消息类型的有效负载才会触发
onMessageReceived()

数据
消息:仅发送此特定消息类型的有效负载将触发
onMessageReceived()
无论您的应用程序是否位于前台/后台


参考:

将服务添加到
AndroidManifest.xml
。同时确保令牌未过期

<service android:name=".FirebaseMessagingService">
 <intent-filter>
    <action android:name="com.google.firebase.MESSAGING_EVENT"/>
 </intent-filter>
</service>

如果您希望在后台接收消息,则必须使用有效负载数据,如中所述,您能告诉您正在使用的设备吗?可能的重复数据将在MessageReceived所有时间(应用程序前台或后台)调用,您只需接收“数据”有效负载(而不是“数据”和“通知”有效负载)。如果您同时发送“数据”和“通知”有效负载,当应用程序位于前台时,此时将调用“onMessageReceived”。me同时发送“数据”和“通知”"有效负载和onMessageReceived在前台,但不是后台,你知道在应用程序图标中显示徽章吗?你误用了一个术语。没有显示消息这类东西,它应该是
通知
消息。描述很接近,但一点也不准确。请修改它们,使其更精确地显示在电子文档或更好的文档,请参阅completely@AL.谢谢你的宝贵建议。没问题。干杯!@AL你知道在facebook这样的应用图标上展示徽章吗?@Avi。我已经做了:
@Override
public void onTokenRefresh() {
    // Get updated InstanceID token.
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    Log.d(TAG, "Refreshed token: " + refreshedToken);

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // Instance ID token to your app server.
    sendRegistrationToServer(refreshedToken);
}