解析服务器无法发送推送通知?

5

我有一个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 || "{}"),
});

在Heroku网站上,PARSE_SERVER_PUSH(以及appId,masterKey和serverURL)是通过我的config vars进行配置的:

{ "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},但是仪表板上仍然显示推送失败。
编辑2:我还注意到,尽管选择了我为推送创建的特定受众群体,但 parse-server 总是报告我试图将其发送到默认的 "Everyone"。不确定是否提供了任何额外的提示。


@JakeT。我在Xcode中有com.parse.app作为我的bundle ID,最初文件路径中的空格是不正确的,但我已经修复了它,但这并没有解决问题。还有其他想法吗? - Runeaway3
@JakeT。顺便提一下,PARSER_SERVER_PUSH 中写的是 PARSER 而不是 PARSE,因为使用后者会导致仪表板无法打开。 - Runeaway3
你是否正确输入了index.js文件?因为它应该是process.env.PARSE_SERVER_PURSH,而不是PARSER_SERVER_PUSH,否则会导致失败并传递未定义的值。 - Jake T.
等一下,你是说你没有使用你设置的变量名?看着你的JSON,你是在引用你机器上的本地文件吗?证书文件需要被推送到服务器上,并且引用路径需要是服务器本地的,而不是你的开发机器。通常你可以使用__dirname/<path>/<to>/<cert>,它应该被配置为你项目的目录,使得引用本地化到你的项目而不是你的机器,以防它移动位置。 - Jake T.
如果您在配置文件中创建了名为PARSE_SERVER_PUSH的JSON对象,则应在index.js中使用env.PARSE_SERVER_PUSH。如果在运行时出现错误,那是因为它找不到该文件并失败了。如果您不使用相同的名称,则引用的是空值。这些环境变量不知道您想要自动设置什么,您需要通过名称显式设置它们。当您使用相同的名称时,会输出什么错误信息? - Jake T.
显示剩余9条评论
1个回答

2
在parse-server中不支持客户端推送,您可以在这里阅读更多相关信息:http://docs.parseplatform.org/parse-server/guide/#push-notifications。之所以不支持是因为您必须提供您的masterKey,而这只能在云代码中完成。因此,为了向您的用户推送通知,您必须创建一个云代码函数来执行推送,并在那里使用您的masterKey
由于云代码是NodeJS,因此您可以阅读parse-server JavaScript文档以了解如何操作。具体来说,您需要阅读以下部分:http://docs.parseplatform.org/js/guide/#push-notifications
但我强烈建议您阅读更多相关信息以便更好地理解其工作原理。
下面是我一个parse-server项目的一些代码片段:
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);
    });

如上述代码所示,我发送了有效荷载,这是需要发送的有效荷载(根据parse-server文档,因为此有效荷载必须适合于APNS/GCM)。where是parse-server的特性,可以让您筛选要向哪些设备发送推送通知。还请注意,我设置了userMasterKey: true,这意味着我将此推送作为parse-server管理员发送。
在创建云代码函数并向parse-server注册设备后,您可以执行CURL请求来触发云代码函数以进行测试。(端点是:https:/ /:/ / functions /)
希望对您有所帮助。

我应该在哪里设置云代码功能?在Xcode?在 Heroku 的配置变量中?另外,通过 CURL 请求如何执行它?通过终端?精确的语法是什么? - Runeaway3
此外,如果我能够使用我的主密钥创建推送,那么如何将某些用户操作(例如发送消息)链接到自动向接收者发送推送? - Runeaway3
嗨@AlekPiasecki。Cloud code是您parse-server后端安装的一部分。它是一个简单的main.js NodeJS文件,其中包含自定义函数和钩子,这些函数和钩子已集成在parse-server运行时中。我真的建议您在开始之前阅读文档。我写了一系列关于parse-server如何安装、运行和部署的博客,虽然它没有涵盖推送通知部分,但可以帮助您更好地理解:https://medium.com/google-cloud/from-zero-to-hero-run-parse-server-on-google-cloud-platform-part-0-introduction-54e7725c7ba0 - Ran Hassid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接