UWPアプリ化したPWAからUWP APIを使うコード例
上記の共有ターゲットの動作は、どのようにJavaScriptで実装されているのでしょうか? Build 2018のセッション「Modernizing Twitter for Windows as a Progressive Web App」から紹介します。
まず、アプリ起動時に、2つの処理を行います(次の画像)。
1つ目は、MSApp.pageHandlesAllApplicationActivationsメソッドの呼び出しです(まだアンドキュメンテッドです)。これをやっておかないと、共有ターゲットとして起動されたときにも必ず既定のページが表示されてしまいます。MSAppはMicrosoftのWebブラウザーに固有のオブジェクトであり、このメソッドはPWA対応のEdgeに固有のもののようです。呼び出す前に、それぞれの存在を確認する必要があります。
2つ目は、Windowsのactivatedイベントに対するイベントハンドラーの登録です。WebUIApplicationクラスはUWP APIのものですから、呼び出す前に存在を確認する必要があります。
そのactivatedイベントハンドラーは、次のようになっています。
activatedイベントは、アプリが実行中かどうかにかかわらず、Windowsからアプリがアクティブ化されたときに発生します。上のコードでは、ActivationKind(アクティブ化の種類)がshareTarget(共有ターゲット)であるときは、handleShareEventメソッドを実行します。それ以外のアクティブ化のときは、既定の動作になります(普通に初期画面を表示します)。
handleShareEventメソッドでは、共有するデータを受け取って、データの種類に応じてツィートを組み立てます。例えば、共有データがテキストの場合は、次のコードのようになります。
上のコードで、変数eはアクティブ化時に渡されたShareTargetActivatedEventArgs型の引数です。そのShareOperation.Dataプロパティに、共有すべきデータが入っています。
ツィートを組み立てたら、ツィート送信画面を表示します(次の画像の3)。
ユーザーがツィートを送信し終わったら(または送信をキャンセルしたら)、ShareOperationオブジェクトのReportCompletedメソッドを呼び出して、処理が終わったことをWindowsに通知します(上の画像の4)。
まとめ
今回は、プログレッシブWebアプリ(PWA)を紹介し、PWAをUWPアプリに変換する方法を解説しました。UWPアプリ化することでUWP APIが使えるようになり、Windows 10の様々な機能を利用できます。Webアプリを作っている開発者は、ぜひPWA化を考えてみてください。そして、PWA化できたら、今度はWindows 10の機能を活用できないか検討してみてください。
