Parse-сервер: iOS Push-уведомление

Я пытаюсь сделать push-уведомление, я установил файлы .p12 в папку parse-server/certs. Вот мой код в моем index.js:

var api = new ParseServer({  
    databaseURI: process.env.DATABASE_URI || 'mongodb://localhost:27017/dev',  
    cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
    appId: 'xx',  
    masterKey: 'xx',
    fileKey: 'xx',  
    clientKey: 'xx',
    serverURL: 'xx',
    push: {
    ios: [
      {
        pdx: 'certs/ParsePushDevelopmentCertificate.p12', // Dev PFX or P12
        bundleId: 'bundleId',
        production: false // Dev
      }
    ]
  }
});

Я хотел бы отправить push-уведомление с помощью облачного кода. Итак, вот мой main.js:

Parse.Cloud.define("pushToAll", function (request, response) {
    var message = request.params.message;
    if (message != null && message !== "") {
        message = message.trim();
    } else {
     response.error("Must provide \"message\" in JSON data");
     return;
    }

    // Can see this at https://www.parse.com/apps/{APP_NAME}/cloud_code/log
    var logMessage = "Sending \"{0}\" to all installations".format(message);
    console.log(logMessage);

    var pushQuery = new Parse.Query(Parse.Installation);
    // pushQuery.containedIn("deviceType", ["ios", "android"]); // errors if no iOS certificate

    // Send push notification to query
    Parse.Push.send({
        where: pushQuery, // Set our installation query
        data: {
            alert: message
            }
        }, {
        success: function () {
            // Push was successful
            console.log("Message was sent successfully");
            response.success('true');
        },
        error: function (error) {
            response.error(error);
        }
   , useMasterKey: true});
});

И я называю это в своем проекте Xcode:

[PFCloud callFunctionInBackground:@"pushToAll" withParameters:@{@"message" : @"test"} block:^(id object, NSError *error) {
    if (!error) {
        NSLog(@"YES");
    } else {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Try Again !" message:@"Check your network" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];
    }
}];

Но это не работает [Error]: {"code":1,"message":"Internal server error."} (Code: 1, Version: 1.12.0)

На Parse.com у меня есть поле «Установка» в моей БД: Снимок экрана

У вас есть идеи?


person Vjardel    schedule 12.04.2016    source источник
comment
Сначала убедитесь, что вы можете подключиться к Parse-Server. Отправьте что-нибудь вверх или вытащите что-нибудь вниз, чтобы убедиться, что ваше приложение подключено правильно.   -  person Dan Levy    schedule 13.04.2016
comment
@DanL Да, это работает нормально: добавить/удалить объект, другой метод PFCloud работает нормально, но PFCloud для push-уведомлений не работает.   -  person Vjardel    schedule 13.04.2016
comment
Если вы установите в конфигурации и производственный сертификат, и сертификат разработки, вы будете получать по крайней мере одну ошибку каждый раз в консоли, потому что сервер пытается отправить его в обоих направлениях, и, очевидно, один из них всегда терпит неудачу, у вас должен быть отдельный сервер синтаксического анализа для разработки и производства в этом момент... Предоставьте несколько журналов, что происходит, когда запускается облачный код   -  person Mazel Tov    schedule 14.04.2016


Ответы (1)


Мой облачный код был неправильным, вот хороший код:

Parse.Cloud.define("pushToAll", function (request, response) {
    var message = request.params.message;
    console.log(message);
    if (message != null && message !== "") {
        message = message.trim();
    } else {
     response.error("Must provide \"message\" in JSON data");
     return;
    }

    // Can see this at https://www.parse.com/apps/{APP_NAME}/cloud_code/log
    // var logMessage = "Sending to all installations".format(message);
    // console.log(logMessage);

    var pushQuery = new Parse.Query(Parse.Installation);
    // pushQuery.containedIn("deviceType", ["ios", "android"]); // errors if no iOS certificate

    // Send push notification to query
    Parse.Push.send({
        where: pushQuery, // Set our installation query
        data: {
            "alert": message
            }
        }, {
        success: function () {
            // Push was successful
            console.log("Message was sent successfully");
            response.success('true');
        },
        error: function (error) {
            response.error(error);
        }
   , useMasterKey: true});
});
person Vjardel    schedule 14.04.2016
comment
@cricket_007 , Спасибо, но я изменил это, я улучшил это для своего случая - person Vjardel; 06.05.2016
comment
@ Viny76, можете ли вы поделиться своим синтаксисом cURL, чтобы сделать эту облачную отправку push-уведомлений? Я скопировал вашу функцию как есть, за исключением того, что вынул сообщение var и использовал простую строку. Мой cURL = curl -X POST -H X-Parse-Application-Id: myAppId -H Content-Type: application/json -d {} h t t p s://__myApp__.herokuapp.com/parse/functions/pushToAll. Также пробовал другой синтаксис, но получал ошибки. Последняя ошибка: Ошибка XMLHttpRequest: \Невозможно подключиться к Parse API\. Я могу получить доступ к облачному коду, поскольку пример кода по умолчанию возвращает {result:Hi}. Спасибо. - person rockhammer; 26.08.2016