深度链接是将用户带到应用程序内特定位置(而不是网站)的超链接。当用户选择深度链接时,应用程序将在指定位置打开,例如 Unity 应用程序中的特定场景场景包含游戏的环境和菜单。可以将每个唯一的场景文件视为一个独特的关卡。在每个场景中,您可以放置环境、障碍物和装饰,从而设计和构建游戏的各个部分。更多信息
参见 术语表。Unity 使用 Application.absoluteURL 属性和 Application.deepLinkActivated 事件来支持深度链接。
在处理深度链接之前,您需要配置应用程序以对其做出反应。配置应用程序以对特定 URL 做出反应的过程是特定于平台的。Unity 支持以下平台的深度链接:
有两种方法可以处理深度链接,具体取决于应用程序的当前状态:
在这两种情况下,都使用 Application.absoluteURL 选择要在应用程序中打开的场景。
以下代码示例展示了如何根据应用程序的当前状态处理深度链接。
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);
}
}
要测试深度链接,请执行以下步骤:
这是一个您可以用来测试深度链接的示例 HTML 文件。要重定向链接,请更改其中一个 <a>
元素中的 href
属性。
<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>