Parse.Cloud.afterSave для отправки push-уведомлений, не работающих с сервера Heroku

Я выполнил миграцию с Parse на Heroku, и все прошло гладко. На данный момент у меня не было облачного кода или push-уведомлений, настроенных на Parse. Когда я закончил миграцию, я начал реализовывать облачный код для обработки push-уведомлений каждый раз, когда я сохраняю новое текстовое сообщение, но метод 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;
          }
            });
});

Спасибо


person Alex Knows    schedule 22.03.2016    source источник


Ответы (1)


Поскольку мне не разрешено комментировать, мне придется поместить это в ответ, но просто относиться к нему как к комментарию:

Вы проверили, что сама функция на самом деле никогда не вызывается, например. добавив console.log в начало функции, или может быть, что сам push не работает (вы можете проверить это, отправив push через вызовы REST API)? Например, push в parse-server 2.2.0 не работает, мне пришлось откатиться до 1.6.0, чтобы он заработал.

Обходной путь может заключаться в создании функции облачного кода для отправки push-уведомления и явном вызове этой функции клиентами после того, как сообщение будет сохранено на сервере.

Также вы должны проверить это: https://github.com/ParsePlatform/parse-server/issues/301, так как вы используете Parse.User.current() в своем коде.

Кроме того, у меня сложилось впечатление, что parse-server в настоящее время не очень стабилен. Я сталкиваюсь со многими ошибками при использовании parse-server и Heroku, которых нет в приложении, работающем на parse.com.

person anti_gone    schedule 23.03.2016