facebook twitter hatena line email

Unity/URLからアプリ起動/基本

提供: 初心者エンジニアの簡易メモ
移動: 案内検索

OS別のシステム

  • iOS → Universal Links(ユニバーサルリンク)
  • Android → App Links / Intent Filter(ディープリンク)

動作図解

[ユーザー] ──URLタップ──▶ [Android OS/ IOS]
                                │
                                ├─ アプリある? → Yes → 直で起動
                                │
                                └─ アプリない → URL保存(パラメータ付)(アプリじゃなく端末OSがやる)
                                              │
                                              ▼
                                      [Google Play ストア / Appストア]
                                              │
                                     インストール&起動
                                              │
                                              ▼
                              OS が保存していた DeepLink を渡す
                                              │
                                              ▼
                                          [アプリ]

Unity側にdeepLinkのスクリプト追加

using UnityEngine;

public class SampleScene : MonoBehaviour
{
    string deepLinkURL;
    void Start()
    { 
        // アプリが起動中にリンクで開かれた場合のみ
        Application.deepLinkActivated += HandleDeepLink;
        // アプリがディープリンクで起動された場合のみ
        if (!string.IsNullOrEmpty(Application.absoluteURL))
        {
            deepLinkURL = Application.absoluteURL;
            Debug.Log("DeepLink: " + deepLinkURL);
        }
    }
    // アプリが開いたままのときのディープリンクを受信したとき
    void HandleDeepLink(string url)
    {
        deepLinkURL = url;
        Debug.Log("DeepLink Activated: " + url);
    }
}

deepLinkないのユーザidなどを取得する場合

以下のようなurlだったとき ttps://example.com/link/index/userId/123

using UnityEngine;
using UnityEngine.UI;
using System.Text.RegularExpressions;

public class SampleScene : MonoBehaviour
{
    [SerializeField] Text deepLinkText;
    [SerializeField] Text userIdText;
    string deepLinkURL;
    void Start()
    { 
        // アプリが起動中にリンクで開かれた場合のみ
        Application.deepLinkActivated += HandleDeepLink;
        // アプリがディープリンクで起動された場合のみ
        if (!string.IsNullOrEmpty(Application.absoluteURL))
        {
            deepLinkURL = Application.absoluteURL;
            Debug.Log("DeepLink: " + deepLinkURL);
            deepLinkText.text = "DeepLink URL:\n" + deepLinkURL;
            userIdText.text = "UserId: " + GetUserIdByUrl(deepLinkURL);
        }
    }
    // アプリが開いたままのときのディープリンクを受信したとき
    void HandleDeepLink(string url)
    {
        deepLinkURL = url;
        Debug.Log("DeepLink Activated: " + url);
        deepLinkText.text = "DeepLink Activated URL:\n" + deepLinkURL;
        userIdText.text = "UserId: " + GetUserIdByUrl(deepLinkURL);
    }

    string GetUserIdByUrl(string url)
    {
        Match m = Regex.Match(url, @"userId\/(\d+)$");
        if (m.Success)
        {
            return m.Groups[1].Value;
        }
        return "";
    }

}