Unity WebGL下System.Net/System.Net.Sockets异步方法等价替代方案咨询
Unity WebGL 平台Google OAuth授权实现方案
核心前提说明
WebGL运行在浏览器沙盒环境中,原生不支持端口监听、本地进程启动、原生Socket调用,你原来桌面端使用的本地回环端口监听授权回调的逻辑完全不适配Web平台,需要更换为Web端专属的OAuth 2.0授权流,不需要寻找和桌面端API完全一致的替代,调整整体实现逻辑即可达到相同的授权效果。
逐点替换不受支持的API
- 替代
System.Diagnostics.Process.Start(authorizationRequest)
直接使用Unity原生的Application.OpenURL(authorizationRequest)接口即可,WebGL平台下该接口会自动在当前浏览器新开标签页跳转授权地址,和桌面端启动系统默认浏览器打开地址的效果完全一致。 - 替代
IPAddress.Loopback、HttpListener、GetContextAsync整套本地监听逻辑
这套本地端口监听回调的逻辑在Web端完全不需要,调整授权回调逻辑即可:- 先在Google Cloud控制台的OAuth客户端配置中,将授权重定向URI修改为你WebGL项目部署的线上域名地址
- 代码中将
redirectURI的值替换为上面配置的线上地址 - 用户授权完成后会自动跳转回你的WebGL应用页面,直接通过Unity提供的
Application.absoluteURL属性就能拿到当前页面的完整地址,解析地址中的query参数即可获取授权返回的code、state字段,不需要额外做端口监听
其余适配调整
- 所有网络请求不要使用
System.Net下的相关类,统一替换为Unity原生的UnityWebRequest,该类对WebGL平台做了完整适配,支持异步调用和协程两种使用方式 - 如果你使用的Unity版本在2020及以上,原来的async/await异步逻辑不需要大范围修改,WebGL已经原生支持该语法
- Web端OAuth流默认不支持
access_type=offline参数,无法拿到refresh_token,如果你需要长期授权,可以额外搭建后端服务中转授权请求,前端只需要和自己的后端交互即可避免跨域和refresh_token获取问题
内容的提问来源于stack exchange,提问作者John B
相关产品推荐
相关产品推荐

