オーナーの定義
モバイルアプリから Thing を操作するには、Thing を操作する Kii Cloud のユーザーを指定する必要があります。機能概要は こちら をご覧ください。
ユーザーは、Kii Cloud SDK の ユーザー管理機能 を使って作成します。ユーザーを作成後、そのユーザー ID とアクセストークンを初期化 API のパラメータとして渡します。
アクセストークンについて詳しくは、ログインとアクセストークン をご覧ください。
ユーザーを作成するにはいくつかの方法がありますが、ここでは Android や iOS の実装と同じ 仮ユーザー(Pseudo User) による作成方法を紹介しています。
仮ユーザーとは Kii Cloud 上に無名のユーザーを作成し、その際に発行されたアクセストークンを使って、ユーザーにアクセスする方法です。ユーザー名やパスワードが不要であるため、明示的なログインを行わずにユーザーを利用できます。
Thing-IF SDK のコマンドやステートの機能を試す用途であれば、この方法が最も簡単です。ただし、Web ブラウザーで利用する場合、保存したアクセストークンが失われると元のユーザーにアクセスできなくなる点にご注意ください。
アクセストークがクリアされてもログインの手段を確保したい場合や、Kii Cloud SDK を併用して本格的なモバイルアプリを作成したい場合は、最後に示す 実装のヒント に基づいてユーザーやグループを作成してください。
仮ユーザーの作成
仮ユーザーを作成する例を以下に挙げます。この例では、新しい仮ユーザーのアカウントを作成して、発行されたアクセストークンとユーザー ID をデバイスのストレージに保存しています(保存メソッドの詳細は省略しています)。
ここでのアクセストークンとユーザー ID は Thing-IF SDK の初期化に使用します。なお、アクセストークンをなくすと、モバイルアプリ再起動後にユーザーを識別する手段がなくなり、作成したユーザーにアクセスできなくなるため、ご注意ください。
基本手順は以下のとおりです。
registerAsPseudoUser
メソッドを実行し、仮ユーザーを作成、登録します。- 新たなアカウントが作成され、ログイン処理が行われます。
getAccessToken
メソッドでアクセストークンを、getID
メソッドでユーザー ID をそれぞれ取得してデバイスに保存します。
次に、以下のコードによって Thing のオーナーとなるユーザーを指定できます。最終的に owner
と上記で取得した accessToken
を、初期化 の際、ThingIFAPI
のコンストラクタに渡します。
ここでは 取得したユーザーの ID と、ID の種類を表す Types.User
とともに TypedID
を作成しています。なお、グループをオーナーにする場合は、Types.Group
とともにグループ ID を渡します。
複数のデバイスでこの実装を利用すると、各デバイスで別のユーザーを作成して 1 つの Thing を共有することになります。Thing-IF SDK の機能範囲では、1 つの Thing に複数のユーザーを紐付けることができるため、この方法で問題ありません。
もし、Kii Cloud SDK を使って機能を拡張する予定がある場合、デバイスとユーザーの関係がモバイルアプリの機能とマッチしない可能性があります(ユーザースコープのデータがデバイスごとに作成されてうまく共有できないなど)。下記「実装のヒント」の内容も検討してください。
単純に上記のコードを初期化処理に実装すると、アプリが起動するたびに新しいユーザーが作成されます。storeUser
で保存したアクセストークンとユーザー ID を次回起動時に使用する処理なども適切に実装してください。
実装のヒント
オーナーに設定するユーザーの種類
ここでは、仮ユーザーをオーナーとして設定する例を示しましたが、以下のような利用方法も可能です。いずれも、Kii Cloud SDK の機能を参照してください。
- ユーザー名(またはメールアドレスや電話番号)とパスワードを使ってユーザーを作成してログインする(ユーザー管理)
- 1 つの Thing を複数のユーザーで共有するため、グループをオーナーとして設定する(グループ管理)
コマンドリザルトの取得
コマンドリザルトを取得するにはプッシュ通知で受け取るコマンド ID が必要ですが、プッシュ通知の送信先は、コマンドを送信したユーザーに紐付けられたデバイスだけです。この点を考慮してモバイルアプリを設計してください。
仮ユーザーがオーナーである場合
ユーザーがデバイスごとに異なるため、コマンドを実行したデバイスにのみコマンド ID が通知されます。Thing を共有している他のデバイスやトリガーで発行されたコマンドのコマンド ID は通知されません。
通常のユーザーがオーナーである場合
デバイスのインストール によってオーナーと紐付けられているすべてのデバイスにコマンド ID が通知されます。