Отправить push-уведомление на одно устройство через сервер синтаксического анализа heroku

Я использую приложение сервера синтаксического анализа heroku и пытаюсь отправить push-уведомление на одно устройство на основе пользовательских данных, доступных в mongodb. Я использую облачную функцию, показанную ниже:

Parse.Cloud.define("iosPush", function(request, response) {

var user = request.user;
var params = request.params;
var someKey = params.someKey
var data = params.data

var pushQuery = new Parse.Query(Parse.Installation);
pushQuery.equalTo('deviceType', 'ios'); // targeting iOS devices only
pushQuery.equalTo("someKey", someKey)

Parse.Push.send({
    where: pushQuery, // Set our Installation query
    data: data
}, { success: function() {
    console.log("#### PUSH OK");
}, error: function(error) {
    console.log("#### PUSH ERROR" + error.message);
}, useMasterKey: true});

response.success('success');
});

Я нажимаю запрос curl, чтобы проверить push-уведомление, например -

curl \
-X POST \
-H "X-Parse-Application-Id: myAppId" \
-H "X-Parse-Master-Key: masterkey" \
-H "Content-Type: application/json" \
-d { "where": { "user_id": "cedsGn98ja" }, "data": { "alert": "Hello, Parse!"  } }

http://myapp.herokuapp.com/parse/functions/iosPush

Push работает, но отправляется на все устройства. Мне нужен способ отправить его на одном устройстве.

Спасибо...


person s.jain    schedule 24.07.2017    source источник
comment
Я пробовал вот так: curl -X POST -H X-Parse-Application-Id: myAppId -H X-Parse-Master-Key: masterkey -H Content-Type: application / json -d '{where: {user: {__type : Pointer, className: _User, objectId: cedsGn98ja}}, data: {alert: new one2}} 'myapp.herokuapp.com/parse/functions/iosPush Но все равно то же самое. push отправляется на все устройства, а не только на этого пользователя   -  person s.jain    schedule 24.07.2017


Ответы (2)


Я использовал следующий код, чтобы отправить уведомление от пользователя 1 пользователю 1 для тестирования. Вам нужно будет изменить someKey, чтобы настроить таргетинг на конкретного пользователя для вашего варианта использования. Не забудьте связать свою установку с пользователем в делегате вашего приложения.

быстрый

let text = "\(PFUser.current()!.username!) followed you, or whatever you want this to say";
let data = [
        "badge" : "Increment",
        "alert" : text,
    ]
    let request: [String : Any] = [
        "someKey" : PFUser.current()!.objectId!,
        "data" : data
    ]
    print(PFUser.current()!.objectId!)
    print("sending push notification...")
    PFCloud.callFunction(inBackground: "pushToFollowers", withParameters: request as [NSObject : AnyObject], block: { (results:AnyObject?, error:NSError?) in
        print("push \(String(describing: results!))")
        if error == nil {
            print (results!)
        }
        else {
            print (error!)
        }
    } as? PFIdResultBlock)

облачный код

  Parse.Cloud.define("pushToFollowers", function (request, response) {
  console.log("Inside pushToFollowers");
  var params = request.params;
  var user = request.user;
  var sessionToken = user.getSessionToken();
  var someKey = request.someKey;
  var data = params.data;

 // Set our query to target specific user 
  var recipientUser = new Parse.Query(Parse.User);
  recipientUser.equalTo("objectId", request.params.someKey);

// Set our installation query
  var pushQuery = new Parse.Query(Parse.Installation);
   pushQuery.equalTo('deviceType', 'ios');
   pushQuery.matchesQuery('user', recipientUser); 
   pushQuery.find({ useMasterKey: true }).then(function(object) {
        response.success(object); 
        console.log("pushQuery got " + object.length);
        }, function(error) {
          response.error(error);
            console.error("pushQuery find failed. error = " + error.message);
    });

  // Send push notification to query
  Parse.Push.send({
    where: pushQuery,
    data: data  
  }, { useMasterKey: true })
    .then(function() {
      // Push sent!
      console.log("#### push sent!");
    }, function(error) {
      // There was a problem :(
      console.error("#### push error" + error.message);
    });
response.success('success, end of pushToFollowers')
});
person brewswane    schedule 01.08.2017
comment
@ s.jain Примите ответ, если это сработает для вас. Ваше здоровье! - person brewswane; 27.09.2017

Будет ли someKey уникальным для всех пользователей? Если это не так, ваш push должен быть отправлен на все установки с этим совпадающим ключом. Чтобы отправить конкретному пользователю, вам нужно добавить ограничение запроса для поля user в объекте установки. Это может быть единственное ограничение запроса, если вы хотите отправить его на все устройства этого пользователя, или вы можете настроить таргетинг на конкретное устройство с помощью deviceId или installationId.

person Jake T.    schedule 24.07.2017
comment
Спасибо. Не могли бы вы объяснить, как мне написать запрос для идентификатора установки? Я пробовал где: {user: instalation_id}, но это не сработало. Также не могли бы вы объяснить, как использовать somekey? - person s.jain; 25.07.2017
comment
Проблема в том, что где условие не работает. Я пробовал все, но push отправляется всем пользователям. - person s.jain; 25.07.2017