本日はQuestの小ネタ枠です。
Questでウェブタスクダイアログを使ってブラウザを開く方法です。
ウェブタスクダイアログ
ウェブタスクダイアログはQuestで利用可能な軽量ブラウザウィンドウです。
プライバシーポリシーやサポートドキュメントなどの外部情報にリンクする場合やOAuthなどのウェブベースの認証フローに適しています。
developers.meta.com
UnityプロジェクトでC#スクリプトからウェブタスクダイアログを開く場合のコード例は以下になります。
string encodedUri = WWW.EscapeURL(uriString); using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { using (AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity")) { AndroidJavaObject intent = new AndroidJavaObject("android.content.Intent", "com.oculus.vrshell.intent.action.LAUNCH"); intent.Call<AndroidJavaObject>("setPackage", "com.oculus.vrshell"); intent.Call<AndroidJavaObject>("putExtra", "uri", "ovrweb://webtask?uri=" + encodedUri); intent.Call<AndroidJavaObject>("putExtra", "intent_data", "systemux://browser"); activity.Call("sendBroadcast", intent); } }
サンプルスクリプト
以下のOpenIDConnectの認可コードフローを試したサンプルでウェブタスクダイアログによる実行を試してみました。
bluebirdofoz.hatenablog.com
サンプルスクリプトに以下のウェブタスクダイアログを利用する関数を追加して、それを呼び出すボタンを追加します。
・OpenIDConnectTest.cs
// (略) /// <summary> /// ウェブタスクダイアログを使って認証を開始する /// </summary> /// <returns></returns> public void AuthorizeRequestWithWebTaskDialog() { resultText.text = "Start Authorize WithWebTaskDialog3"; // 認可エンドポイントのURLを生成 var authorizeEndPoint = $"https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/authorize"; // ランダムな3桁の数字の State を生成 state = "{Random.Next(100, 999)}"; // 認可エンドポイントに渡すパラメータを生成 var queryParameter = HttpUtility.ParseQueryString(string.Empty); queryParameter["client_id"] = clientId; queryParameter["response_type"] = "code"; queryParameter["redirect_uri"] = redirectUri; queryParameter["scope"] = "openid"; queryParameter["state"] = state; // 認可エンドポイントのURLにパラメータを付与 var authorizeUri = new UriBuilder(authorizeEndPoint){ Query = queryParameter.ToString() }.Uri; string encodedUri = WWW.EscapeURL(authorizeUri.AbsoluteUri); using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { using (AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity")) { AndroidJavaObject intent = new AndroidJavaObject("android.content.Intent", "com.oculus.vrshell.intent.action.LAUNCH"); intent.Call<AndroidJavaObject>("setPackage", "com.oculus.vrshell"); intent.Call<AndroidJavaObject>("putExtra", "uri", "ovrweb://webtask?uri=" + encodedUri); intent.Call<AndroidJavaObject>("putExtra", "intent_data", "systemux://browser"); activity.Call("sendBroadcast", intent); } } } // (略)

動作確認
MetaQuest3でデプロイしたアプリを起動し、ボタンを押下します。

以下の通り認証画面がウェブタスクダイアログで開きます。
ユーザIDとパスワードを入力してアプリへのサインインを許可します。

認証が成功してテキスト欄に取得したIDトークンが表示されました。
