如何让“onMessageReceived”触发 React Native 中的通知(HMS 推送工具包)?

Rad*_*ndi 3 android react-native huawei-mobile-services huawei-push-notification

我正在尝试读取通知的有效负载,但该事件不会触发。它适用于数据消息,但似乎没有注意到通知。

安卓清单:

        <service
            android:name="com.huawei.hms.push.react.RNHmsMessageService"
            android:exported="true">
            <intent-filter>
                <action android:name="com.huawei.push.action.MESSAGING_EVENT" />
            </intent-filter>
        </service>
        <receiver android:name="com.huawei.hms.push.react.RNReceiver"/>
        <meta-data
            android:name="push_kit_auto_init_enabled"
            android:value="true" />
Run Code Online (Sandbox Code Playgroud)

RNHms消息服务

public void onMessageReceived(RemoteMessage message) {
        Log.i(TAG, "onMessageReceived is called");
        if (message == null) {
            Log.e(TAG, "Received message entity is null!");
            return;
        }

        Log.i(TAG, "getCollapseKey: " + message.getCollapseKey()...

        RemoteMessage.Notification notification = message.getNotification();
        if (notification != null) {
            Log.i(TAG, "\n getImageUrl: " + notification.getImageUrl()...
        }

        Boolean judgeWhetherIn10s = false;
        // If the messages are not processed in 10 seconds, the app needs to use WorkManager for processing.
        if (judgeWhetherIn10s) {
            startWorkManagerJob(message);
        } else {
            // Process message within 10s
            processWithin10s(message);
        }
    }
Run Code Online (Sandbox Code Playgroud)

构建.gradle

implementation 'com.huawei.hms:push:4.0.4.301'
Run Code Online (Sandbox Code Playgroud)

我认为 message.getNotification() 始终为空,因此不会触发。

shi*_*ley 7

取消日期:

根据@Senthil Ssk的回答,我将答案分为两部分:

  1. 如果应用程序在前台运行,通知消息将透明传输到应用程序。当您的应用服务器发送通知消息时,该消息将被处理以供应用显示。这个功能可以通过设置message.android.notification.foreground_show字段来实现。
  2. 如果应用处于离线状态并且通过推送通知点击打开,则可以通过调用HmsPush.getInitialNotification来检索远程消息。请参阅文档

这是 HMS Core Push Kit 和 FCM 的区别。使用HMS Core Push Kit时,通知消息会默认投递到系统托盘,数据消息会默认投递到onMessageReceived方法。

此外,HMS Core Push Kit 提供了当您的应用程序在前台时向 onMessageReceived 方法发送通知消息的功能。解决方法是在使用HMS Core Push Kit server API发送消息时,可以在message > android > notification中设置foreground_show字段。如果此字段设置为 true 或留空,即使您的应用程序在前台运行,通知消息也会显示在系统托盘中。如果此字段设置为 false,则可以将消息传递到 onMessageReceived 方法。

这是有效载荷的示例:

{
    "message": {
        "notification": {
            "title": "message title",
            "body": "message body"
        },
        "android": {
            "notification": {
                "foreground_show": false,
                "click_action": {
                    "type": 1,
                    "action": "com.huawei.codelabpush.intent.action.test"
                }
            }
        },
        "token": [
            "pushtoken1"
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

更多详细信息,您可以参考UI 上的通知消息显示