サーバートリガーで自動的にデータ付与
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 を保存しています。