解析服务器无法发送推送通知?
Posted
技术标签:
【中文标题】解析服务器无法发送推送通知?【英文标题】:Parse server failing to send push notifications? 【发布时间】:2018-01-18 04:25:52 【问题描述】:我有一个配置为发送推送通知的 Parse-Server(由 heroku 托管)。它在仪表板上似乎设置正确,但是当我实际发送一个时,它只是说推送是“已保存”,但是当我去检查它的状态时,它发送失败。这是设置的 index.js:
var api = new ParseServer(
databaseURI: databaseUri || 'mongodb://localhost:27017/dev',
cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
appId: process.env.APP_ID || 'myAppId',
masterKey: process.env.MASTER_KEY || '', //Add your master key here. Keep it $
serverURL: process.env.SERVER_URL || 'http://localhost:1337/parse', // Don't$
liveQuery:
classNames: ["Posts", "Comments"] // List of classes to support for query s$
,
push: JSON.parse(process.env.SERVER_PUSH || ""),
);
PARSE_SERVER_PUSH
(以及 appId、masterKey 和 serverURL)在 heroku 网站上的配置变量中配置如下:
"ios":
"pfx": "/Users/path/to/folder/Prod\Cert.p12 ",
"passphrase": "******",
"bundleId": "com.parse.app",
"production": true
我不确定为什么仪表板似乎已将服务器设置为正确发送推送通知,但它们都失败了?
编辑: 我还尝试通过 API 请求发送推送,如下所示:
curl -X POST \
-H "X-Parse-Application-Id: myAppsID" \
-H "X-Parse-Master-Key: ***************" \
-H "Content-Type: application/json" \
-d '
"where":
"deviceType": "$in": [ "ios", "android" ]
,
"data":
"title": "Ant-man",
"alert": "This is awesome. It is awesome."
' \
https://appName.herokuapp.com/parse/push
这在我的终端上返回了 "result":true,但它仍然显示在仪表板上推送失败。 Edit2:我还注意到,尽管选择了我为推送创建的特定受众,解析服务器总是报告我试图将其发送给默认的“每个人”。不确定这是否提供了任何额外的提示。
【问题讨论】:
你是在 xcode 中创建了你的 bundle id com.parse.app,还是你忘了换成你自己的?当然,您的路径中不应该有空格,尽管我假设您刚刚插入它来编辑您的实际路径? @JakeT。我在 Xcode 中确实有 com.parse.app 作为我的包 ID,它最初与文件路径中的间距不正确,但我修复了它并没有修正问题。还有其他想法吗? @JakeT。作为旁注,它在PARSER_SERVER_PUSH
中说 PARSER 而不是 PARSE,因为使用后者会导致仪表板无法打开
那你输入 index.js 了吗?因为它有process.env.PARSE_SERVER_PURSH
,而不是PARSER_SERVER_PUSH
,这会导致失败,因为它会传入undefined。
@JakeT。我已经试过了。将其更改为PARSER_SERVER_PUSH
会导致仪表板无法连接到服务器
【参考方案1】:
解析服务器不支持客户端推送,您可以在此处了解更多信息:
http://docs.parseplatform.org/parse-server/guide/#push-notifications
不支持它的原因是您必须提供您的 masterKey,而这只能在云代码中完成。因此,为了推送通知您的用户,您必须创建一个执行推送的云代码函数,并且您需要使用 masterKey
由于云代码是 NodeJS,您可以阅读 parse-server javascript 文档以了解如何操作。具体你需要阅读这部分:http://docs.parseplatform.org/js/guide/#push-notifications
但我强烈建议您阅读更多内容以了解其工作原理。
这是我的一个解析服务器项目中的一些代码 sn-ps:
Parse.Push.send(
data: oPayload,
where: oWhereQuery
,
useMasterKey: true
).then(function ()
console.log("Push notification sent to: " + aRecievers);
, function (err)
console.log("Failed to send push notification with error: " + err);
);
从上面的代码可以看出,我发送了 payload,这是需要发送的有效负载(根据 parse-server 文档,因为此有效负载必须适合 APNS/GCM)。 where 是解析服务器功能,它允许您过滤您希望向哪些设备发送推送通知。另请注意,我设置了 userMasterKey: true 这意味着我以解析服务器管理员的身份发送此推送
创建云代码函数并将设备注册到 parse-server 后,您可以执行 CURL 请求来触发云代码函数进行测试。 (端点为:https://:/functions/
希望对你有帮助。
【讨论】:
云码功能在哪里设置?在 Xcode 中?在heroku的配置变量中?另外我将如何通过 CURL 请求执行它?通过终端?确切的语法是什么? 另外...如果我可以使用我的主密钥创建推送...我如何链接某些用户操作(例如,发送消息)以自动发送推送到收件人? 嗨@AlekPiasecki。云代码是您的解析服务器后端安装的一部分。它是一个简单的 main.js NodeJS 文件,其中包含集成在解析服务器运行时中的自定义函数和钩子。我真的建议你在做之前阅读文档。我写了一系列关于 parse-server 如何安装、运行和部署的博客,虽然它没有涵盖推送通知部分,但它可以帮助您更好地理解它:medium.com/google-cloud/…以上是关于解析服务器无法发送推送通知?的主要内容,如果未能解决你的问题,请参考以下文章