MRが楽しい

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

スキームURIを使ってUWPの自作アプリを開く その2 URLからパラメータを受け渡す

本日は UWP の小ネタ枠です。
スキームURIを使ってUWPの自作アプリを開く方法を記事にします。
本記事ではアプリの起動に加えてURLからパラメータを受け渡してみます。

前回記事

以下の前回記事の続きです。
bluebirdofoz.hatenablog.com

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

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;
    }
}

前回作成したサンプルシーンにコンポーネントを設定してテキストオブジェクトへの参照を設定しておきます。

PCにアプリをデプロイします。

次に呼び出し側のURLにパラメータを設定します。
deeplinkapp のスキームを起動するサンプルスクリプトのURLを以下のようにクエリ文字列を含んだものに変更しました。

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

・OpenURLComponent.cs

using UnityEngine;

public class OpenURLComponent : MonoBehaviour
{
    public void OpenApplicationURL()
    {
        var url = "deeplinkapp://redirect?id=1&name=holomon";
        Application.OpenURL(url);
    }
}

シーンを再生してボタンを押下します。
すると登録したスキーム名をもとに先ほどPCにデプロイしたアプリが起動され、クエリ文字列で引き渡したパラメータが確認できました。