メッセージの送信

トピックの作成が完了したら、いよいよプッシュメッセージの送信です。トピックにメッセージを送信すると、このトピックを購読している全てのユーザーに対してメッセージがプッシュされます。

開発者ポータルよりアプリケーションスコープのトピックにメッセージを送信する

アプリ開発者は、開発者ポータルよりアプリケーションスコープのトピックにメッセージを送信できます。

送信方法は ユーザープッシュ通知の送信 をご覧ください。

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();