以下の内容はhttps://bluebirdofoz.hatenablog.com/entry/2025/01/16/005302より取得しました。


MetaQuest3でウェブタスクダイアログを使ってブラウザを開く

本日は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トークンが表示されました。




以上の内容はhttps://bluebirdofoz.hatenablog.com/entry/2025/01/16/005302より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14