2017-07-24 2 views
0

J'utilise l'application serveur heroku parse et j'essaie d'envoyer une notification push à un seul périphérique en fonction des données utilisateur disponibles dans mongodb. J'utilise la fonction de nuage montrant ci-dessous:Envoyer une notification push sur un seul périphérique via le serveur d'analyse heroku

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'); 
}); 

Je frappais une demande boucle, pour vérifier la notification push comme -

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

La poussée fonctionne, mais il est envoyer sur tous les appareils. Je veux un moyen pour que je puisse l'envoyer sur un seul appareil.

Merci ...

+0

J'ai essayé comme ça boucle -X POST -H "X-parse-Application-Id: myAppId" -H « X-Parse- Master-Key: masterkey "-H" Content-Type: application/json "-d '{" où ": {" user ": {" __type ":" Pointeur "," className ":" _User "," objectId " : "cedsGn98ja"}}, "données": {"alert": "nouveau one2"}} 'http://myapp.herokuapp.com/parse/functions/iosPush Mais toujours pareil. push envoie sur tous les appareils au lieu de seulement cet utilisateur –

Répondre

0

Est-someKey va être unique pour tous les utilisateurs? Si ce n'est pas le cas, votre push devrait être envoyé à toutes les installations avec cette clé correspondante. Pour envoyer à un utilisateur spécifique, vous souhaitez ajouter une contrainte de requête pour le champ user sur l'objet Installation. Cela peut être la seule contrainte de requête si vous voulez l'envoyer à tous les périphériques de cet utilisateur, ou vous pouvez cibler un périphérique spécifique en utilisant un deviceId ou un installationId.

+0

Merci. Pouvez-vous s'il vous plaît expliquer comment dois-je écrire la requête pour l'identification d'installation? J'ai essayé comme "where": {"user": "instalation_id"} mais cela n'a pas fonctionné. Aussi pouvez-vous s'il vous plaît expliquer comment utiliser somekey? –

+0

Le problème est que "où" la condition ne fonctionne pas. J'ai tout essayé mais la poussée envoie à tous les utilisateurs. –

0

J'ai utilisé le code suivant pour envoyer une notification de l'utilisateur 1 à l'utilisateur 1 pour le tester. Vous devrez modifier 'someKey' pour cibler l'utilisateur spécifique pour votre cas d'utilisation. Ne pas oublier de link your installation to the user dans votre délégué de l'application.

rapide

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) 

code nuage

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') 
}); 
+0

@ s.jain Veuillez accepter la réponse si cela fonctionne pour vous. À votre santé! – brewswane