深层链接是直接指向应用程序内部内容的链接。Unity 使用 Application.absoluteURL
属性和 Application.deepLinkActivated
事件在以下平台上支持深层链接:
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:
Application.absoluteURL
。Application.deepLinkActivated
事件。例如,可以将以下代码附加到位于启动场景中的游戏对象:
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 进行响应的过程取决于具体平台。
有两种方法可以让应用程序对深层链接做出反应:URL 方案和通用链接。
要添加 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.
要启用深层链接,需要设置一个覆盖标准应用程序清单的特制过滤器,以便为活动 (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。
要将自定义 URI 方案添加到应用程序,请按照以下步骤操作:
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>