如何在 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 上触发方法