# 教材 平台 軟體跳轉相關
無論是平台或教材,跳轉都是開啟事先設定好的 `URI 連結` ,只要開啟軟體的 `URI 連結` 即可跳轉。
只要將 `URI 連結` 視為一般網址使用即可,在網頁瀏覽器直接輸入 `URI 連結` 也可測試開啟。
# A. 如何跳轉 DeepLink 到目標軟體 ➡️
以下範例皆已開啟 EWova 為範例
自定義跳轉連結為 `ewova://`
## A1. Windows PC
:::warning
⚠️ EWova 必須打開執行過一次才能跳轉
( 軟體需要執行過一次才能正確套用跳轉到 Windows註冊表,關於這點還在想辦法處理...
未來可能會透過 Installer 安裝軟體時就預先登記註冊表 )
:::
- Unity 環境下
```csharp
Application.OpenURL("ewova://");
```
- 瀏覽器 環境下 以 `EWova` 為例

## A2. Android and 一體機
:::warning
⚠️ 目標軟體必須事先安裝到裝置內 ( 安裝即可 無需事先啟動 )
:::
- Unity 環境下
```csharp
Application.OpenURL("ewova://");
```
- VR 瀏覽器 環境下 ( 有較嚴格的大小寫問題 )

# B. 設定你的專屬連結 DeepLink 讓別人跳轉 ⬅️
## B1. Windows PC
:::danger
⛔ 目前無法直接透過簡單的方法設定
我是購買以下 [Deep linking for Windows (Standalone/EXE)](https://assetstore.unity.com/packages/tools/integration/deep-linking-for-windows-standalone-exe-264033) 來額外做處理的
:::
## B2. Android and 一體機
:::warning
⚠️ Scheme 請盡量全小寫
Android 環境有滿嚴格的大小寫問題,全小寫為避免不可控因素
若有 `uses-permission` 需求請自行擴增
:::
1. 創建 `Editor 資料夾` 在任一位置,並建立一個空 `Script`
可直接參照下圖

1. 打開你的 script 後,修改 `MY_DEEPLINK_SCHEME` 常數到你的 Scheme
```csharp
using System.IO;
using System.Xml;
using UnityEditor.Android;
using UnityEngine;
public class MyDeepLinkPostProcessor : IPostGenerateGradleAndroidProject
{
// 請修改為你的 Scheme ↓
private const string MY_DEEPLINK_SCHEME = "ewova";
// 確保 '插入 deeplink' 的邏輯 是最後執行
public int callbackOrder => 10000;
public void OnPostGenerateGradleAndroidProject(string path)
{
string manifestPath = Path.Combine(path, "src", "main", "AndroidManifest.xml");
if (!File.Exists(manifestPath))
{
Debug.LogError("AndroidManifest.xml not found: " + manifestPath);
return;
}
var doc = new XmlDocument();
doc.Load(manifestPath);
XmlNamespaceManager nsManager = new XmlNamespaceManager(doc.NameTable);
nsManager.AddNamespace("android", "http://schemas.android.com/apk/res/android");
XmlNode manifestNode = doc.SelectSingleNode("/manifest");
XmlNode applicationNode = manifestNode.SelectSingleNode("application");
XmlNode activityNode = applicationNode.SelectSingleNode("activity");
XmlElement intentFilter = doc.CreateElement("intent-filter");
XmlElement action = doc.CreateElement("action");
action.SetAttribute("name", "http://schemas.android.com/apk/res/android", "android.intent.action.VIEW");
intentFilter.AppendChild(action);
XmlElement categoryDefault = doc.CreateElement("category");
categoryDefault.SetAttribute("name", "http://schemas.android.com/apk/res/android", "android.intent.category.DEFAULT");
intentFilter.AppendChild(categoryDefault);
XmlElement categoryBrowsable = doc.CreateElement("category");
categoryBrowsable.SetAttribute("name", "http://schemas.android.com/apk/res/android", "android.intent.category.BROWSABLE");
intentFilter.AppendChild(categoryBrowsable);
XmlElement data = doc.CreateElement("data");
data.SetAttribute("scheme", "http://schemas.android.com/apk/res/android", MY_DEEPLINK_SCHEME);
intentFilter.AppendChild(data);
activityNode.AppendChild(intentFilter);
doc.Save(manifestPath);
Debug.Log($"已完成將你的 DeepLink {MY_DEEPLINK_SCHEME}:// 加入到 AndroidManifest.xml");
}
}
```
3. 現在你可以透過你專屬的 `URI 連結` 來開啟你的軟體了!
```csharp
Application.OpenURL("ewova://");
```