未调用 HmsMessageService onMessageReceived

Posted

技术标签:

【中文标题】未调用 HmsMessageService onMessageReceived【英文标题】:HmsMessageService onMessageReceived not called 【发布时间】:2021-02-20 11:23:26 【问题描述】:

我实现了Huawei Push Kit。 onNewToken 在应用启动后调用。我想使用 onMessageReceived。

当我向客户端发送推送通知时,推送通知出现在 android 上,但未触发 onMessageReceived。

我在 Android Manifest 中添加了以下代码

    <service
        android:name=".HmsMessageSrv"
        android:enabled="true" android:exported="false">
        <intent-filter>
            <action android:name="com.huawei.push.action.MESSAGING_EVENT" />
        </intent-filter>
    </service>

    <meta-data
        android:name="push_kit_auto_init_enabled"
        android:value="true" />

我的简单类是;

public class HmsMessageSrv extends HmsMessageService 

    @Override
    public void onNewToken(String s) 
        super.onNewToken(s);
        Log.i("HmsMessageService", s);
    

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) 
        super.onMessageReceived(remoteMessage);
        Log.i("HmsMessageService", "onMessageReceived");
    

收到推送通知时如何触发onMessageReceived函数。

【问题讨论】:

【参考方案1】:

onMessageReceived函数只用于接收数据报文。因此,推送通知不会触发 onMessageRecevied。您可以使用数据消息并自己创建通知。您可以通过this链接访问示例代码。

【讨论】:

【参考方案2】:

当您的应用在后台运行或被终止时,您可以从推送通知中获取通知消息。为此,您需要在通知正文中将 foreground_show 设置为 false。

如果此值为 true 或未设置,则您的消息由 NC 显示。如果此值为 false,则您的消息将传输到您的应用程序,而不是由 NC 显示。

更多详情请参考:https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides-V5/android-fgrd-show-0000001050040126-V5

【讨论】:

【参考方案3】:

直接显示通知消息,因此不会调用onMessageReceived方法。

只有在收到数据消息时才调用该方法。详情请参考Receiving Data Messages。但是,在您的应用进程被杀死后,数据消息无法到达您的应用。要在你的应用进程被杀死后显示通知消息,或者在你的应用运行时通过onMessageReceived接收数据消息,请参考Notification Message Display on UI。

【讨论】:

以上是关于未调用 HmsMessageService onMessageReceived的主要内容,如果未能解决你的问题,请参考以下文章

M1 mac 上的 android studio 和 manager 错误(未安装模拟器)

onDraw( ) 和 dispatchDraw( ) 的区别

如何在android中获取标签内容的高度和宽度?

未完全加载单元格时未调用 didSelectItemAtIndexPath

数据流 - 未调用函数 - 错误 - 未定义名称

chrome 插件