Project Roma というのが発表されてもうかなりの時間がたちますが、UWP 同士では GA してて Android/iOS/Microsoft Graph API は Preview な感じです。Microsoft Graph API のカテゴリを見ると Cross-device experience という名前になってますね。
早く GA しないかな。
ということで、Microsoft Graph API は、ただの REST API です。 んで、Cross-device experience で提供されているのは、MS アカウントに紐づいているデバイスのリストの取得と、デバイスに対するコマンドの送信とコマンドの状態確認の API です。
流れとしてはデバイスのリストを取ってから、そこの ID を指定してコマンドを送り付けることになります。
デバイスのリストは以下のエンドポイントに GET で取れます。
https://graph.microsoft.com/beta/me/devices
コマンドは以下のエンドポイントに POST です。
https://graph.microsoft.com/beta/me/devices/デバイスのID/commands
どんな JSON が返ってくるかとかはドキュメントを見てみてください。
クロスデバイス エクスペリエンス - ドキュメント - Microsoft Graph
このコマンドですが以下のような JSON を送ると…
{"type": "LaunchUri", "payload": {"uri": "protocolname:?paramName=paramValue" }}
protocolname に対応したプロトコルのアプリが起動します。プロトコルに対応するには UWP でさくっといけます。もちろん Desktop Bridge アプリも含まれるので WPF とかで作ったアプリを Windows アプリケーション パッケージ プロジェクトとかで appx にパッケージングすれば Microsoft Graph API から起動が出来ます。
ただ、残念ながら App Service をホストする方法が無さそう…。Windows アプリケーション パッケージ プロジェクトの Package.appxmanifest に AppService の定義をしてもダメだった。
ということでコマンドを受けるところは、純粋な UWP として別立てで作りました。なので、アプリとしては WPF 製の Desktop Bridge のアプリと App Service 用の UWP アプリが個別にインストールされます。 そして、UWP のほうの App Service に WPF 製アプリから繋いで、Microsoft Graph API 経由で来たメッセージを渡してもらって、結果として REST API (Microsoft Graph API) から遠隔操作みたいな感じで動きます。
動作は以下のような感じ。Microsoft Graph API は API 確認用の Microsoft Graph Explorer から叩いています。
まとめ
つまり、Android や iOS 向けには SDK が提供されている Project Roma ですが、それ以外のプラットフォームでも Microsoft Graph API を叩けばアプリを起動したり、コマンドを送り付けたりすることが出来るってことです。
ソースコードは以下のリポジトリにあげてます。
あ、因みに Microsoft Graph API 使わなくても自前で何か常住プロセス立ててサーバーと通信するようなのを作れば同じことは出来るけど、最近は常駐系のアプリ作りにくい (ストアに出す場合の話し) ので自前で用意しないほうが幸せかも。