应用被杀死时不会触发onNotification()

时间:2018-08-23 17:39:21

标签: javascript react-native push-notification

我正在使用https://github.com/zo0r/react-native-push-notification来获取推送通知,并且当应用程序为ActiveBackground时,onNotification可以正常工作,但是我收到通知时杀死应用程序,我只会收到通知,并且不会触发onNotification,任何人都可以帮助我寻找解决方案,但是没有任何效果,当onNotification被触发时,我正在增加Android徽章计数,还有一种方法来增加Android徽章该应用程序被杀死了吗?

"react-native": "0.55.3",
"react-native-push-notification": "3.0.2"

我的代码

const options = {
        // (optional) Called when Token is generated (iOS and Android)
        onRegister: (token) => {
            this._TOKEN = token.token;
            this._addToPushChannels(channel);
        },

        onNotification: (notification) => {
            console.log(notification);
            if (notification['foreground']) {

            }

            //Notification from the background or when the app is killed
            if (!notification['foreground']) {
                if (Platform.OS !== 'ios' && Platform.Version < 26) {
                    this._messageCount++;
                    // console.log('this._messageCount ', this._messageCount);
                    let BadgeAndroid = require('react-native-android-badge');
                    BadgeAndroid.setBadge(this._messageCount);
                }
            }

            // required on iOS only (see fetchCompletionHandler docs: https://facebook.github.io/react-native/docs/pushnotificationios.html)
            notification.finish(PushNotificationIOS.FetchResult.NewData);

        },

        // ANDROID ONLY: GCM Sender ID (optional - not required for local notifications, but is need to receive remote push notifications)
        senderID: this._SENDER_ID,

        // IOS ONLY (optional): default: all - Permissions to register.
        permissions: {
            alert: true,
            badge: true,
            sound: true
        },

        // Should the initial notification be popped automatically
        // default: true
        popInitialNotification: true,

        /**
         * (optional) default: true
         * - Specified if permissions (ios) and token (android and ios) will requested or not,
         * - if not, you must call PushNotificationsHandler.requestPermissions() later
         */
        requestPermissions: true,

    };

    PushNotification.configure(options);

2 个答案:

答案 0 :(得分:3)

我不是很肯定,但是当我记得正确杀死(别名强制关闭)时,某个应用会禁用Android(GCM)推送通知网关中的onNotification功能(与iOS / APNS不同)。这是Android的一项功能,是有意创建的,因此愿意强迫关闭其应用程序的用户不会因通知而“烦恼”。重新启动电话或重新打开应用程序后,Xtify服务将重新启动并接收消息。

您可以做的是先期安排通知。例如,WhatsApp经常在强制关闭应用程序时提醒诸如:“您可能有新的通知”之类的通知,以提醒用户重新打开该应用程序。

参考文献:

答案 1 :(得分:0)

[1] https://stackoverflow.com/a/37845174/3607191

[2] https://stackoverflow.com/a/47857531/3607191

[3] https://github.com/dluksza/react-native-push-notification/commit/5bb95881c27b0068249c0f68bbf65e54a565fa3d#diff-54ebb78785872f03fd8e71ed2dfed620R18

您可以在JS端调用无头函数来更新批计数,这是您必须要做的。在这里,问题在于您必须编写一些Java代码。

  1. 如[2]中所述,您必须编写一个扩展FirebaseMessagingService的服务。
  2. 通过扩展HeadlessJsTaskService来调用无头JS函数来编写一项服务。请参阅[3]的RNPushNotificationActionService.java文件。
  3. 现在,如服务的onMessageReceived函数中的[1]中所述,请调用您在步骤2中编写的本机服务以调用无头JS函数。要知道如何做,请参考[3]的RNPushNotificationActionHandlerReceiver.java文件。