-
Notifications
You must be signed in to change notification settings - Fork 1
2. Specification
Device Connectシステムは、マルチOS、マルチプラットフォームのランタイム環境上において、スマートデバイスと接続するためのAPI (RESTful) を提供します。これにより、スマートデバイスとの接続方法・連携方法の利便性を向上することを目的としています。
Device Connectシステムが提供する機能一覧は以下の通りです。
- 連携可能な周辺機器一覧を表示する機能
- 接続I/F(Bluetooth, BLE, Wi-Fi, NFC)の違いのわかりにくさの解消
- 機器プロファイルによる統一的なAPI
- ユーザによるアプリケーション認可機能
- etc.
Device Connectシステムでは、シンプルで手軽なHTTP通信と、効率的なWebSocket通信によるイベント処理を行い操作できるようにします。
以下の3つのデザインパターンを元にAPIの設計を行っています。
- One shot data
- Event driven data
- Streaming data
シンプルなRESTでDevice Conenct Managerにアクセスすることで、ウェアラブルデバイスやIoTデバイスの情報を取得、操作を行います。
例) アクセスした瞬間の心拍センサーの値を取得
WebSocketを使用して、ウェアラブルデバイスやIoTデバイスで発生するイベントを連続的に受信します。
例) 心拍センサーの値に変化があった瞬間の値を連続的に自動取得
Device Connect Managerは、各デバイスプラグインがWebサーバを立ち上げたURIをアプリケーションに中継します。
アプリケーションでは、受け取ったURIを直接参照することで、Device Connect Managerを経由せずに映像リソースなどのデータを受信します。
例) カメラ映像を要求した場合に、OSやGotAPIの内部構造を経由せずに映像リソースとしてアプリから直接利用
アプリケーションと各デバイスプラグインが立ち上げたWebサーバ間の通信においては、特に規定は行なっていません。
デバイスプラグインの仕様に合わせて、アプリケーションが処理する必要があります。
Device Connect Managerは、GotAPIで定義されているGotAPI Serverを実装したアプリケーションになります。
Device Connect Managerは OMA GotAPI v1.1 上で定義されている機能を実装しています。
詳しくは、GotAPIの資料を参照してください。
GotAPIでは、標準化したAPIを定義しています。
Device Connectシステムでは、GotAPIが定義している以下のAPIを実装しています。
GotAPIサーバ(Device Connect Manager)が起動しているか確認します。
GotAPI Auth Serverにユーザ認可を求めます。
GotAPIサーバ(Device Connect Manager)に接続されているサービス(デバイス)を取得します。
GotAPIサーバ(Device Connect Manager)からサービス(デバイス)の詳細な情報を取得します。
OMA GotAPI v1.1 の規定に従い、アプリケーションは、リクエストメッセージのOriginヘッダを付加する必要があります。
GotAPIのセキュリティ機能であるアプリケーション認可機能やホワイトリスト機能は、Originヘッダの情報を元に実行されます。
HTMLアプリケーションとNativeアプリケーションで付加するヘッダは以下の通りになります。
- HTMLアプリケーションの場合
RFC6454上で定義されるOriginをOriginヘッダに指定します。
GET /gotapi/availability HTTP/1.1
Host: 127.0.0.1:4035
Origin: http://xxx.example.com/
- Nativeアプリケーションの場合
X-GotAPI-OriginヘッダにNativeアプリケーションの識別子(Androidの場合はパッケージ名等)を指定します。
GET /gotapi/availability HTTP/1.1
Host: 127.0.0.1:4035
X-GotAPI-Origin: com.example.android.app
なお、本機能はDevice Connect Managerの設定画面で有効/無効を切り替えることができます。
本機能を無効にした場合は、Originが不要になるためにアプリケーション認可機能やホワイトリスト機能も同時に無効になります。
ユーザーが認可していないアプリケーションからのアクセスをブロックする機能です。
アプリケーションは、初めてDevice Connectシステムにアクセスする際、ユーザーからの認可とともに、アクセストークンを取得する必要があります。
アクセストークン無しでデバイスにアクセスしようとした場合、Device Connectシステムはアプリケーションに対してエラーを返却します。
なお、本機能はDevice Connect Managerの設定画面で有効/無効を切り替えることができます。
ホワイトリストに含まれないアプリケーションからのアクセスを禁止する機能です。
また、ユーザに対してアプリケーションのホワイトリスト管理機能及びUIと本機能の有効/無効を操作するUIを提供します。
これによりユーザ操作によって切り替え可能にします。
本機能が有効になっている場合、アプリケーションから受信したリクエストメッセージのOriginヘッダをチェックし、Originがホワイトリストに含まれていない場合、エラーを返却します。
アプリケーション側で、Device Connectシステムの正当性を検証できるように、アプリケーションからのリクエストへの応答にHMACを付加します。
本機能の使用・不使用はアプリケーション側に委ねられています。
Device Connect Managerでは、GotAPIのセキュリティ以外にもいくつかの制限を設けています。
Device Connect Managerは、127.0.0.1(localhost)以外の外部IPからのアクセスを許可することができます。
外部IPからのアクセスを許可している場合には、Device Connect Managerがインストールされている端末と同じネットワーク内のPC端末などから操作を行うことができます。
外部IPからのアクセスを許可する場合には、意図しない人からのアクセスが考えられますので、デフォルトでは無効に設定してあります。
ただし、機能にアクセスしようとした時点で、アプリケーション認可機能がDevice Connect Managerがインストールされている端末で実行され認可が求められます。
よって、認可を受けていない外部IPからのアクセスでは、操作することはできません。
Device Connect Managerで使用するポートを監視を行い、Device Connect Manager以外のアプリケーションが起動している場合には、警告を表示してユーザに確認を行います。
ユーザは、Device Connect Manager以外のアプリがポートを使用していることに気がつくことができ、Device Connect Managerになりすましをしているアプリケーションを発見することができるようになります。
iOSでは、バックグランドでアプリケーションが動作することができないため、他のアプリケーションがなりすましすることができません。よって、この機能はAndroidにのみ実装してあります。
Device Connect Managerと連携して周辺機器を操作、および、イベントを送信するアプリケーションになります。
スマートフォン内で周辺機器毎のAndroidもしくはiOSアプリケーションとして構成されます。