【问题标题】:Custom Tizen push message自定义 Tizen 推送消息
【发布时间】:2021-01-10 16:41:48
【问题描述】:

我正在开发 Tizen Web 应用程序并使用了 Tizen 推送 API。 我成功地收到了来自 Tizen 推送服务器的警报消息,但是想如何自定义推送消息。 我使用了下面的代码

"badgeOption=INCREASE&badgeNumber=1&action=ALERT&alertMessage=Hi"

如何自定义推送消息?

【问题讨论】:

    标签: web-applications push-notification push tizen


    【解决方案1】:

    推送消息可能的内容在这里详细描述https://docs.tizen.org/application/native/guides/messaging/push-server/ 不幸的是,该指南适用于本机应用程序,但其中大部分内容应该很容易适用于所有配置文件。

    如果您想通过添加图标、更改声音或添加快速操作来自定义推送消息的外观,请参阅装饰推送通知部分。

    【讨论】:

    • 感谢您的回复。我应用了指南中描述的代码,但它在 Web 应用程序中不起作用。这是否意味着我必须将我的应用程序切换到本机应用程序?
    • 如果您指的是带有 app_control 函数的 C 代码,您必须使用 webapi 重新创建该函数。 !strcmp(a,b) 可以替换为 a!=b 并且 app_control_get_extra_data() 应替换为从 appcontorl.data[] docs.tizen.org/application/web/api/5.5/device_api/mobile/tizen/… 检索键值对。您可能需要启用接收应用程序控制请求,如本指南 docs.tizen.org/application/web/guides/app-management/… 中所述
    • 感谢您的回复。该链接对我帮助很大。但是有没有办法在 web 应用程序中添加图标或图像来推送通知消息?
    • 嗨,您能否具体说明一下“它在 Web 应用程序中不起作用”是什么意思?在docs.tizen.org/application/web/guides/messaging/push/… 部分中,您可以根据 Web 应用程序状态对所需行为进行描述:当应用程序关闭时,默认行为应与本机相同,当应用程序启动时,您可以处理 docs.tizen.org/application/web/api/5.5/device_api/mobile/tizen/…中的消息>
    • 我不确定我是否正确地记得使用推送通知。快速面板中的通知是自动创建的,如果是这样,您应该将您的图像放在shared/res/ 文件夹中,并将&imageTypeIcon=icon.png& 添加到您推送通知的消息字段中。
    【解决方案2】:

    我通过以下几点准备了两个使用推送服务器和 Galaxy Watch 的工作场景。

    在正在运行的 Web 应用程序中处理推送消息

    1. 我创建了非常简单的应用程序并应用了这些prerequisites
    2. 在我的应用程序中,我使用 test.jpg 文件创建了目录 shared/res(我的测试图标用于此场景)
    3. 我已经准备好用于向我的测试设备发送推送通知的基于 Web 的代码(请注意我用来添加自定义图标的消息):
    function sendMessage(registeredId, msg) {
        if (registeredId == undefined || msg == undefined || msg == "") {
            console.err("error registering application!");
            return;
        }
        var appId = "<<<your application package id>>>";
        var sec = "<<<your application's push server secret code>>>";
    
        var request = new XMLHttpRequest();
        var data = {
            "regID": registeredId,
            "requestID": "000001",
            "message": "action=ALERT&imageTypeIcon=test.jpg&alertMessage="+msg
        };
    
        var idToUrlMap = {
            "00": "https://useast.push.samsungosp.com:8090/spp/pns/api/push",
            "02": "https://apsoutheast.push.samsungosp.com:8090/spp/pns/api/push",
            "03": "https://euwest.push.samsungosp.com:8090/spp/pns/api/push",
            "04": "https://apnortheast.push.samsungosp.com:8090/spp/pns/api/push",
            "05": "https://apkorea.push.samsungosp.com:8090/spp/pns/api/push",
            "06": "https://apchina.push.samsungosp.com.cn:8090/spp/pns/api/push",
            "50": "https://useast.gateway.push.samsungosp.com:8090/spp/pns/api/push",
            "52": "https://apsoutheast.gateway.push.samsungosp.com:8090/spp/pns/api/push",
            "53": "https://euwest.gateway.push.samsungosp.com:8090/spp/pns/api/push",
            "54": "https://apnortheast.gateway.push.samsungosp.com:8090/spp/pns/api/push",
            "55": "https://apkorea.gateway.push.samsungosp.com:8090/spp/pns/api/push",
            "56": "https://apchina.gateway.push.samsungosp.com.cn:8090/spp/pns/api/push"
        };
    
        var url = idToUrlMap[registeredId.substring(0,2)];
        request.open("POST", url, true);
    
        request.setRequestHeader("Content-Type", "application/json");
        request.setRequestHeader("appID", appId);
        request.setRequestHeader("appSecret", sec);
        request.onreadystatechange = function() {
            if (request.readyState == 4 && request.status == 200) {
                console.log(request.responseText);
                console.log("Push Success");
            }
        };
        request.send(JSON.stringify(data));
    }
    
    1. 我已经在调试模式下启动了我的应用程序,并使用下面的代码注册了推送通知和发送消息的应用程序:
        function errorCallback(response) {
            console.log("The following error occurred: " + response.name);
        }
    
        function registerSuccessCallback(id) {
            console.log("Registration succeeded with id: " + id);
            sendMessage(id, message || "Test application message")
        }
    
        function stateChangeCallback(state) {
            console.log("The state is changed to: " + state);
    
            if (state == "UNREGISTERED") {
                tizen.push.register(registerSuccessCallback, errorCallback);
            } else {
                var id = tizen.push.getRegistrationId();
                sendMessage(id, message || "Test application message")
            }
        }
    
        function notificationCallback(notification) {
            console.log("A notification arrives: " + JSON.stringify(notification));
        }
    
        /* Connects to push service. */
        tizen.push.connect(stateChangeCallback, notificationCallback, errorCallback);
    
    1. 一段时间后,notificationCallback 会引发并显示带有接收数据的控制台日志:

    通知到达:{"alertMessage":"Test application message","appData":"","date":"2021-01-19T10:23:11.000Z","message":" action=ALERT&imageTypeIcon=test.jpg&alertMessage=测试应用程序消息","re​​questId":"000001","sender":"","sessionInfo":""}

    1. 基本场景到此结束 - 在这种情况下,您需要在应用程序中处理消息。

    后台场景 - 服务自动处理推送消息

    第二种情况是应用程序在后台并且推送消息由推送服务自动处理。第1-3点相同。之后,您需要将应用程序移至后台并继续第 4 点。 一段时间后,带有 test.jpg 图标的自定义通知应显示为系统通知。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      • 2018-04-20
      相关资源
      最近更新 更多