KiiCloud

ひとりKii Cloud Advent Calendar 2014-12-22

More than 3 years have passed since last update.

この記事は、ひとりKii Cloud Advent Calendarの22日目の記事です。


22日目「トピックスとは」

Kii CloudでPushを使う時に重要となるトピックスの話。

トピックスとはこんなもの


  • バケツのようにスコープ(所有者)の概念がある

  • データを蓄えておく場所ではない

  • ユーザーが指定したトピックスを購読する

  • 指定したトピックスに誰かがメッセージを投げると、それがPushとして購読者に配信される

と書いたものの、やっぱりこれだとイメージしづらいので、具体例で説明したほうが早そう。


複数デバイスにメッセージを送ってみよう

スマートフォンで何かメッセージを書くと、そのユーザーが所持しているNexus 7にメッセージが届く みたいなケースを考えてみる。

このケースの場合、


  • 他のユーザーがメッセージを書けるとまずい

  • 書いたメッセージが他のユーザーの端末に飛ぶとまずい

ので、ユーザースコープにトピックスを作るのがよさそう。


ユーザースコープのトピックスを作る

ここからいきなり非公式ライブラリの使い方。所有者となるKiiUserオブジェクトと、名前を指定するだけ。

mAppApi.topicAPI().create(user, name, new TopicAPI.TopicCallback<KiiTopic>() {

@Override
public void onSuccess(KiiTopic topic) {
// 成功時の処理
}

@Override
public void onError(Exception e) {
// 失敗時の処理
}
});


トピックスを購読する

購読しないと、せっかくメッセージを送ってもPushが飛んでこない。

KiiTopic topic = new KiiTopic(user, name);

mAppApi.topicAPI().subscribe(topic, new TopicAPI.TopicCallback<KiiTopic>() {
@Override
public void onSuccess(KiiTopic topic) {
// 成功時の処理
}

@Override
public void onError(Exception e) {
// 失敗時の処理
}
});


メッセージを送る

Intentとして渡されるデータはJSONObject。Kii CloudのAPI的には種類を表す文字列が渡せるが、多分これで制御しようとするとiOS側で破綻する気がするので後の設計ガイドをお楽しみに。

KiiTopic topic = new KiiTopic(user, name);

JSONObject pushData = new JSONObject();
KiiTopicMessage message = new KiiTopicMessage(pushData, "type01");

mAppApi.topicAPI().sendMessage(topic, message, new TopicAPI.SendMessageCallback() {
@Override
public void onSuccess(String pushMessageId) {
// 成功時の処理
}

@Override
public void onError(Exception e) {
// 失敗時の処理
}
});


メッセージはPHPから送りたい

後日ちゃんと書きます。

本文とは関係ないけど、ちゃんとUnit Test書いておくと使い方の説明を書くのも楽だ。。。