Version: 2020.3
将“Unity 用作库”用于其他应用程序
Xcode frame debugger Unity integration

启用深层链接

深层链接是直接指向应用程序内部内容的链接。Unity 使用 Application.absoluteURL 属性和 Application.deepLinkActivated 事件在以下平台上支持深层链接:

  • Android
  • iOS
  • 通用 Windows 平台 (UWP)

Unity calls the Application.deepLinkActivated event when an application is activated from a deep link URL. To process deep links in this scenario, you can:

例如,可以将以下代码附加到位于启动场景中的游戏对象:

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 app expects a link formatted like this:
// unitydl://mylink?scene1
        string sceneName = url.Split("?"[0])[1];
        bool validScene;
        switch (sceneName)
        {
            case "scene1":
                validScene = true;
                break;
            case "scene2":
                validScene = true;
                break;
            default:
                validScene = false;
                break;
        }
        if (validScene) SceneManager.LoadScene(sceneName);
    }
}

配置应用程序来对特定 URL 进行响应的过程取决于具体平台。

iOS

有两种方法可以让应用程序对深层链接做出反应:URL 方案和通用链接。

URL 方案

要添加 URL 方案,请遵循以下步骤:

1.打开 iOS Player Settings 窗口(菜单:Edit > Project Settings > Player Settings,然后选择 iOS)。 2.选择 Other,然后向下滚动到 Configuration。 3.展开 Supported URL schemes 部分,然后在 Element 0 字段中,输入与您的应用程序相关联的 URL 方案(例如 unitydl)。

这样使应用程序可以打开任何以 unitydl:// 开头的链接,并允许您处理 Application.deepLinkActivated 事件中的 URL。

通用链接

You can’t set up an app to use universal links from Unity Editor, because this requires an external website. For more information, see Apple documentation on Universal Links.

Android

要启用深层链接,需要设置一个覆盖标准应用程序清单的特制过滤器,以便为活动 (Activity) 包含特定的 intent-filter 部分。 最简单的方法是将以下 AndroidManifest.xml 文件放入项目的 Assets/Plugins/Android 文件夹中。构建应用程序时,Unity 将自动处理此文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
  <application>
    <activity android:name="com.unity3d.player.UnityPlayerActivity" android:theme="@style/UnityThemeSelector" >
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
      <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="unitydl" android:host="mylink" />
      </intent-filter>
    </activity>
  </application>
</manifest>

这样使应用程序可以打开任何以 unitydl:// 开头的链接,并允许您处理 Application.deepLinkActivated 事件中的 URL。

通用 Windows 平台 (UWP)

要将自定义 URI 方案添加到应用程序,请按照以下步骤操作:

1.打开 UWP Player Settings 窗口(菜单:Edit > Project Settings > Player Settings,然后选择 UWP)。 2.选择 Publishing Settings,然后向下滚动到 Protocol。 3.在 Name 字段中,输入 unitydl

这样使应用程序可以打开任何以 unitydl:// 开头的链接。

测试深层链接

要测试深层链接,可以创建一个 HTML 文件,将此文件托管在本地 Web 服务器上,然后从设备上的 Web 浏览器访问这个文件:

<html>
<head>
   <meta http-equiv=Content-Type content="text/html; charset=windows-1252">
</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>
将“Unity 用作库”用于其他应用程序
Xcode frame debugger Unity integration