プッシュ通知

Kii の Thing 機能では、Thing に対して専用の Thing スコープが作成されます。このスコープ内の Bucket およびトピックを使ってプッシュ通知を利用できます(Thing スコープの概要は Thing スコープ をご参照ください)。

Bucket やトピックを使ったプッシュ通知の利用方法は他のスコープの場合と同様です。詳しい利用方法についてはそれぞれ サーバー上変更のプッシュ通知(Push to App) および ユーザープッシュ通知 (Push to User) を参照してください。

サーバー上変更のプッシュ通知の例

Thing スコープの Bucket を作成し、ユーザーが購読する例を以下に挙げます。

Android

  • try {
      // Instantiate a thing by vendor thing ID.
      KiiThing thing = KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS");
    
      // Create a bucket.
      KiiBucket thingBucket = thing.bucket("thing_bucket");
    
      // Create and save a KiiObject in the bucket.
      thingBucket.object().save();
    
      // Subscribe to the bucket.
      KiiUser.getCurrentUser().pushSubscription().subscribe(thingBucket);
    } catch (AppException e) {
      // Handle the error.
    } catch (IOException e) {
      // Handle the error.
    }
  • // Instantiate a thing by vendor thing ID.
    KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS", new KiiCallback<KiiThing>() {
      @Override
      public void onComplete(KiiThing result, Exception e) {
        if (e != null) {
          // Handle the error.
          return;
        }
    
        // Create a bucket.
        KiiBucket thingBucket = result.bucket("thing_bucket");
    
        // Create and save a KiiObject in the bucket.
        thingBucket.object().save(new KiiObjectCallBack() {
          @Override
          public void onSaveCompleted(int token, KiiObject object, Exception exception) {
            if (exception != null) {
              // Handle the error.
              return;
            }
    
            // Subscribe to the bucket.
            KiiUser.getCurrentUser().pushSubscription().subscribe(thingBucket, new KiiPushCallBack() {
              @Override
              public void onSubscribeCompleted(int taskId, KiiBucket target, Exception e) {
                if (e != null) {
                  // Handle the error.
                  return;
                }
              }
            });
          }
        });
      }
    });

iOS

Swift 3:

  • let thing : KiiThing
    
    do{
      // Instantiate a thing by vendor thing ID.
      thing = try KiiThing.loadSynchronous(withVendorThingID: "rBnvSPOXBDF9r29GJeGS")
    }catch(let error as NSError){
      // Handle the error.
      return
    }
    
    // Create a bucket.
    let thingBucket = thing.bucket(withName: "thing_bucket")
    
    // Create a KiiObject in the bucket.
    let object = thingBucket.createObject()
    
    do{
      // Save the KiiObject.
      try object.saveSynchronous()
    
      // Subscribe to the bucket.
      try KiiUser.current()!.pushSubscription().subscribeSynchronous(thingBucket)
    } catch let error as NSError {
      // Handle the error.
      return
    }
  • // Instantiate a thing by vendor thing ID.
    KiiThing.load(withVendorThingID: "rBnvSPOXBDF9r29GJeGS") { (thing , error) -> Void in
      if error != nil {
        // Handle the error.
        return
      }
    
      // Create a bucket.
      let thingBucket = thing!.bucket(withName: "thing_bucket")
    
      // Create and save a KiiObject in the bucket.
      let object = thingBucket.createObject()
      object.save { (retObject : KiiObject?, error : Error?) -> Void in
        if error != nil {
          // Handle the error.
          return
        }
    
        // Subscribe to the bucket.
        KiiUser.current()!.pushSubscription().subscribe(thingBucket, block: { (subscription : KiiPushSubscription?, error : Error?) -> Void in
          if error != nil {
            // Handle the error.
            return
          }
        })
      }
    }

Objective-C:

  • NSError* error = nil;
    
    // Instantiate a thing by vendor thing ID.
    KiiThing* thing = [KiiThing loadSynchronousWithVendorThingID:@"rBnvSPOXBDF9r29GJeGS"
                                                  error:&error];
    if (error != nil) {
      // Handle the error.
      return;
    }
    
    // Create a bucket.
    KiiBucket* thingBucket = [thing bucketWithName:@"thing_bucket"];
    
    // Create and save a KiiObject in the bucket.
    KiiObject *object = [thingBucket createObject];
    [object saveSynchronous:&error];
    if (error != nil) {
      // Handle the error.
      return;
    }
    
    // Subscribe to the bucket.
    [[KiiUser currentUser].pushSubscription subscribeSynchronous:thingBucket
                                                           error:&error];
    if (error != nil) {
      // Handle the error.
      return;
    }
  • // Instantiate a thing by vendor thing ID.
    [KiiThing loadWithVendorThingID:@"rBnvSPOXBDF9r29GJeGS"
                     block:^(KiiThing *thing, NSError *error) {
      if (error != nil) {
        // Handle the error.
        return;
      }
    
      // Create a bucket.
      KiiBucket* thingBucket = [thing bucketWithName:@"thing_bucket"];
    
      // Create and save a KiiObject in the bucket.
      KiiObject *object = [thingBucket createObject];
      [object saveWithBlock:^(KiiObject *object, NSError *error) {
        if (error != nil) {
          // Handle the error.
          return;
        }
    
        // Subscribe to the bucket.
        [[KiiUser currentUser].pushSubscription subscribe:thingBucket
                                                    block:^(KiiPushSubscription *subscription, NSError *error) {
          if (error != nil) {
            // Handle the error.
            return;
          }
        }];
      }];
    }];

JavaScript

// Instantiate a thing by vendor thing ID.
KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS", {
  success: function(thing) {
    // Create a bucket.
    var thingBucket = thing.bucketWithName("thing_bucket");

    // Create a KiiObject in the bucket.
    var object = thingBucket.createObject();

    // Save the KiiObject.
    object.save({
      success: function(theObject) {
        // Subscribe to the bucket.
        KiiUser.getCurrentUser().pushSubscription().subscribe(thingBucket, {
          success: function(thePushSubscription, theBucket) {
            // Do something.
          },
          failure: function(errorString) {
            // Handle the error.
          }
        });
      },
      failure: function(theObject, errorString) {
        // Handle the error.
      }
    });
  },
  failure: function(errorString) {
    // Handle the error.
  }
});

同様に Thing スコープの Bucket を作成し、Thing が購読することも可能です。

Android

  • try {
      // Instantiate a thing by vendor thing ID.
      KiiThing thing = KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS");
    
      // Create a bucket.
      KiiBucket thingBucket = thing.bucket("thing_bucket");
    
      // Create and save a KiiObject in the bucket.
      thingBucket.object().save();
    
      // Subscribe to the bucket.
      thing.pushSubscription().subscribe(thingBucket);
    } catch (AppException e) {
      // Handle the error.
    } catch (IOException e) {
      // Handle the error.
    }
  • // Instantiate a thing by vendor thing ID.
    KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS", new KiiCallback<KiiThing>() {
      @Override
      public void onComplete(KiiThing result, Exception e) {
        if (e != null) {
          // Handle the error.
          return;
        }
    
        // Create a bucket.
        KiiBucket thingBucket = result.bucket("thing_bucket");
    
        // Create and save a KiiObject in the bucket.
        thingBucket.object().save(new KiiObjectCallBack() {
          @Override
          public void onSaveCompleted(int token, KiiObject object, Exception exception) {
            if (exception != null) {
              // Handle the error.
              return;
            }
    
            // Subscribe to the bucket.
            result.pushSubscription().subscribe(thingBucket, new KiiPushCallBack() {
              @Override
              public void onSubscribeCompleted(int taskId, KiiBucket target, Exception e) {
                if (e != null) {
                  // Handle the error.
                  return;
                }
              }
            });
          }
        });
      }
    });

iOS

Swift 3:

  • let thing : KiiThing
    
    do{
      // Instantiate a thing by vendor thing ID.
      thing = try KiiThing.loadSynchronous(withVendorThingID: "rBnvSPOXBDF9r29GJeGS")
    }catch(let error as NSError){
      // Handle the error.
      return
    }
    
    // Create a bucket.
    let thingBucket = thing.bucket(withName: "thing_bucket")
    
    // Create a KiiObject in the bucket.
    let object = thingBucket.createObject()
    
    do{
      // Save the KiiObject.
      try object.saveSynchronous()
    
      // Subscribe to the bucket.
      try thing.pushSubscription().subscribeSynchronous(thingBucket)
    } catch let error as NSError {
      // Handle the error.
      return
    }
  • // Instantiate a thing by vendor thing ID.
    KiiThing.load(withVendorThingID: "rBnvSPOXBDF9r29GJeGS") { (thing , error) -> Void in
      if error != nil {
        // Handle the error.
        return
      }
    
      // Create a bucket.
      let thingBucket = thing!.bucket(withName: "thing_bucket")
    
      // Create and save a KiiObject in the bucket.
      let object = thingBucket.createObject()
      object.save { (retObject : KiiObject?, error : Error?) -> Void in
        if error != nil {
          // Handle the error.
          return
        }
    
        // Subscribe to the bucket.
        thing!.pushSubscription().subscribe(thingBucket, block: { (subscription : KiiPushSubscription?, error : Error?) -> Void in
          if error != nil {
            // Handle the error.
            return
          }
        })
      }
    }

Objective-C:

  • NSError* error = nil;
    
    // Instantiate a thing by vendor thing ID.
    KiiThing* thing = [KiiThing loadSynchronousWithVendorThingID:@"rBnvSPOXBDF9r29GJeGS"
                                                  error:&error];
    
    // Create a bucket.
    KiiBucket* thingBucket = [thing bucketWithName:@"thing_bucket"];
    
    // Create and save a KiiObject in the bucket.
    KiiObject *object = [thingBucket createObject];
    [object saveSynchronous:&error];
    if (error != nil) {
      // Handle the error.
      return;
    }
    
    // Subscribe to the bucket.
    [thing.pushSubscription subscribeSynchronous:thingBucket
                                           error:&error];
    if (error != nil) {
      // Handle the error.
      return;
    }
  • // Instantiate a thing by vendor thing ID.
    [KiiThing loadWithVendorThingID:@"rBnvSPOXBDF9r29GJeGS"
                     block:^(KiiThing *thing, NSError *error) {
      if (error != nil) {
        // Handle the error.
        return;
      }
    
      // Create a bucket.
      KiiBucket* thingBucket = [thing bucketWithName:@"thing_bucket"];
    
      // Create and save a KiiObject in the bucket.
      KiiObject *object = [thingBucket createObject];
      [object saveWithBlock:^(KiiObject *object, NSError *error) {
        if (error != nil) {
          // Handle the error.
          return;
        }
    
        // Subscribe to the bucket.
        [thing.pushSubscription subscribe:thingBucket
                                    block:^(KiiPushSubscription *subscription, NSError *error) {
          if (error != nil) {
            // Handle the error.
            return;
          }
        }];
      }];
    }];

JavaScript

// Instantiate a thing by vendor thing ID.
KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS", {
  success: function(thing) {
    // Create a bucket.
    var thingBucket = thing.bucketWithName("thing_bucket");

    // Create a KiiObject in the bucket.
    var object = thingBucket.createObject();

    // Save the KiiObject.
    object.save({
      success: function(theObject) {
        // Subscribe to the bucket.
        thing.pushSubscription().subscribe(thingBucket, {
          success: function(thePushSubscription, theBucket) {
            // Do something.
          },
          failure: function(errorString) {
            // Handle the error.
          }
        });
      },
      failure: function(theObject, errorString) {
        // Handle the error.
      }
    });
  },
  failure: function(errorString) {
    // Handle the error.
  }
});

ユーザープッシュ通知の例

Thing スコープのトピックを作成し購読する例を以下に挙げます。

Android

  • try {
      // Instantiate a thing by vendor thing ID.
      KiiThing thing = KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS");
    
      // Create a topic.
      KiiTopic thingTopic = thing.topic("thing_topic");
    
      // Save the topic.
      thingTopic.save();
    
      // Subscribe to the topic.
      KiiUser.getCurrentUser().pushSubscription().subscribe(thingTopic);
    } catch (AppException e) {
      // Handle the error.
    } catch (IOException e) {
      // Handle the error.
    }
  • // Instantiate a thing by vendor thing ID.
    KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS", new KiiCallback<KiiThing>() {
      @Override
      public void onComplete(KiiThing result, Exception e) {
        if (e != null) {
          // Handle the error.
          return;
        }
    
        // Create a topic.
        KiiTopic thingTopic = result.topic("thing_topic");
    
        // Save the topic.
        thingTopic.save(new KiiTopicCallBack() {
          @Override
          public void onSaveCompleted(int taskId, KiiTopic target, Exception exception) {
            if (exception != null) {
              // Handle the error.
              return;
            }
    
            // Subscribe to the topic.
            KiiUser.getCurrentUser().pushSubscription().subscribe(target, new KiiPushCallBack() {
              @Override
              public void onSubscribeCompleted(int taskId, KiiBucket target, Exception e) {
                if (e != null) {
                  // Handle the error.
                  return;
                }
              }
            });
          }
        });
      }
    });

iOS

Swift 3:

  • let thing : KiiThing
    
    do{
      // Instantiate a thing by vendor thing ID.
      thing = try KiiThing.loadSynchronous(withVendorThingID: "rBnvSPOXBDF9r29GJeGS")
    }catch(let error as NSError){
      // Handle the error.
      return
    }
    
    // Create a topic.
    let thingTopic = thing.topic(withName: "thing_topic")
    
    do{
      // Save the topic.
      try thingTopic.saveSynchronous()
    } catch let error as NSError {
      // Handle the error.
      return
    }
    
    do{
      // Subscribe to the topic.
      try KiiUser.current()!.pushSubscription().subscribeSynchronous(thingTopic)
    } catch let error as NSError {
      // Handle the error.
      return
    }
  • // Instantiate a thing by vendor thing ID.
    KiiThing.load(withVendorThingID: "rBnvSPOXBDF9r29GJeGS") { (thing , error) -> Void in
      if error != nil {
        // Handle the error.
        return
      }
    
      // Create a topic.
      let thingTopic = thing!.topic(withName: "thing_topic")
    
      // Save the topic.
      thingTopic.save({ (thingTopic , error : Error?) -> Void in
        if error != nil {
          // Handle the error.
          return
        }
    
        // Subscribe to the topic.
        KiiUser.current()!.pushSubscription().subscribe(thingTopic, block: { (subscription : KiiPushSubscription?, error : Error?) -> Void in
          if error != nil {
            // Handle the error.
            return
          }
        })
      })
    }

Objective-C:

  • NSError* error = nil;
    
    // Instantiate a thing by vendor thing ID.
    KiiThing* thing = [KiiThing loadSynchronousWithVendorThingID:@"rBnvSPOXBDF9r29GJeGS"
                                                           error:&error];
    if (error != nil) {
      // Handle the error.
      return;
    }
    
    // Create a topic.
    KiiTopic* thingTopic= [thing topicWithName:@"thing_topic"];
    
    // Save the topic.
    [thingTopic saveSynchronous:&error];
    if (error != nil) {
      // Handle the error.
      return;
    }
    
    // Subscribe to the topic.
    [[KiiUser currentUser].pushSubscription subscribeSynchronous:thingTopic
                                                           error:&error];
    if (error != nil) {
      // Handle the error.
      return;
    }
  • // Instantiate a thing by vendor thing ID.
    [KiiThing loadWithVendorThingID:@"rBnvSPOXBDF9r29GJeGS"
                              block:^(KiiThing *thing, NSError *error) {
      if (error != nil) {
        // Handle the error.
        return;
      }
    
      // Create a topic.
      KiiTopic* thingTopic= [thing topicWithName:@"thing_topic"];
    
      // Save the topic.
      [thingTopic saveWithBlock:^(KiiTopic *topic, NSError *error) {
        if (error != nil) {
          // Handle the error.
          return;
        }
    
        // Subscribe to the topic.
        [[KiiUser currentUser].pushSubscription subscribe:topic
                                                    block:
            ^(KiiPushSubscription *subscription, NSError *error) {
          if (error != nil) {
            // Handle the error.
            return;
          }
        }];
      }];
    }];

JavaScript

// Instantiate a thing by vendor thing ID.
KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS", {
  success: function(thing) {
    // Create a topic.
    thingTopic = thing.topicWithName("thing_topic");

    // Save the topic.
    thingTopic.save({
      success: function(theTopic) {
        // Subscribe to the topic.
        KiiUser.getCurrentUser().pushSubscription().subscribe(thingTopic, {
          success: function(pushSubscription) {
            // Do something.
          },
          failure: function(pushSubscription, error) {
            // Handle the error.
          }
        });
      },
      failure: function(theTopic, error) {
        // Handle the error.
      }
    });
  },
  failure: function(error) {
    // Handle the error.
  }
});

同様に Thing スコープのトピックを作成し、Thing が購読することも可能です。

Android

  • try {
      // Instantiate a thing by vendor thing ID.
      KiiThing thing = KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS");
    
      // Create a topic.
      KiiTopic thingTopic = thing.topic("thing_topic");
    
      // Save the topic.
      thingTopic.save();
    
      // Subscribe to the topic.
      thing.pushSubscription().subscribe(thingTopic);
    } catch (AppException e) {
      // Handle the error.
    } catch (IOException e) {
      // Handle the error.
    }
  • // Instantiate a thing by vendor thing ID.
    KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS", new KiiCallback<KiiThing>() {
      @Override
      public void onComplete(final KiiThing result, Exception e) {
        if (e != null) {
          // Handle the error.
          return;
        }
    
        // Create a topic.
        KiiTopic thingTopic = result.topic("thing_topic");
    
        // Save the topic.
        thingTopic.save(new KiiTopicCallBack() {
          @Override
          public void onSaveCompleted(int taskId, KiiTopic target, Exception exception) {
            if (exception != null) {
              // Handle the error.
              return;
            }
    
            // Subscribe to the topic.
            result.pushSubscription().subscribe(target, new KiiPushCallBack() {
              @Override
              public void onSubscribeCompleted(int taskId, KiiBucket target, Exception e) {
                if (e != null) {
                  // Handle the error.
                  return;
                }
              }
            });
          }
        });
      }
    });

iOS

Swift 3:

  • let thing : KiiThing
    
    do{
      // Instantiate a thing by vendor thing ID.
      thing = try KiiThing.loadSynchronous(withVendorThingID: "rBnvSPOXBDF9r29GJeGS")
    }catch(let error as NSError){
      // Handle the error.
      return
    }
    
    // Create a topic.
    let thingTopic = thing.topic(withName: "thing_topic")
    
    do{
      // Save the topic.
      try thingTopic.saveSynchronous()
    } catch let error as NSError {
      // Handle the error.
      return
    }
    
    do{
      // Subscribe to the topic.
      try thing.pushSubscription().subscribeSynchronous(thingTopic)
    } catch let error as NSError {
      // Handle the error.
      return
    }
  • // Instantiate a thing by vendor thing ID.
    KiiThing.load(withVendorThingID: "rBnvSPOXBDF9r29GJeGS") { (thing , error) -> Void in
      if error != nil {
        // Handle the error.
        return
      }
    
      // Create a topic.
      let thingTopic = thing!.topic(withName: "thing_topic")
    
      // Save the topic.
      thingTopic.save({ (thingTopic , error : Error?) -> Void in
        if error != nil {
          // Handle the error.
          return
        }
    
        // Subscribe to the topic.
        thing!.pushSubscription().subscribe(thingTopic, block: { (subscription : KiiPushSubscription?, error : Error?) -> Void in
          if error != nil {
            // Handle the error.
            return
          }
        })
      })
    }

Objective-C:

  • NSError* error = nil;
    
    // Instantiate a thing by vendor thing ID.
    KiiThing* thing = [KiiThing loadSynchronousWithVendorThingID:@"rBnvSPOXBDF9r29GJeGS"
                                                           error:&error];
    if (error != nil) {
      // Handle the error.
      return;
    }
    
    // Create a topic.
    KiiTopic* thingTopic= [thing topicWithName:@"thing_topic"];
    
    // Save the topic.
    [thingTopic saveSynchronous:&error];
    if (error != nil) {
      // Handle the error.
      return;
    }
    
    // Subscribe to the topic.
    [thing.pushSubscription subscribeSynchronous:thingTopic
                                           error:&error];
    if (error != nil) {
      // Handle the error.
      return;
    }
  • // Instantiate a thing by vendor thing ID.
    [KiiThing loadWithVendorThingID:@"rBnvSPOXBDF9r29GJeGS"
                           block:^(KiiThing *thing, NSError *error) {
      if (error != nil) {
        // Handle the error.
        return;
      }
    
      // Create a topic.
      KiiTopic* thingTopic= [thing topicWithName:@"thing_topic"];
    
      // Save the topic.
      [thingTopic saveWithBlock:^(KiiTopic *topic, NSError *error) {
        if (error != nil) {
          // Handle the error.
          return;
        }
    
        // Subscribe to the topic.
        [thing.pushSubscription subscribe:topic
                                    block:^(KiiPushSubscription *subscription, NSError *error) {
          if (error != nil) {
            // Handle the error.
            return;
          }
        }];
      }];
    }];

JavaScript

// Instantiate a thing by vendor thing ID.
KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS", {
  success: function(thing) {
    // Create a topic.
    thingTopic = thing.topicWithName("thing_topic");

    // Save the topic.
    thingTopic.save({
      success: function(theTopic) {
        // Subscribe to the topic.
        thing.pushSubscription().subscribe(thingTopic, {
          success: function(pushSubscription) {
            // Do something.
          },
          failure: function(pushSubscription, error) {
            // Handle the errror.
          }
        });
      },
      failure: function(theTopic, error) {
        // Handle the errror.
      }
    });
  },
  failure: function(error) {
    // Load thing failed.
  }
});

トピック一覧の取得例

Thing スコープの全てのトピックを一覧として取得することができます。トピックの件数が 50 件を超える場合は、ページネーションによって複数回にわけて一覧を取得する必要があります

以下に、Thing スコープに存在するトピックの一覧を取得する例を挙げます。

Android

  • try {
      // Instantiate a thing by vendor thing ID.
      KiiThing thing = KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS");
    
      // Get the first page of the topic list.
      KiiListResult<KiiTopic> result = thing.listTopics();
      for (KiiTopic topic : result.getResult()) {
        // Do something.
      }
    
      if (result.hasNext()) {
        // Get the next page of the topic list.
        result = thing.listTopics(result.getPaginationKey());
        for (KiiTopic topic : result.getResult()) {
          // Do something.
        }
      }
    } catch (IOException e) {
      // Handle the error.
    } catch (AppException e) {
      // Handle the error.
    }
  • // Instantiate a thing by vendor thing ID.
    KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS", new KiiCallback<KiiThing>() {
      @Override
      public void onComplete(final KiiThing thing, Exception e) {
        if (e != null) {
          // Handle the error.
          return;
        }
    
        // Get the first page of the topic list.
        thing.listTopics(new KiiCallback<KiiListResult<KiiTopic>>() {
          @Override
          public void onComplete(KiiListResult<KiiTopic> result, Exception e) {
            if (e != null) {
              // Handle the error.
              return;
            }
            for (KiiTopic topic : result.getResult()) {
              // Do something.
            }
    
            if (result.hasNext()) {
              // Get the next page of the topic list.
              thing.listTopics(result.getPaginationKey(), new KiiCallback<KiiListResult<KiiTopic>>() {
                @Override
                public void onComplete(KiiListResult<KiiTopic> result, Exception e) {
                  // Do something.
                }
              });
            }
          }
        });
      }
    });

ここでは以下の処理を実行しています。

  • listTopics メソッドを実行し、トピック一覧を取得します。
  • getResult メソッドを実行し、トピック一覧を List で取得します。
  • hasNext メソッドを実行して取得しきれなかったトピックがあるか確認し、ある場合は getPaginationKey メソッドで取得したキーを引数に再度、listTopics メソッドを実行します。

iOS

Swift 3:

  • var resultObj : KiiListResult
    
    do{
      // Instantiate a thing by vendor thing ID.
      let aThing = try KiiThing.loadSynchronous(withThingID: "th.id123455")
    
      // Get the first page of the topic list.
      resultObj = try aThing.listTopicsSynchronous()
    }catch(let error as NSError){
      // Handle the error.
      return
    }
    for topic in (resultObj.results as! [KiiTopic]){
      // Do something.
    }
    
    if resultObj.hasNext {
      // Get the next page of the topic list.
      resultObj = try! Kii.listTopicsSynchronous(resultObj.paginationKey!, error: ())
      for topic in (resultObj.results as! [KiiTopic]){
        // Do something.
      }
    }
  • // Instantiate a thing by vendor thing ID.
    KiiThing.load(withThingID: "th.id123455", block: { (thing : KiiThing?, error : Error?) -> Void in
      if error != nil {
        // Handle the error.
        return
      }
    
      // Get the first page of the topic list.
      thing!.listTopics { (resultObj : KiiListResult?, callerObject : Any?, error : Error?) -> Void in
        if error != nil {
          // Handle the error.
          return
        }
        for topic in (resultObj!.results as! [KiiTopic]){
          // Do something.
        }
    
        if resultObj!.hasNext {
          // Get the next page of the topic list.
          thing!.listTopics(resultObj!.paginationKey, block: { (resultObj : KiiListResult?, callerObject : Any?, error : Error?) -> Void in
            if error != nil {
              // Handle the error.
              return
            }
           for topic in (resultObj!.results as! [KiiTopic]){
              // Do something.
            }
          })
        }
      }
    })

Objective-C:

  • NSError* error = nil;
    
    // Instantiate a thing by vendor thing ID.
    KiiThing *aThing = [KiiThing loadSynchronousWithThingID:@"th.id123455" error:&error];
    
    // Get the first page of the topic list.
    KiiListResult *resultObj = [aThing listTopicsSynchronous:&error];
    if(error){
      // Handle the error.
      return;
    }
    [resultObj.results enumerateObjectsUsingBlock:^(KiiTopic* topic, NSUInteger idx, BOOL *stop) {
      // Do something.
    }];
    
    if(resultObj.hasNext){
      // Get the next page of the topic list.
      resultObj = [aThing listTopicsSynchronous:resultObj.paginationKey error:&error];
      [resultObj.results enumerateObjectsUsingBlock:^(KiiTopic* topic, NSUInteger idx, BOOL *stop) {
        // Do something.
      }];
    }
  • // Instantiate a thing by vendor thing ID.
    [KiiThing loadWithThingID:@"th.id123455"
                        block:^(KiiThing *thing, NSError *error) {
      if(error){
        // Handle the error.
        return;
      }
    
      // Get the first page of the topic list.
      [thing listTopics:^(KiiListResult *resultObj, id callerObject, NSError *error) {
        if(error){
          // Handle the error.
          return;
        }
        [resultObj.results enumerateObjectsUsingBlock:^(KiiTopic* topic, NSUInteger idx, BOOL *stop) {
          // Do something.
        }];
    
        if(resultObj.hasNext){
          // Get the next page of the topic list.
          [thing listTopics:^(KiiListResult *resultObj, id callerObject, NSError *error) {
            [resultObj.results enumerateObjectsUsingBlock:^(KiiTopic* topic, NSUInteger idx, BOOL *stop) {
              // Do something.
            }];
          }];
        }
      }];
    }];

ここでは、以下の処理を実行しています。

  • listTopicsSynchronous メソッドを実行し、トピック一覧を取得します。
  • [KiiListResult results] メソッドを実行し、トピック一覧を NSArray で取得します。
  • [KiiListResult hasNext] メソッドを実行して取得しきれなかったトピックがあるか確認し、ある場合は getPaginationKey メソッドで取得したキーを引数に、再度 listTopicsSynchronous メソッドを実行します。

JavaScript

// Instantiate a thing by vendor thing ID.
KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS", {
  success: function(thing) {
    // Get the first page of the topic list.
    thing.listTopics({
      success: function(topicList, nextPaginationKey) {
        for(var i=0; i<topicList.length; i++){
          // Do something.
          var topic = topicList[i];
        }
        if (nextPaginationKey != null) {
          // Get the next page of the topic list.
          thing.listTopics({
            success: function(topicList, nextPaginationKey) {
              // Do something.
            },
            failure: function(errorString) {
              console.log("Error listing topics: " + errorString);
            }
          }, nextPaginationKey);
        }
      },
      failure: function(errorString) {
        console.log("Error listing topics: " + errorString);
      }
    );
  },
  failure: function(error) {
    // Handle the error.
  }
});

ここでは以下の処理を実行しています。

  • loadWithVendorThingID メソッドで KiiThing のインスタンスを取得します。
  • listTopics メソッドを実行し、トピック一覧を取得します。
  • nextPaginationKey をチェックして取得しきれなかったトピックがあるか確認し、ある場合は nextPaginationKey を引数に再度、listTopics メソッドを実行します。