问题描述
我们项目集成了华为联机对战SDK,在使用华为联机对战SDK内部方法时需要先调用联机对战初始化方法Client.Init初始化华为联机对战SDK。我们调用这个方法之后在Unity Editor里面运行项目,初始化方法可以调用成功,但是打包成apk在Android手机上运行时,初始化方法调用不成功,返回错误码1001。
参考文档:初始化SDK
问题分析
查看华为官方的错误码文档,对1001错误码的解释是:请求参数错误,请检查接口请求参数。
但是,若是请求参数错误,在Unity Editor里也应该访问不成功才对。不清楚是哪里出问题了,联系了华为技术支持,技术支持问我们:
有没有在调用初始化方法之前设置证书路径和日志打印路径:
检查之后发现,已经加上了。
打包时用的是IL2CPP? 还是Mono?可在Unity中“File > Build Settings… > Player Settings… > Scripting Backend” 处查看。检查之后发现我们用的是IL2CPP。技术支持表示目前联机对战SDK还不支持IL2CPP,改成Mono试一下。改成Mono之后初始化还是报错:
这个异常,参考了这个帖子解决了:华为联机对战服务Unity SDK初始化接口报错:鉴权失败,Operation is not supported on this platform,但是又有了一个新的异常,返回错误码-1:
错误码文档中的解释是:服务端处理失败。
继续咨询华为技术支持,经过不断的沟通尝试,最后定位到问题原因是:华为联机对战SDK内部使用System.Net.Http.WebRequest.dll内的方法实现网络请求,而我们项目中没有这个dll,只能使用Unity自带的api来实现网络请求,找不到联机对战SDK内部需要的方法,所以就出现了异常。我们建议华为可以使用Unity的api,这样兼容性会更好。华为技术支持表示他们用不了Unity的api。所以建议我们下载 4.5以上版本的System.Net.Http.WebRequest.dll放在项目的Plugins文件夹下。我们使用了System.Net.Http.WebRequest.dll之后,在手机上运行依然报错:
华为技术支持让我们检查Unity中“File > Build Settings… > Player Settings… > Managed Stripping Level ”配置的是不是Disabled,如果不是,需要改成Disabled。
问题解决
我们使用了System.Net.Http.WebRequest.dll并且把Managed Stripping Level改成Disabled之后,打包apk在手机上运行,可以成功调用华为联机对战SDK的初始化方法,问题成功解决。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。