自定义 Tizen 推送消息

Posted

技术标签:

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

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

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

如何自定义推送消息?

【问题讨论】:

【参考方案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 应用程序中处理推送消息

    我创建了非常简单的应用程序并应用了这些prerequisites 在我的应用程序中,我使用 test.jpg 文件创建了目录 shared/res(我的测试图标用于此场景) 我已经准备好用于向我的测试设备发送推送通知的基于 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));

    我已经在调试模式下启动了我的应用程序,并使用下面的代码注册了推送通知和发送消息的应用程序:
    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);
    一段时间后,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-3点相同。之后,您需要将应用程序移至后台并继续第 4 点。 一段时间后,带有 test.jpg 图标的自定义通知应显示为系统通知。

【讨论】:

以上是关于自定义 Tizen 推送消息的主要内容,如果未能解决你的问题,请参考以下文章

极光推送的自定义消息推送之后ios怎么使用

推送通知消息自定义?

pushplus推送加标题如何自定义?

巧用钉钉群机器人定时推送单图文消息

Actions-on-Google 自定义推送消息说明

AWS:收到推送消息时播放自定义声音