# ディープリンク

> Explains about enabling deep linking within your application and the platforms that support this feature.

ディープリンクとは、ウェブサイトではなくアプリケーション内の特定の場所にユーザーを遷移させるハイパーリンクです。ユーザーがディープリンクを選択すると、指定された場所 (例: Unity アプリケーションの特定のシーンなど) でアプリケーションが開きます。Unity は [Application.absoluteURL](/engine/6000.0/script-reference/unity-engine/application/absolute-url.md) プロパティと [Application.deepLinkActivated](/engine/6000.0/script-reference/unity-engine/application/deep-link-activated.md) イベントを使用してディープリンクをサポートします。

## ディープリンクの有効化##enable-deep-linking

ディープリンクを処理する前に、アプリケーションを、ディープリンクに反応するように設定する必要があります。特定の URL に反応するようにアプリケーションを設定するプロセスは、プラットフォームによって異なります。Unity は、以下のプラットフォームでディープリンクをサポートしています。

* [iOS](/engine/6000.0/manual/platform-specific/iphone/ios-developing/deep-linking-ios.md)
* [Android](/engine/6000.0/manual/platform-specific/android/developing/deep-linking.md)
* [ユニバーサル Windows プラットフォーム](/engine/6000.0/manual/platform-specific/windows-store/uwp-developing/deep-linking-universal-windows-platform.md)
* [macOS](/engine/6000.0/manual/platform-specific/apple-mac/macosdevelopment/deep-linking-macos.md)

## ディープリンクの使用##use-deep-links

ディープリンクは、アプリケーションの現在の状態に応じて 2 つの方法で処理できます。

* アプリケーションが実行されていない場合: デバイスがアプリケーションを開き、[Application.absoluteURL](/engine/6000.0/script-reference/unity-engine/application/absolute-url.md) にデバイスがアプリケーションに渡すディープリンク URL が格納されます。
* アプリケーションが実行されている場合: デバイスがアプリケーションに URL を渡し、ディープリンク URL をパラメーターとして使用して [Application.deepLinkActivated](/engine/6000.0/script-reference/unity-engine/application/deep-link-activated.md) イベントを呼び出します。[Application.absoluteURL](/engine/6000.0/script-reference/unity-engine/application/absolute-url.md) が同時に更新されます。

どちらの場合も、[Application.absoluteURL](/engine/6000.0/script-reference/unity-engine/application/absolute-url.md) を使用して、アプリケーションで開くシーンを選択します。

以下のコードサンプルは、アプリケーションの現在の状態に応じてディープリンクを処理する方法を示しています。

```lang-csharp
using UnityEngine;
using UnityEngine.SceneManagement;

public class ProcessDeepLinkMngr : MonoBehaviour
{
    public static ProcessDeepLinkMngr Instance { get; private set; }
    public string deeplinkURL;
    private void Awake()
    {
        if (Instance == null)
        {
            Instance = this;                
            Application.deepLinkActivated += onDeepLinkActivated;
            if (!string.IsNullOrEmpty(Application.absoluteURL))
            {
                // Cold start and Application.absoluteURL not null so process Deep Link.
                onDeepLinkActivated(Application.absoluteURL);
            }
            // Initialize DeepLink Manager global variable.
            else deeplinkURL = "[none]";
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            Destroy(gameObject);
        }
    }
 
    private void onDeepLinkActivated(string url)
    {
        // Update DeepLink Manager global variable, so URL can be accessed from anywhere.
        deeplinkURL = url;
        
// Decode the URL to determine action. 
// In this example, the application expects a link formatted like this:
// unitydl://mylink?scene1
        string sceneName = url.Split('?')[1];
        bool validScene;
        switch (sceneName)
        {
            case "scene1":
                validScene = true;
                break;
            case "scene2":
                validScene = true;
                break;
            default:
                validScene = false;
                break;
        }
        if (validScene) SceneManager.LoadScene(sceneName);
    }
}
```

## ディープリンクのテスト##test-a-deep-link

ディープリンクをテストするには、以下の手順に従います。

1. テストするディープリンクを含む [HTML ファイル](#testing-example-html-file) を作成します。
2. ローカルウェブサーバーで HTML ファイルをホストします。
3. デバイスのウェブブラウザーから HTML ファイルを開き、ディープリンクをクリックします。

### HTML ファイルの例##example-html-file

これは、ディープリンクをテストするために使用できる HTML ファイルの例です。リンクをリダイレクトするには、いずれか 1 つの `<a>` 要素内の、`href` 属性を変更してください。

```lang-html
<html>
	<head>
       <meta charset="utf-8">
    </head>
    <body >
       <h1>My Deep Link Test page</h1>
       <p><a href="unitydl://mylink">Launch</a></p>
       <p><a href="unitydl://mylink?parameter">Launch with Parameter</a></p>
    </body>
</html>
```
