1

解析クラウドを使用して、他のユーザーの解析インストールに新しいチャネルを追加しようとしています。これはパース クラウド コードです。

  Parse.Cloud.define("subscribeToChannel", function(request, response) {
  var channelName = request.params.channel;
  var ids = request.params.ids;//this is an array of ids to change
  var _ = require("underscore");
  _.each(ids, function(id) {
  // Create a Pointer to this user based on their object id
    var user = new Parse.User();
    user.id = id;
    // Need the Master Key to update Installations
    Parse.Cloud.useMasterKey(); 
    // A user might have more than one Installation
    var query = new Parse.Query(Parse.Installation);
    query.equalTo("User", user); // Match Installations with a pointer to this User
    query.find({
      success: function(installations){
    for (var i = 0; i < installations.length; i++){
      // Add the channel to all the installations for this user
      installations[i].addUnique("channels", channelName);
    }
    // Save all the installations
    Parse.Object.saveAll(installations, {
      success: function(installations) {
      },
      error: function(error) {
        // An error occurred while saving one of the objects.
        console.error(error);
      }
    });
      },
      error: function(error) {
    console.error(error);
      }
    });
  });

そして、これが各ユーザーの最初のインストールをセットアップする方法です。

ParseInstallation inst = ParseInstallation.getCurrentInstallation();
inst.put("User", ParseUser.getCurrentUser());

送信する ID の配列は、文字列 ID のリストを含む JSONArray です。JSONArray が取得され、正しく繰り返されます。しかし、何度試してもうまくいかないようです。ありがとう!

4

2 に答える 2

2

私の間違いは、チャンネルを正しい方法で保存していなかったことです。Parse の開発チームと長い間話し合った結果、実現することができました。コードは次のとおりです。

Parse.Cloud.define("subscribeToChannel", function(request, response) {
var channelName = request.params.channel; //Channel the user will be subscribed to
var ids = request.params.ids; //Id of the users
var completed = true;
var size = 0;
var pased = 0;
var loops = 0;
var idStrings = "";
var _ = require("underscore");
if (!channelName) {
response.error("Missing parameter: channel");
return;
}
if (!ids) {
response.error("Missing parameter: ids");
return;
}
var query = new Parse.Query(Parse.Installation);
var user = new Parse.User();
var changedObjects = [];
var pointerArray = [];
_.each(ids, function(id){
pointerArray.push({"__type":"Pointer","className":"_User","objectId":id});
});

// Need the Master Key to update Installations
Parse.Cloud.useMasterKey();
query.containedIn("User",pointerArray);
query.find({
success: function(installations){
for (var i = 0; i < installations.length; i++){
// Add the channel to all the installations for this user
installations[i].addUnique("channels", channelName); //Add the channel to the installation
changedObjects.push(installations[i]); //Add the installation to be saved later on!
}

//Saving all the installations
Parse.Object.saveAll(changedObjects, { 
success: function(installations) {
response.success();
},
error: function(error) {
// An error occurred while saving one of the objects.
response.error(error);
}
});
},
error: function(error) {
response.error(error);
}
});
});
于 2014-04-25T08:36:38.220 に答える
1

CloudCodeを使用して同じ操作を実行しようとしているため、あなたの質問を見つけましたが、少なくとも現時点では不可能のようです. Parse チームによると、「JavaScript SDK は現在、インストール オブジェクトの変更をサポートしていません。iOS、Android、または REST プッシュ ガイドを参照してください」。以下にリンクがあります:

parse.com/docs/push_guide#setup/JavaScript

また、JavaScript SDK で実行できない操作は他にもあります。

  1. JavaScript SDK は現在、プッシュ通知を送受信するためのチャネルのサブスクライブをサポートしていません。
  2. JavaScript SDK は現在、プッシュの受信をサポートしていません

一方、プッシュ通知を送信することもできます。次に、Android ネイティブ アプリを開発しているので、通知プッシュ機能を完成させるために、ParseClode と「Android コード」を「混ぜ合わせる」必要があります。

お役に立てば幸いです

よろしく

于 2014-04-24T07:32:06.927 に答える