深度链接在Unity3D中的使用


前言

最近公司项目由于需要发布多个平台: Android,IOS,PC,WebGL,项目里面的第三方授权登录需要同时适配多个平台,
要为每一个平台都单独接入对应平台的SDK想想都脑壳疼。最后决定,所有平台都统一走网页授权登录。
提示:关于网页授权登录就不在这里说了,如果大家甘兴趣,我单独开一篇专门讲如何实现。
要实现网络授权,有一个步骤是必不可少的,就是当U3D打开浏览去访问授权地址的时候,如果授权成功或失败,手机的浏览器会打开应用并把数据授权的结果返回的,这时候就不得不使用到深度链接这个技术了


提示:以下是本篇文章正文内容,下面案例可供参考

一、深度链接是什么?

“深度链接”又名“Deeplink”,是一种能将用户直接从网页带到App指定页面的技术。
除了从网页跳到APP,还有从APP1跳到APP2

二、如何在Unity3D中使用

1.发起方

这里拿APP跳转APP为例子说明。既然是APP之间的跳转,那我们先创建两个U3D工程。
这里我们首先创建发起方,UI就创建一个Button就行,用于点击按钮触发跳转事件。
代码也非常简单,如下

public class DeepLinkOpen : MonoBehaviour
{
    private const string url = "sukkScheme://open?name=sukk&age=99&msg=DeepLink!";
    
    public void OpenApp()
    {
        Application.OpenURL(url);   
    }
}

把代码中的OpenApp 注册到按钮的点击事件即可,可以看到代码非常简单,重点关注URL字段的内容
这个URL实际分为3部分
1,sukkScheme
2, ://open
3. ?name=sukk&age=99&msg=DeepLink!

第一部分代表的是需要跳转到哪个APP(至于在哪里设置,之后会详细讲解)
第二部分代表的是需要执行什么操作,这里open的意思就是打开应用,这个操作不单单只有Open,还有其他
第三部分代表需要传输的数据,这个部分可以不填

2.接收方

接着我们来创建接收方,UI方面就创建一个Text,用来显示一下发起方传输过来的数据就行了
代码如下

public class ReceiveDeepLink : MonoBehaviour
{    
    private Text txt_msg;

    private void Awake()
    {
        txt_msg = GameObject.Find("Canvas/Text (Legacy)").GetComponent<Text>();        
        Debug.Log($"是否接收到深度链接:"+Application.absoluteURL);
    }

    private void Start()
    {
        Application.deepLinkActivated += OnDeepLinkActivated;
        
        //检测应用是否是通过深度链接启动
        if (!string.IsNullOrEmpty(Application.absoluteURL))
        {
            OnDeepLinkActivated(Application.absoluteURL);
        }
    }
    
    
    private void OnDeepLinkActivated(string deepLink)
    {
        Debug.Log("应用检测到深度链接"+deepLink);
        // 解析URL参数
        Uri uri = new Uri(deepLink);
        string host = uri.Host;
        string path = uri.AbsolutePath;
        var queryParams = uri.Query;

        Debug.Log($"host:{host},path:{path},queryParams:{queryParams}");
        
        var query = uri.Query.TrimStart('?').Split('&');
        for (int i = 0; i < query.Length; i++)
        {
            //解析数据,将数据显示在Text上
            var curData = query[i].Split("=");
            Debug.Log($"key:{Uri.UnescapeDataString(curData[0])},value:{Uri.UnescapeDataString(curData[1])}");
            txt_msg.text += "\n" + $"key:{Uri.UnescapeDataString(curData[0])},value:{Uri.UnescapeDataString(curData[1])}";
        }
    }
}

将脚本挂载在对象上就行了,这里解析一下几个重点
1,上述代码中 Application.deepLinkActivated += OnDeepLinkActivated
这里面注册一个函数,这个函数的调用时机是,当有其他应用通过深沉链接去打开该应用时,这个函数就会触发
,这时候unity会给你返回深度链接,如上诉的发起方的"sukkScheme://open?name=sukk&age=99&msg=DeepLink!"
这个字符串
2,Application.absoluteURL,当如果该应用是通过深层链接唤起时,由于该程序之前没打开过,就不会注册1中的函数,所以要通过这个字段,来判断该程序第一次打开时,是否是通过深度链接唤起的
3,接收到深层链接之后,如果有数据,我们就可以解析发起方发送过来的数据了. 我这里定义的是?后面的就是数据,每一条数据由&号分割。 = 前面是数据的key,后面是数据的value

3.配置AndroidManifest

经过上面两个步骤,并不能进行跳转,因为没有给被跳转的应用定义一个标识,还记得 1.发起方 中的第一部分吗?sukkScheme
这里就是定义了深度链接的标识,这里明确告诉了系统,我需要打开标识为 sukkScheme的程序,那这个在U3D的哪里定义呢。android和ios是不一样的,这里拿Android 为例子。打开U3D中的AndroidManifest
在其中添加

<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="sukkScheme" />
</intent-filter>

其中 “data android:scheme=“sukkScheme” 就定义了 这个应用的深沉链接的标识是sukkScheme
好了,到这里就可以分别在两个项目打包apk测试了:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

由上图可以看出,接收方成功被打开,而且接收参数成功了,关于深度链接还有很多别的应用,这里只是在做项目的过程中遇到了,刚好记录一下,欢迎各位大佬留言补充

### 如何在 Unity 中接入 Deep 相关技术或服务 #### 接入深度链接 (Deeplink) 深度链接能够使用户直接从外部源(如网页或其他应用程序)进入Unity应用内的特定位置。为了实现在Unity3D使用深度链接,发起方需按照如下方式操作[^1]: 对于Android平台,在`AndroidManifest.xml`文件内定义意图过滤器来处理来自其他应用的请求;而对于iOS,则是在项目的Info.plist配置URL Scheme。 ```xml <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <!-- 替换为自己的scheme --> <data android:scheme="yourappname"/> </intent-filter> ``` 当接收到带有匹配Scheme的URI时,Unity会触发相应的事件处理器函数,允许开发者解析传入的数据并将玩家导向至目标场景或对象。 #### 调用DeepSeek API 实现 AI 对话功能 要利用DeepSeek提供的自然语言处理能力构建聊天机器人或者其他形式的人机交互界面,可以依照以下方法集成其API接口[^2]: 首先安装必要的依赖库,通常通过NuGet包管理工具完成HTTP通信所需的HttpClient类及其他辅助组件引入工作。接着创建专门用于封装API调用逻辑的服务类,负责发送RESTful请求以及接收响应数据。 ```csharp using System; using System.Net.Http; using Newtonsoft.Json.Linq; public class DeepSeekService { private readonly string _apiKey = "YOUR_API_KEY"; private static HttpClient client = new HttpClient(); public async Task<string> GetResponseAsync(string userInput){ var requestUrl = $"https://api.deepseek.com/v1/chat?input={userInput}&key={_apiKey}"; HttpResponseMessage response = await client.GetAsync(requestUrl); if(response.IsSuccessStatusCode){ string jsonResponse = await response.Content.ReadAsStringAsync(); JObject resultJson = JObject.Parse(jsonResponse); return resultJson["response"].ToString(); }else{ throw new Exception($"Error occurred while calling the service: {response.StatusCode}"); } } } ``` 最后一步就是在UI控件上绑定事件监听器,捕获用户的键盘输入并将其传递给上述提到的服务实例进行处理,最终展示由DeepSeek生成的回答内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值