问题描述

我们项目集成了华为联机对战SDK,在使用华为联机对战SDK内部方法时需要先调用联机对战初始化方法Client.Init初始化华为联机对战SDK。我们调用这个方法之后在Unity Editor里面运行项目,初始化方法可以调用成功,但是打包成apk在Android手机上运行时,初始化方法调用不成功,返回错误码1001。

图片

参考文档:初始化SDK

问题分析

查看华为官方的错误码文档,对1001错误码的解释是:请求参数错误,请检查接口请求参数。

图片

但是,若是请求参数错误,在Unity Editor里也应该访问不成功才对。不清楚是哪里出问题了,联系了华为技术支持,技术支持问我们:

  1. 有没有在调用初始化方法之前设置证书路径和日志打印路径:

    图片

    检查之后发现,已经加上了。

  2. 打包时用的是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文件夹下。

  3. 我们使用了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的初始化方法,问题成功解决。


华为开发者论坛
352 声望56 粉丝

华为开发者论坛是一个为开发者提供信息传播、开发交流、技术分享的交流空间。开发者可以在此获取技术干货、华为源码开放、HMS最新活动等信息,欢迎大家来交流分享!