3

我尝试从通知中获取数据,当我的应用程序关闭并且应用程序只是在后台时。我收到通知,点击它,然后在 MainActivity(来自 android 项目)中我想获取数据。我可以在我的应用程序打开时通过 HmsMessageService 和 OnMessageReceived 执行此操作,没有问题。但我找不到例子,当应用程序关闭时如何做到这一点。任何帮助,请。Json中有我的通知:

        var jObject = new
        {
            message = new
            {
                notification = new
                {
                    title = titleNot,
                    body = bodyNot
                },
                android = new
                {
                    notification = new
                    {
                        foreground_show = false,
                        click_action = new
                        {
                            type = 3
                        }
                    }
                },
                token = new[] { token }
            }
        };
4

3 回答 3

2

当应用程序关闭时,您可以通过自定义获取参数click_action

在应用服务器上的消息正文中设置意图。

{
    "message": {
        "notification": {
            "title": "message title",
            "body": "message body"
        },
        "android": {
            "notification": {
                "click_action": {
                    "type": 1,
                    "intent": "intent://com.huawei.xahmspushdemo/deeplink?#Intent;scheme=pushscheme;launchFlags=0x4000000;i.age=180;S.name=abc;end"
                }
            }
        },
        "token": [
            "pushtoken1"
        ]
    }
}

这是文件

于 2021-12-16T02:57:46.227 回答
2

正如 Np0v0 提到的,您可以使用 click_action 来获取数据。还有另一种实现目标的方法。

  1. 在应用的 AndroidManifest.xml 文件中注册要启动的 Activity 类。

在此处输入图像描述

在此处输入图像描述

3.使用自定义活动类接收数据。

更多详细信息请参考https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides/andorid-basic-clickaction-0000001087554076#EN-US_TOPIC_0000001087554076__li7205195217309

于 2021-12-17T01:58:39.203 回答
1

click_action在不改变“类型”的情况下解决了问题。OnNewIntent只需在主要活动中覆盖() 方法,并添加GetIntentData带有一些逻辑的“”。

    private void GetIntentData(Bundle bNotification)
    {
        if (bNotification != null)
        {
            try
            {
                if (bNotification.ContainsKey(TITLE_KEY) && bNotification.ContainsKey(BODY_KEY))
                {
                    \\...
                }
            }
            catch
            {
            }
        }
    }
    protected override void OnNewIntent(Intent intent)
    {
        base.OnNewIntent(intent);
        GetIntentData(intent?.Extras);
    }

OnCreate() 我创建了包,如果它不为空,我加载应用程序:

        Bundle bNotification = Intent.Extras;
        if (bNotification == null || bNotification.IsEmpty)
        {
            LoadApplication(new App(...));
        }
        else
        {
            LoadApplication(new App(true, ...));
            GetIntentData(bNotification);
        }

https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/xamarin-customizingactions-0000001055648851

于 2021-12-17T04:43:54.607 回答