如何在 MobileFirst Foundation 8 中使用 REST API 从 Node.js 发送推送通知?

Posted

技术标签:

【中文标题】如何在 MobileFirst Foundation 8 中使用 REST API 从 Node.js 发送推送通知?【英文标题】:How to send a push notification from Node.js using REST API in MobileFirst Foundation 8? 【发布时间】:2016-06-22 13:22:21 【问题描述】:

谁知道我在 Node.js 服务器上实现这个时做错了什么?

该参数有效,并且可以与我本地 Mac 上的海报一起使用。 Node.js 和 MFP 8 Beta 在 Mac 上本地运行。

这里是 server.js 文件的代码,步骤如下:

    准备标题 多功能一体机设置 创建帖子选项 为 MFP Push 创建 JSON 对象 使用 http 进行 POST 调用

    编写json推送数据

    app.post('/award', function(req, res)
    var notificationMessage = req.body.message;
        // prepare the header
        // MFP Settings
        var theAuthorization = "Bearer eyJhbGciOiJSUzI1NiIsImp…….Wg";
        var appname = 'com.ionicframework.checkapp';
        var http = require('http');
        var theHost = 'localhost'; // here only the domain name
        var thePort = 9080;
        var thePath = 'imfpush/v1/apps/' + appname + '/messages';
        var theMethode = 'POST';
        var postheaders = 
        'Authorization' : theAuthorization ,
        'Content-Type'  : 'application/json'
        ;
        // the post options
        var optionspost = 
        host : theHost,
        port : thePort,
        path : thePath,
        method : theMethode,
        headers : postheaders
        ;
        // create the JSON object for MFP Push
        var jsonObject = JSON.stringify("message":"alert" :notificationMessage);
        console.info('---> Options prepared:');
        console.info(optionspost);
        console.info('---> Do the POST call');
        // do the POST call using http
        var reqPost = http.request(optionspost, function(res) 
        console.log("---> statusCode: ", res.statusCode);
        console.log("---> headers: ", res.headers);
        res.on('data', function(d) 
         console.info('---> POST result:\n');
         process.stdout.write(d);
         console.info('\n\n---> POST completed');
        );
        );
        // write the json Push Data
        reqPost.write(jsonObject);
        reqPost.end();
        reqPost.on('error', function(e) 
        console.error(e);
        );
        res.end("OK");
      );
    

我得到 statusCode:400 这是控制台输出:

准备好的选项:

 host: 'localhost',
  port: 9080,
  path: 'imfpush/v1/apps/com.ionicframework.checkapp/messages',
  method: 'POST',
  headers: 
    'Content-Type': 'application/json',
     Authorization: 'Bearer eyJhbGciOiJSUzI1NiIsImp3ayI6......DjbgjqVz5JFVcT8i5k_JWg'  
---> Do the POST call
---> statusCode:  400
---> headers:   'content-length': '0',
  connection: 'Close',
  date: 'Wed, 22 Jun 2016 12:02:50 GMT' 

这些是我的信息来源: https://isolasoftware.it/2012/05/28/call-rest-api-with-node-js/ 和 https://mobilefirstplatform.ibmcloud.com/tutorials/en/foundation/8.0/notifications/sending-push-notifications/

【问题讨论】:

一些注意事项:您可以使用 Wireshark 来检查网络上发生的情况吗?查看响应的详细信息? - Bearer 令牌仅在一定时间内有效,您可以在 Postman 中检查它是否仍然有效? - 我注意到您的 json 正文没有“目标”收件人 - 谁应该收到此通知? 另外我认为path需要以/开头 【参考方案1】:

感谢@Idan 的文本验证和@Nathan 的评论。

我发现了问题,现在它可以工作了。 我更改了请求准备的顺序和代码中的一些更改。

    准备标题 多功能一体机设置 为 MFP Push 创建 JSON 对象 -> 上移 创建帖子选项 -> 下移 使用 http 进行 POST 调用 编写json推送数据

代码更改:

    在标题中插入 'Content-Length': Buffer.byteLength(jsonObject)。 在路径中添加斜杠 var thePath = '/imfpush/v1/apps/' + appname + '/messages';

【讨论】:

我创建了一个 Node.JS 模块,您可以自行承担重用的风险。看看这里的博客:mobilefirstplatform.ibmcloud.com/blog/2016/10/18/… 这是“Content-Length”,而不是“Centent-Length”

以上是关于如何在 MobileFirst Foundation 8 中使用 REST API 从 Node.js 发送推送通知?的主要内容,如果未能解决你的问题,请参考以下文章

MobileFirst 7.1 - 如何将 CLI 用于当前安装的带有 MobileFirst 服务器的 Liberty Core

如何在 MobileFirst 8 中实现服务器会话验证场景?

IBM MobileFirst 7.0 - 如何禁用自动更新

如何在 IBM Mobilefirst 中的 serverSessionTimeout 上触发方法

如何将真实设备注册到生产 MobileFirst 7.0 Server 并由其识别?

如何在 IBM MobileFirst Platform Operations Console 中处理版本禁用