オーナーの定義

モバイルアプリから Thing を操作するには、Thing を操作する Kii Cloud のユーザーを指定する必要があります。機能概要は こちら をご覧ください。

ユーザーは、Kii Cloud SDK の ユーザー管理機能 を使って作成します。ユーザーを作成後、そのユーザー ID とアクセストークンを初期化 API のパラメータとして渡します。

アクセストークンについて詳しくは、ログインとアクセストークン をご覧ください。

ユーザーを作成するにはいくつかの方法がありますが、ここでは 仮ユーザー(Pseudo User) の利用をおすすめします。Thing-IF SDK のコマンドやステートの機能を使用するだけであれば、この方法が最も簡単です。

仮ユーザーとは Kii Cloud 上に無名のユーザーを作成し、その際に発行されたアクセストークンを使って、ユーザーにアクセスする方法です。ユーザー名やパスワードが不要であるため、明示的なログインを行わずにユーザーを利用できます。

なお、Kii Cloud SDK を併用して本格的なモバイルアプリを作成したい場合は、最後に示す 実装のヒント に基づいてユーザーやグループを作成してください。

仮ユーザーの作成

仮ユーザーを作成する例を以下に挙げます。この例では、新しい仮ユーザーのアカウントを作成して、発行されたアクセストークンとユーザー ID をデバイスのストレージに保存しています(保存メソッドの詳細は省略しています)。

ここでのアクセストークンとユーザー ID は Thing-IF SDK の初期化に使用します。なお、アクセストークンをなくすと、モバイルアプリ再起動後にユーザーを識別する手段がなくなり、作成したユーザーにアクセスできなくなるため、ご注意ください。

try {
  // Set predefined and custom fields.
  UserFields userFields = new UserFields();
  ...

  // Register a pseudo user.
  KiiUser pseudoUser = KiiUser.registerAsPseudoUser(userFields);

  // Get the access token of the preudo user.
  String accessToken = pseudoUser.getAccessToken();

  // Get the user ID.
  String userID = pseudoUser.getID();

  // Store the access token and the user ID with your own function.
  storeUser(accessToken, userID);
} catch (IOException e) {
  // Handle the error.
} catch (AppException e) {
  // Handle the error.
}

基本手順は以下のとおりです。

  1. registerAsPseudoUser メソッドを実行し、仮ユーザーを作成、登録します。
  2. 新たなアカウントが作成され、ログイン処理が行われます。KiiUser.getAccessToken メソッドでアクセストークンを、KiiUser.getCurrentUser().getID() でユーザー ID をそれぞれ取得してデバイスに保存します。

次に、以下のコードによって Thing のオーナーとなるユーザーを指定できます。最終的に owner を、初期化 APIThingIFAPIBuilder.newBuilder に渡します。

// Create a typed ID from an ID type and the user ID.
TypedID typedUserID = new TypedID(TypedID.Types.USER, userID);

// Create an owner from the typed ID and the access token.
Owner owner = new Owner(typedUserID, accessToken);

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

  1. 取得したユーザーの ID と、ID の種類を表す USER とともに TypedID を作成します。なお、グループをオーナーにする場合は、GROUP とともにグループ ID を渡します。
  2. 最終的に、TypedID とアクセストークンから Owner オブジェクトを作成します。

複数のデバイスでこの実装を利用すると、各デバイスで別のユーザーを作成して 1 つの Thing を共有することになります。Thing-IF SDK の機能範囲では、1 つの Thing に複数のユーザーを紐付けることができるため、この方法で問題ありません。

もし、Kii Cloud SDK を使って機能を拡張する予定がある場合、デバイスとユーザーの関係がモバイルアプリの機能とマッチしない可能性があります(ユーザースコープのデータがデバイスごとに作成されてうまく共有できないなど)。下記「実装のヒント」の内容も検討してください。

単純に上記のコードを初期化処理に実装すると、アプリが起動するたびに新しいユーザーが作成されます。storeUser で保存したアクセストークンとユーザー ID を次回起動時に使用する処理なども適切に実装してください。

実装のヒント

オーナーに設定するユーザーの種類

ここでは、仮ユーザーをオーナーとして設定する例を示しましたが、以下のような利用方法も可能です。いずれも、Kii Cloud SDK の機能を参照してください。

  • ユーザー名(またはメールアドレスや電話番号)とパスワードを使ってユーザーを作成してログインする(ユーザー管理
  • Facebook や Twitter などの外部のサービスのユーザー名とパスワードを使って Kii Cloud 上にユーザーを作成して利用する(別サービスアカウントを利用した認証
  • 1 つの Thing を複数のユーザーで共有するため、グループをオーナーとして設定する(グループ管理

コマンドリザルトの取得

コマンドリザルトを取得するにはプッシュ通知で受け取るコマンド ID が必要ですが、プッシュ通知の送信先は、コマンドを送信したユーザーに紐付けられたデバイスだけです。この点を考慮してモバイルアプリを設計してください。

仮ユーザーがオーナーである場合

ユーザーがデバイスごとに異なるため、コマンドを実行したデバイスにのみコマンド ID が通知されます。Thing を共有している他のデバイスで発行されたコマンドのコマンド ID は通知されません。

通常のユーザーがオーナーである場合

デバイスのインストール によってオーナーと紐付けられているすべてのデバイスにコマンド ID が通知されます。