メッセージの送信
トピックの作成が完了したら、いよいよプッシュメッセージの送信です。トピックにメッセージを送信すると、このトピックを購読している全てのユーザーに対してメッセージがプッシュされます。
開発者ポータルよりアプリケーションスコープのトピックにメッセージを送信する
アプリ開発者は、開発者ポータルよりアプリケーションスコープのトピックにメッセージを送信できます。
送信方法は ユーザープッシュ通知の送信 をご覧ください。
SDK を使ってメッセージを送信する
メッセージの送信
アプリケーションスコープのトピックには、アプリ管理者のみがメッセージを送信できます。 以下に、メッセージ送信を行うコード例を挙げます。
-
// Authenticate as the app administrator. // Check the ClientID and ClientSecret in the Kii Cloud developer portal. Kii.authenticateAsAppAdmin("ClientID", "ClientSecret").then( function(adminContext) { // Instantiate a topic. var topicName = "SendingAlert"; var topic = adminContext.topicWithName(topicName); // Create push message data. var contents = { message : "hello push!" }; // Create a push message. var message = new KiiPushMessageBuilder(contents).build(); // Send the push message. return topic.sendMessage(message); } ).then( function(params) { var theTopic = params[0]; var theMessage = params[1]; // Do something. } ).catch( function(error) { // Handle the error. // Get the topic for the failed sendMessage() method. var theTopic = error.target; var errorString = error.message; } );
-
// Authenticate as the app administrator. // Check the ClientID and ClientSecret in the Kii Cloud developer portal. Kii.authenticateAsAppAdmin("ClientID", "ClientSecret", { success: function(adminContext) { // Instantiate a topic. var topicName = "SendingAlert22"; var topic = adminContext.topicWithName(topicName); // Create push message data. var contents = { message : "hello push!" }; // Create a push message. var message = new KiiPushMessageBuilder(contents).build(); // Send the push message. topic.sendMessage(message, { success: function(theTopic, theMessage) { // Do something. }, failure: function(errorString) { // Handle the error. } }); }, failure: function(errorString, errorCode) { // Handle the error. } });
グループスコープのトピックには、任意のグループメンバーがメッセージを送ることができます。以下に、メッセージ送信を行うコード例を挙げます。
-
// Instantiate a group. var group = KiiGroup.groupWithURI(groupURI); // Refresh the group. group.refresh().then( function(theGroup) { // Instantiate a topic in the group scope. var topicName = "GroupTopic"; var topic = group.topicWithName(topicName); // Create push message data. var contents = { "field1": 1, "field2": "str", "field3": 1.12, "field4": false }; // Create a push message. var message = new KiiPushMessageBuilder(contents).build(); // Send the push message. return topic.sendMessage(message); } ).then( function(params) { var theTopic = params[0]; var theMessage = params[1]; // Do something. } ).catch( function(error) { // Handle the error. // Get the group for the failed refresh() method. var theGroup = error.target; // Get the topic for the failed sendMessage() method. var theTopic = error.target; // Get the error message. var errorString = error.message; } );
-
// Instantiate a group. var group = KiiGroup.groupWithURI(groupURI); // Refresh the group. group.refresh({ success: function(theGroup) { // Instantiate a topic in the group scope. var topicName = "GroupTopic"; var topic = group.topicWithName(topicName); // Create push message data. var contents = { "field1": 1, "field2": "str", "field3": 1.12, "field4": false }; // Create a push message. var message = new KiiPushMessageBuilder(contents).build(); // Send the push message. topic.sendMessage(message, { success: function(theTopic, theMessage) { // Do something. }, failure: function(errorString) { // Handle the error. } }); }, failure: function(theGroup, errorString) { // Handle the error. } });
ユーザースコープのトピックには、このユーザーまたはトピックの所有者のみがメッセージを送信できます。以下に、メッセージ送信を行うコード例を挙げます。
-
// Instantiate a topic in the user scope. var topicName = "MyTODO"; var user = KiiUser.getCurrentUser(); var topic = user.topicWithName(topicName); // Create push message data. var contents = { "Item": "Do something", "Done": 0 }; // Create a push message. var message = new KiiPushMessageBuilder(contents).build(); // Send the push message. topic.sendMessage(message).then( function(params) { var theTopic = params[0]; var theMessage = params[1]; // Do something. } ).catch( function(error) { // Handle the error. var theTopic = error.target; var errorString = error.message; } );
-
// Instantiate a topic in the user scope. var topicName = "MyTODO"; var user = KiiUser.getCurrentUser(); var topic = user.topicWithName(topicName); // Create push message data. var contents = { "Item": "Do something", "Done": 0 }; // Create a push message. var message = new KiiPushMessageBuilder(contents).build(); // Send the push message. topic.sendMessage(message, { success: function(theTopic, theMessage) { // Do something. }, failure: function(errorString) { // Handle the error. } });
いずれも、以下の処理をしています。
- メッセージに含めるキーと値のペアを定義した後、
KiiPushMessageBuilder#build
メソッドを実行してプッシュメッセージを作成します。 sendMessage
メソッドを実行して、メッセージを送信します。
なお、グループスコープのサンプルコードでは refresh()
メソッドを実行していますが、group
をプッシュメッセージの送信だけに使用する場合は、実行を省略することもできます。
各プッシュ通知ネットワークに特有のフィールドを設定する
グループスコープのトピックまたはユーザースコープのトピックにプログラムからメッセージを送信する際、各プッシュ通知ネットワークに特有のフィールド値を設定することで、デバイスでの動作などをカスタマイズすることができます。
プッシュメッセージをカスタマイズする方法を以下に示します。
-
// Assume that the target topic has been instantiated. // Create push message data. var messageContents = { "key1": "value1" }; // Create a push message builder. var pushMessageBuilder = new KiiPushMessageBuilder(messageContents); // Create FCM-specific data. pushMessageBuilder.gcmCollapseKey("key") .gcmData({key1: "value1", key2: "value2"}) .gcmDelayWhileIdle(true) .gcmRestrictedPackageName("packageName") .gcmTimeToLive(10); // Create APNs-specific data. // Make the notification silent. var alertObject = { body: "alert message" }; pushMessageBuilder.apnsAlert(alertObject) .apnsContentAvailable(1) .apnsData({key1: "value1", key2: 123}); // Send an APNs message with rich content. // pushMessageBuilder.apnsAlert(alertObject) // .apnsBadge(3) // .apnsCategory("myCategory") // .apnsMutableContent(1) // .apnsSound("sound.mp3"); // Create MQTT-specific data. pushMessageBuilder.mqttData({key1: "value1", key2: "value2"}); // Create a push message. var pushMessage = pushMessageBuilder.build(); // Send the push message. topic.sendMessage(pushMessage).then( function(params) { var theTopic = params[0]; var theMessage = params[1]; // Do something. } ).catch( function(error) { // Handle the error. var theTopic = error.target; var errorString = error.message; } );
-
// Assume that the target topic has been instantiated. // Create push message data. var messageContents = { "key1": "value1" }; // Create a push message builder. var pushMessageBuilder = new KiiPushMessageBuilder(messageContents); // Create FCM-specific data. pushMessageBuilder.gcmCollapseKey("key") .gcmData({key1: "value1", key2: "value2"}) .gcmDelayWhileIdle(true) .gcmRestrictedPackageName("packageName") .gcmTimeToLive(10); // Create APNs-specific data. // Make the notification silent. var alertObject = { body: "alert message" }; pushMessageBuilder.apnsAlert(alertObject) .apnsContentAvailable(1) .apnsData({key1: "value1", key2: 123}); // Send an APNs message with rich content. // pushMessageBuilder.apnsAlert(alertObject) // .apnsBadge(3) // .apnsCategory("myCategory") // .apnsMutableContent(1) // .apnsSound("sound.mp3"); // Create MQTT-specific data. pushMessageBuilder.mqttData({key1: "value1", key2: "value2"}); // Create a push message. var pushMessage = pushMessageBuilder.build(); // Send the push message. topic.sendMessage(pushMessage, { success: function(theTopic, theMessage) { // Do something. }, failure: function(errorString) { // Handle the error. } });
iOS デバイスに サイレント通知 を送信する場合は、このコード例のように apnsContentAvailable
でフラグを立ててください。また、iOS に画像付きメッセージなどのリッチ通知を送信したい場合は、コメントアウトされている部分を参考にフィールドをセットしてください。
プッシュメッセージはデフォルトで全てのプッシュ通知ネットワークに送信されます。次の例のようにフラグを設定することによりプッシュメッセージの送信先を制御できます。
// Deliver a push message to Android devices using FCM only.
var message = KiiPushMessageBuilder.buildWith(data)
.enableApns(false)
.enableMqtt(false)
.build();
// Deliver a push message to iOS devices only.
var message = KiiPushMessageBuilder.buildWith(data)
.enableGcm(false)
.enableMqtt(false)
.build();
// Deliver a push message using MQTT only.
var message = KiiPushMessageBuilder.buildWith(data)
.enableGcm(false)
.enableApns(false)
.build();