当前位置: 首页 > 知识库问答 >
问题:

当应用程序在后台或被杀时,图像不显示在推送通知中?

姜鹏程
2023-03-14
import firebase from 'react-native-firebase';
import type { RemoteMessage } from 'react-native-firebase';

export default async message => {
    return Promise.resolve();
};

index.js中的代码

import bgMessaging from './bgMessaging';
AppRegistry.registerComponent(appName, () => App);
AppRegistry.registerHeadlessTask('RNFirebaseBackgroundMessage', () => bgMessaging);

bgmessaging.js中的代码负责应用程序在后台时的推送

为了在应用程序处于前台时带来图像,我使用了下面的代码:-

async createNotificationListeners() {
    /*
    * Triggered when a particular notification has been received in foreground
    * */
    this.notificationListener = firebase.notifications().onNotification((notification) => {
      const { title, body } = notification;
      console.log('onNotification:');
      const channel = new firebase.notifications.Android.Channel(
        'fcm_default_channel',
        'SAT VS ACT',
        firebase.notifications.Android.Importance.Max
      ).setDescription('A natural description of the channel');
        firebase.notifications().android.createChannel(channel);
        this.unsubscribeFromNotificationListener = firebase.notifications().onNotification((notification) => {
            if (Platform.OS === 'android') {
              console.log('background');
              const localNotification = new firebase.notifications.Notification({
                  sound: 'default',
                  show_in_foreground: true,
                })
                .setNotificationId(notification.notificationId)
                .setTitle(notification.title)
                .setSubtitle(notification.subtitle)
                .setBody(notification.body)
                .setData(notification.data)
                .android.setChannelId('fcm_default_channel') // e.g. the id you chose above
                //.android.setSmallIcon('ic_stat_notification') // create this icon in Android Studio
                .android.setColor('#000000') // you can set a color here
                .android.setBigPicture('https://picsum.photos/200/300')
                .android.setPriority(firebase.notifications.Android.Priority.High);

              firebase.notifications()
                .displayNotification(localNotification)
                .catch(err => console.error(err));

            } 
          });
    });


    /*
    * If your app is in background, you can listen for when a notification is clicked / tapped / opened as follows:
    * */
    this.notificationOpenedListener = firebase.notifications().onNotificationOpened((notificationOpen) => {
      const { title, body } = notificationOpen.notification;
      console.log('onNotificationOpened:');
      Alert.alert(title, body)
    });

    /*
    * If your app is closed, you can check if it was opened by a notification being clicked / tapped / opened as follows:
    * */
    const notificationOpen = await firebase.notifications().getInitialNotification();
    if (notificationOpen) {
      const { title, body } = notificationOpen.notification;
      console.log('getInitialNotification:');
      Alert.alert(title, body)
    }
    /*
    * Triggered for data only payload in foreground
    * */
    this.messageListener = firebase.messaging().onMessage((message) => {
      //process data message
      console.log("JSON.stringify:", JSON.stringify(message));
    });
  }
 {
    "to":"<FCM_TOKEN>",
"notification":
    {
        "title":"Working Good",
"body":"Exam vlo hbe na tor",
    },
"priority":"high"
}

共有1个答案

公良向阳
2023-03-14

如果有效负载包含通知键,则只有当推送消息传递给onMessageReceived处理程序时,应用程序才会处理推送消息本身。否则(所以它在后台,或者被杀死),FCM通过使用您放入通知键有效负载的值来处理显示通知。

如果您的有效负载只包含data键,您的应用程序将自己处理所有推送消息。它们都被传递给您的onMessageReceed处理程序。

参见此参考:https://stackoverflow.com/a/37876727/3037523

 类似资料:
  • 我正在尝试构建一个实时聊天应用程序。 我已经整合了https://pub.dev/packages/flutter_local_notifications用于推送通知的软件包,这是有效的。 我没有使用Firebase,我正在使用我自己的自定义后端,使用https://socket.io/进行实时聊天。 我想在用户发送聊天信息时接收推送通知。推送通知在应用程序处于前台或后台时起作用。但是,当我从进程

  • 我想为一个聊天应用程序实现FCM推送通知服务,我遵循Firebase文档中的步骤,当通知从Firebase控制台发送到我的设备时,我会得到通知。当我尝试使用http post to https://FCM.googleapis.com/FCM/send通过FCM将通知通过服务器端发送到设备时: 当应用程序处于活动状态并且我正在将此通知发送到我的设备时,Im在我的控制台日志中收到以下消息,所以我认为

  • 当应用程序处于前台时,我可以成功地接收带有图像的通知和数据消息。 当应用程序在后台/kill时,onMessageReceed(message)没有调用,所以我使用getIntent(),我得到了数据,但当应用程序在后台时,android os会使用系统托盘自动显示通知,但图像无法显示。 所以我的问题是用图像显示通知文本? 我使用django api发送通知和发送的数据如下所示 下面是我的onMe

  • 我的应用程序有推送通知(FCM)。当应用程序在前台运行时,我可以在onMessageReceived()函数中获取数据负载。当应用程序在后台运行或应用程序完全关闭时,不会调用onMessageReceived()函数。我的问题是,当app在后台或关闭时,是否可能获得数据有效载荷? 提前道谢!

  • 我有一个应用程序,它从一个基于php的服务器接收推送通知,推送通知是一个数据负载,其中包含一个url当点击时会自动在webview中打开。 我的主要活动

  • 大家早上好,我已经几个小时没有找到解决办法了。 我使用推送通知电容器插件(https://capacitor.ionicframework.com/docs/apis/push-notifications/)来收听从Firebase(通知和数据类型)向我推送通知,收听通知发生得非常好,即使在应用程序被杀死或在背景。 问题如下: 我想在收到通知时打开应用程序,如果它在后台或已被杀死。 > 如果在应用