サーバートリガーで自動的にデータ付与

Server Hook により自動起動されることを想定した Server Code の例を挙げます。

この例は、新規ユーザーが作成されたタイミング(i.e. USER_CREATED トリガーが発生した時。サーバートリガー起動)の例でユーザーの "gifts" Bucket にランダム選択されたプレゼントアイテムを追加しています。

例では done() コールバック関数の引数を省略しています。これは Server Code が Server Hook により起動された場合、実行結果をクライアントに返すことができないためです。

function main(params, context, done) {
  // Get the administrator and the new user.
  var admin = context.getAppAdminContext();
  var user = admin.userWithID(params.userID);

  // Get a gift for the new user.
  var selectedGift = getSignUpGift();

  // Create a bucket and a KiiObject in the user scope.
  var giftObject = user.bucketWithName("gifts").createObject();

  // Set the gift data in the KiiObject.
  giftObject.set("name", selectedGift["name"]);
  giftObject.set("imageUrl", selectedGift["imageUrl"]);

  // Save the KiiObject.
  giftObject.save({
    success: function(targetObj) {
      done();
    },
    failure: function(targetObj, error) {
      done();
    }
  });
}

function getSignUpGift() {

  // Prepare gifts and return one of them randomly.
  var gifts = [{
    "name": "Normal axe",
    "imageUrl": "http://example.kii.com/yyy/axe.png",
    "hitRate": 70
  }, {
    "name": "Silver axe",
    "imageUrl": "http://example.kii.com/yyy/saxe.png",
    "hitRate": 20
  }, {
    "name": "Golden axe",
    "imageUrl": "http://example.kii.com/yyy/gaxe.png",
    "hitRate": 10
  }];

  var random = Math.floor(Math.random() * 100);
  var range = 0;
  var selectedGift = gifts[0];
  for (var i=0; i<gifts.length; ++i) {
    range += gifts[i]["hitRate"];
    if (random < range) {
      selectedGift = gifts[i];
      break;
    }
  }
  return selectedGift;
}

この例では、まず getAppAdminContext を使いアプリ管理者のコンテキストを取得、params.userID を使い新たに作成されたユーザーの ID を取得しています。この ID を使って userWithID() メソッドを実行して KiiUser インスタンスを作成した後に bucketWithName() メソッドでユーザーの "gifts" Bucket をインスタンス化し、この中にアイテムに相当する KiiObject を保存しています。