【问题标题】:Parse.Cloud.afterSave for sending push notifications not working from Heroku serverParse.Cloud.afterSave 用于从 Heroku 服务器发送推送通知不起作用
【发布时间】:2016-03-24 00:51:48
【问题描述】:

我完成了从 Parse 到 Heroku 的迁移,一切都很顺利。在这一点上,我没有在 Parse 上设置任何云代码或推送通知。完成迁移后,我开始实现云代码来处理每次保存新文本消息时的推送通知,但是 Parse.Cloud.afterSave 方法没有运行。我知道 main.js 正在工作,因为如果我实施

Parse.Cloud.define('hello', function(req, res) {
res.success('Hi');
});

我在 Xcode 中的控制台返回“嗨”,但出于某种原因 Parse.Cloud.afterSave 什么也没做。我也知道我的 Parse.Cloud.afterSave 代码是正确的,因为它与我通过解析在另一个应用程序上使用的代码相同。我错过了什么?

在我的 index.js 文件中

var express = require('express');
var ParseServer = require('parse-server').ParseServer;
var path = require('path');

var databaseUri = process.env.DATABASE_URI || process.env.MONGOLAB_URI;

if (!databaseUri) {
console.log('DATABASE_URI not specified, falling back to localhost.');
}

var api = new ParseServer({
databaseURI: databaseUri || '',

cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
appId: process.env.APP_ID || '',
masterKey: process.env.MASTER_KEY || '',
fileKey: 'XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', // file key from parse
serverURL: process.env.SERVER_URL || '',

push: {
ios: {
pfx: '/Users/alexcruz/Desktop/Certificates.p12', // The filename of private key and certificate in PFX or PKCS12 format from disk
bundleId: 'com.daps.DapsPush', // The bundle identifier associate with your app
production: false // Specifies which environment to connect to: Production (if true) or Sandbox
}
}
});

var app = express();

// Serve static assets from the /public folder
app.use('/public', express.static(path.join(__dirname, '/public')));

// Serve the Parse API on the /parse URL prefix
var mountPath = process.env.PARSE_MOUNT || '/parse';
app.use(mountPath, api);

// Parse Server plays nicely with the rest of your web routes
app.get('/', function(req, res) {
res.status(200).send('Make sure to star the parse-server repo on GitHub!');
});

// There will be a test page available on the /test path of your server url
// Remove this before launching your app
app.get('/test', function(req, res) {
res.sendFile(path.join(__dirname, '/public/test.html'));
});

var port = process.env.PORT || 1337;
var httpServer = require('http').createServer(app);
httpServer.listen(port, function() {
console.log('parse-server-example running on port ' + port + '.');
});

// This will enable the Live Query real-time server
ParseServer.createLiveQueryServer(httpServer);

这是我的 main.js 文件

//Push Notification for messages that are received
Parse.Cloud.afterSave("MXTMessage", function(request) {
  var messageText = request.object.get('message');
  var usersReceived = request.object.get('receiver');
  var currentUser = Parse.User.current();
  var pushQuery = new Parse.Query(Parse.Installation);
      pushQuery.equalTo('user', usersReceived);
      pushQuery.notEqualTo('user', currentUser);
        Parse.Push.send({
            where: pushQuery, // Set our Installation query
            data: {
              alert: "New message: " + messageText
             }
            }, {
      success: function() {
      // Push was successful
          },
      error: function(error) {
        throw "Got an error " + error.code + " : " + error.message;
          }
            });
});

谢谢

【问题讨论】:

    标签: ios heroku push-notification migration parse-server


    【解决方案1】:

    由于我不允许发表评论,因此我将不得不将其放在答案中,但只需将其视为评论:

    您是否验证了函数本身实际上从未被调用,例如通过在函数的开头添加一个 console.log ,或者可能是推送本身不起作用(您可以通过 REST API 调用发送推送来检查)?例如,push 在 parse-server 2.2.0 中似乎被破坏了,我不得不降级到 1.6.0 才能让它工作。

    解决方法可能是创建一个用于发送推送的云代码函数,并在消息保存在服务器上后让客户端显式调用此函数。

    您还应该检查:https://github.com/ParsePlatform/parse-server/issues/301,因为您在代码中使用 Parse.User.current()。

    另外,我觉得 parse-server 目前还不是很稳定。我在使用 parse-server 和 Heroku 时遇到了许多在 parse.com 上运行的应用程序没有的错误。

    【讨论】:

      猜你喜欢
      • 2019-08-07
      • 1970-01-01
      • 2016-09-27
      • 2017-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-17
      • 1970-01-01
      相关资源
      最近更新 更多