Привет. Прохожу курс parse. Застрял на push notifications. Сервер работает нормально, данные отправляются/принимаются. Push в аккаунте на сайте apple настроен правильно. Если использовать Pusher и отправлять пуши напрямую используя сертификат, всё приходит и работает. Не получается настроить сам parse для отправки push. Судя по документации, способ как в курсе больше не поддерживается. Может кто-нибудь проходил курс недавно, поделитесь кодом, как отправляли уведомления и как у вас настроены методы в AppDelegate.
Не могу настроить Parse и Push Notifications
// Example express application adding the parse-server module to expose Pars// compatible API routes.
var express = require('express');
var ParseServer = require('parse-server').ParseServer;
var path = require('path');
var databaseUri = process.env.DATABASE_URI || process.env.MONGODB_URI;
if (!databaseUri) {
console.log('DATABASE_URI not specified, falling back to localhost.');
}
var api = new ParseServer({
databaseURI: databaseUri || 'mongodb://localhost:27017/parseApp',
cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
appId: process.env.APP_ID || 'id',
masterKey: process.env.MASTER_KEY || 'key', //Add your master key here. Keep it secret!
serverURL: process.env.SERVER_URL || 'http://localhost:1337/parse', // Don't forget to change to https if needed
push: {
ios: [
{
pfx: '/Certificates.p12',
bundleId: 'com.ayatsev.parse',
production: false
}
]
}
liveQuery: {
classNames: ["Posts", "Comments"] // List of classes to support for query subscriptions
}
});
// Client-keys like the javascript key or the .NET key are not necessary with parse-server
// If you wish you require them, you can set them as options in the initialization above:
// javascriptKey, restAPIKey, dotNetKey, clientKey
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/parseApp';
app.use(mountPath, api);
// Parse Server plays nicely with the rest of your web routes
app.get('/', function(req, res) {
res.status(200).send('I dream of being a website. Please star the parse-server repo on GitHub!');
});
В этом я, к сожалению, не силен, погугли команды для убунту(если у тебя она) для получения пути к файлу(How get file path ubuntu) и после этого уже перезапусти Parse Server и пробуй получить нотификацию. Удачи)
В общем. Путь нужно было вообще указать ка ‘certificate.p12’, положив его в каталог с index.js. Так же была пропущена запятая в одном месте. В итоге сертификат подхватился и можно отправить push из parsedashboard например, или с помощью curl в терминале. Но вопрос остался. Как отправить client push из кода приложения? Судя по документации, это теперь невозможно сделать из соображения безопасности. Теперь рекомендуют использовать cloud functions, которые, я так понимаю написаны на java. Кто-нибудь работал с cloud code, может есть какой-нибудь толковый туториал по этому делу? Java код вроде понятен, но не зная синтаксиса ничего не напишешь. Так же не понятно, где именно писать этот код
Насчет пути до сертификата: Не важно где он лежит, я его где только не клал и нужно было только правильно прописать путь, но то что у вас заработало - это отлично. Насчет клиенских пушей: попробуйте посмотреть здесь.
Написал функцию в main.js
Parse.Cloud.define("pushUser", function(req, res) {
var userQuery = new Parse.Query(Parse.User);
userQuery.equalTo("username", "b");
var pushQuery = new Parse.Query(Parse.Installation);
pushQuery.matchesQuery("user", userQuery);
Parse.Push.send({
where: pushQuery,
data: {
alert: "Hello world",
badge: "Increment"
sound: "default",
}
}, {success: function() {
console.log("Push Ok");
}, error: function(error) {
console.log("Push Error" + error.message);
}, useMasterKey: true});
});
В коде вызываю её так
PFCloud.callFunction(inBackground: "pushUser", withParameters: nil)
Выдаёт такую ошибку
Может кто знает js и может проверить ошибки в функции? Функцию писал по шаблонам документации на Parse
К сожалению именно в синтаксисе js не силен( Попробуйте найти телеграм чат по java script, думаю должен такой быть, в таких чатах быстро помогают.
Довёл всё в итоге до рабочего состояния. Были ошибки в коде java функции на сервере. Так же в этом туториале http://swiftbook.ru/tutorials/parse-server немного не правильно настроен index.js файл: сервер будет работать, а вот cloud-функции не будут исполняться, ругаясь в консоли на неверный формат JSON. В общем, как я писал выше, теперь отправка пушей из кода самого приложения не поддерживается из соображений безопасности. Только через cloud-функцию. Скрины содержимого index.js и main.js прикладываю ниже, может кому пригодится
Вызов функции:
PFCloud.callFunction(inBackground: "pushUser", withParameters: [ "message" : self.chatTextView.text, "username" : self.recipientName! ], block: { (any, error) in
if let error = error {
print(error.localizedDescription + "error error error")
}
})