MRが楽しい

MRやVRについて学習したことを書き残す

MRTKv2.xを使ってMetaQuest3向けのUnityプロジェクト作成を行う その18(スキームURLからパラメータを受け取る)

本日はMetaQuest3の技術調査枠です。
MRTKv2.xを使ってMetaQuest3向けのUnityプロジェクト作成を行う手順を記事にします。
本記事はスキームURLからパラメータを受け取る手順です。

前提条件

本記事では以下の記事で作成したUnityプロジェクトを基に設定を行います。
bluebirdofoz.hatenablog.com

URLからパラメータを受け渡す

QuestアプリでURLからパラメータを取得するには Application.deepLinkActivated イベントが利用できます。
docs.unity3d.com

URLのクエリ文字列を解析してパラメータをテキストに表示する以下のスクリプトを作成しました。
・ProcessDeepLinkChecker.cs

using System.Collections.Generic;
using TMPro;
using UnityEngine;

public class ProcessDeepLinkChecker : MonoBehaviour
{
    [SerializeField]
    private TMP_Text _text;
    
    public static ProcessDeepLinkChecker Instance { get; private set; }

    private void Awake()
    {
        if (Instance == null)
        {
            Instance = this;                
            Application.deepLinkActivated += onDeepLinkActivated;
            if (!string.IsNullOrEmpty(Application.absoluteURL))
            {
                // コールドスタートと Application.absoluteURL は null ではありません。そのため Deep Link を処理します
                onDeepLinkActivated(Application.absoluteURL);
            }
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            Destroy(gameObject);
        }
    }
 
    private void onDeepLinkActivated(string url)
    {
        Dictionary<string, string> parameters = new Dictionary<string, string>();

        // URL をデコードして動作を決定します
        // この例では、リンクが以下のようにフォーマットされることを前提としています
        // unitydl://mylink?scene1
        string queryString = url.Split("?"[0])[1];
        string[] dataTexts = queryString.Split("&"[0]);
        foreach (string dataText in dataTexts)
        {
            string[] data = dataText.Split("="[0]);
            parameters.Add(data[0], data[1]);
        }
        
        // URLから取得したパラメーターをテキストメッセージに表示します
        string message = "";
        foreach (KeyValuePair<string, string> parameter in parameters)
        {
            message += parameter.Key + ": " + parameter.Value + "\n";
        }
        _text.text = message;
    }
}

コンポーネントを設定してテキストオブジェクトへの参照を設定します。

今回は手順の簡略化のため、アプリ自身がURIを開くようにしました。
シーンにボタンオブジェクトを追加し、以下のURIを開くスクリプトを設定しました。

testquestapp://redirect?id=1&name=holomon

・BrowserTest.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BrowserTest : MonoBehaviour
{
    /// <summary>
    /// 指定のURLをウェブブラウザで開く
    /// </summary>
    /// <returns></returns>
    public void OpenBrowser()
    {
        var uri = new System.Uri("testquestapp://redirect?id=1&name=holomon");
        Application.OpenURL(uri.AbsoluteUri);
    }
}


ビルドと動作確認

以下の記事を参考にプロジェクトのビルドとQuest3へのデプロイを実行してください。
bluebirdofoz.hatenablog.com

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

すると登録したURIスキームの呼び出しでアプリが再起動され、クエリ文字列で引き渡されたパラメータが取得できました。