解决方法:
需要在AGC上打开相关IAP服务的,按照这个文档:https://developer.huawei.com/consumer/cn/doc/distribution/app/agc-enable_service
注意开通服务后,支付验证签名的密钥也在这里,记得更新密钥,不然也会导致支付失败
解决方法:
(1)确认是否是EMUI 9.1及以上版本,在9.1以上版本终端测试浮标功能,需要通过“设置-应用-应用助手-游戏空间”将应用加入游戏空间中。
(2)确认是否添加混淆文件
注意:9.1以上的浮标和9.1以下的浮标显示不一样,这不是bug
(1)防沉迷
防沉迷中提供了submitPlayerEvent上报玩家进入游戏事件,返回了sessionId,sessionid可以用来查询getPlayerExtraInfo接口,该接口返回玩家附加信息,包含是否成年。但是比较坑的是当你未实名或者是已成年的时候,无法触发华为的防沉迷机制,因此submitPlayerEvent接口会直接异常报错7022(//该用户为成年用户或未实名,不支持实名时长统计功能。)这样就无法正确的得到sessionid,同样也就无法使用getPlayerExtraInfo接口来查询玩家的实名信息,巨坑啊
(2)实名认证:参照demo使用getPlayerCertificationInfo接口查询。如果遇到已实名但是返回仍然是-1(未实名),请检查下实名验证方式中是否有任意一个已验证,我这边遇到的问题就是账号显示已经实名,但是我的实名验证方式没有任何一个验证,因此华为这边返回的是我未实名。添加任何一种验证方式即可(身份证或者银行卡)
注意:实名认证页面的拉起是HMS SDK处理的,开发者不需要做额外的操作。
实名政策刚开始执行,这个功能现阶段还没有开放给新开发的游戏进行测试。对于已上架的游戏,考虑到现有用户的体验,现阶段实名认证功能通过后台控制正在分阶段放开。
如果您的应用已上架,并且需要马上开通实名认证的功能,可以跟华为的运营人员联系优先处理。以上是华为的回复,就是说4.0的实名制是不需要游戏单独实现的,需要开启强实名需要发邮件到指定邮箱,详细看官网api
解决方法:如果缺人浮标和登录是显示正常。检查下混淆文件是否添加。如果已添加可忽略警告继续提交
具体参照:游戏登录通用错误码: loginstatus link.
详细解决见上面链接(官方文档的链接)
public static final int SIGN_IN_SUCCESS = 0;
public static final int CLEAR_TOKEN_SUCCESS = 0;
public static final int SIGN_IN_UNLOGIN = 2001;
public static final int SIGN_IN_AUTH = 2002; //应用尚未授权,需要授权。该错误码一般在silentSignIn接口中出现。使用API:HuaweiIdAuthService.getSignInIntent()进行授权登录。
public static final int SIGN_IN_PARAMS_ERROR = 2003; //调用方法的参数不合法,一般是方法使用不当。 请检查传入的参数。
public static final int SIGN_IN_CHECK_PASSWORD = 2004;
public static final int SIGN_IN_NETWORK_ERROR = 2005; //授权过程中发生网络错误。 请检查网络后重试。
public static final int SIGN_IN_NETWORK_UNDER_CONTROLED = 2007;
public static final int SIGN_IN_AUTH_SERVER_FAILED = 2009; //请求华为帐号服务器失败。 请选择“支持>技术支持>在线提单”提交问题,华为支持人员会及时处理。
public static final int CLEAR_ACCESSTOKEN_FAIL_NOT_MATCH = 2010;
public static final int ST_VALID = 0;
public static final int RESPONSE_RESULT_OK = 0;
public static final int SIGN_IN_CANCELLED = 2012; // 用户点击返回键,取消登录。
public static final int SIGN_IN_EXECUTING = 2013; //正在登录中,请不要再次登录。 等待授权登录结果或取消授权登录。
public static final int SIGN_IN_FAILED = 2014;
public static final int SIGN_IN_SDK_INNER_ERROR = 2015;
public static final int SMS_RETRIEVER_PARAM_FAILED = 2020;
具体参照:支付通用错误码: 支付通用错误码 link.
public static final int ORDER_STATE_SUCCESS = 0;
public static final int ORDER_STATE_FAILED = -1; //通用失败错误码, 若购买请求返回该错误码,建议通过obtainOwnedPurchases接口确认用户是否购买了该商品。
public static final int ORDER_STATE_CANCEL = 60000; //用户取消支付,记录订单号,待用户再次执行支付操作时再执行支付流程。
public static final int ORDER_STATE_PARAM_ERROR = 60001;//参数错误,包括无参。请检查请求参数是否遗漏,参数值格式是否正确。
public static final int ORDER_STATE_NET_ERROR = 60005; // 网络连接异常,应用向用户给出提示请用户检查网络。
public static final int ORDER_VR_UNINSTALL_ERROR = 60020;//VR APK未安装错误码,请先安装VR APK。VR支付场景返回。
public static final int ORDER_HWID_NOT_LOGIN = 60050; //未登录华为账号 需要处理登录场景。针对支付和isEnvReady接口,您可以通过status引导用户进行登录,其他接口则根据实际情况进行处理。
public static final int ORDER_PRODUCT_OWNED = 60051; //由于已经拥有该商品,购买失败。可通过obtainOwnedPurchases接口确认用户是否购买了该商品。
public static final int ORDER_PRODUCT_NOT_OWNED = 60052; //由于未拥有该商品,消耗失败。可通过obtainOwnedPurchases接口确认用户是否购买了该商品。
public static final int ORDER_PRODUCT_CONSUMED = 60053; //商品已经消耗,不能再次消耗。可通过obtainOwnedPurchaseRecord接口查询是否有该商品的消耗记录。
public static final int ORDER_ACCOUNT_AREA_NOT_SUPPORTED = 60054;//用户账号服务地暂不支持IAP,存在服务地支持IAP但由于服务出错返回该错误码的场景,可重新调用相关接口或联系华为技术进行确认。
public static final int ORDER_NOT_ACCEPT_AGREEMENT = 60055;//用户未同意支付协议,需要用户同意支付协议。
public static final int ORDER_HIGH_RISK_OPERATIONS = 60056; // 用户触发风控,交易被拒绝
具体参照:游戏通用错误码: 游戏通用错误码 link.
int GAME_STATE_SUCCESS = 0;
int GAME_STATE_FAILED = -1; //通用游戏接口失败返回码
int GAME_STATE_ERROR = 7001; //一般错误
int GAME_STATE_NETWORK_ERROR = 7002; //网络错误、应用市场服务地设置错误
int GAME_STATE_USER_CANCEL = 7003; //用户取消操作
int GAME_STATE_USER_CANCEL_LOGIN = 7004; //用户取消登录
int GAME_STATE_PARAM_ERROR = 7005; //请求参数错误
int GAME_STATE_NO_SUPPORT = 7006; //当前区域不提供游戏服务
int GAME_STATE_NOT_SUPPORT = 7010; //当前设备不支持
int GAME_STATE_PARAM_NULL = 7011; //入参为空
int GAME_STATE_CALL_REPEAT = 7012; //重复调用接口
int GAME_STATE_NOT_LOGIN = 7013; //未登录华为帐号
int GAME_STATE_DISAGREE_PROTOCOL = 7014;
int GAME_STATE_NOT_REGISTER = 7015; //未注册硬件能力
int GAME_STATE_REALNAME_REGISTER = 7016; //已经实名
int GAME_STATE_REGISTER_FAIL = 7017; //系统设置错误(游戏注册失败)
int GAME_STATE_ACHIEVEMENT_NO_UPGRADE = 7200; //成就未增长
int GAME_STATE_ACHIEVEMENT_NONEXIST = 7201; //成就未找到
int GAME_STATE_ACHIEVEMENT_UNLOCKED = 7202; //成就增长解锁
int GAME_STATE_ACHIEVEMENT_UNLOCK_FAILED = 7203; //成就解锁失败
int GAME_STATE_ACHIEVEMENT_NOT_SUPPORT = 7204; //应用助手不支持展示成就界面(EMUI版本低于9.0,应用助手未安装,应用助手版本号低于10.1,或应用未发布)
int GAME_STATE_RANKINGS_NOT_SUPPORT = 7205; //应用助手不支持展示排行榜界面(EMUI版本低于9.0,应用助手未安装,应用助手版本号低于10.3,或应用未发布)
int GAME_STATE_SAVEGAME_NOT_SUPPORT = 7212;
int GAME_STATE_NOT_INIT = 7018; //未调用初始化接口
int GAME_STATE_ACCOUNT_NOT_MATCH = 7019; //应用内登录帐号与系统当前帐号不一致
int GAME_STATE_GAME_NOT_FOUND = 7020; //成就未增长
int GAME_STATE_APPGALLERY_NOT_SUPPORT = 7024;
int GAME_STATE_CALL_FREQUENTLY = 7023; //接口调用过于频繁
int GAME_STATE_REALNAME_NOT_SUPPORT = 7022; //该用户为成年用户或未实名,不支持实名时长统计功能。
int GAME_STATE_REALNAME_CANCEL = 7021; //用户取消实名认证服务
int GAME_STATE_ARCHIVE_NO_DRIVE = 7219; //用户未开通云空间
int GAME_STATE_ARCHIVE_CONFLICT_LOST = 7207; //解决冲突时冲突不存在。
int GAME_STATE_ARCHIVE_OPEN_FAILED = 7208; //打开存档文件内容错误。
int GAME_STATE_ARCHIVE_DIRECTORY_FAILED = 7210; //提交存档时找不到或无法创建存档的根文件夹。
int GAME_STATE_ARCHIVE_NOT_FOUND = 7211; //不存在指定的存档。
int GAME_STATE_ARCHIVE_NOT_SUPPORT = 7212; //应用助手不支持存档界面(EMUI版本低于9.0,应用助手未安装,或应用助手版本号低于10.3,或应用未发布)
int GAME_STATE_ARCHIVE_NUM_MAX_LIMIT = 7213; //存档个数达到上限。
int GAME_STATE_ARCHIVE_SIZE_MAX_LIMIT = 7214; //存档图片或文件大小达到上限。
int GAME_STATE_RINGINGS_NOT_FOUND = 7215; //未找到排行榜数据。
int GAME_STATE_ARCHIVE_IMAGE_NOT_SUPPORT = 7216; //存档图片不支持该格式。
int GAME_STATE_ARCHIVE_COMMIT_CACHED = 7217; //存档未上传,只有本地缓存。
int GAME_STATE_GAMESERVICE_AUTHOR_FAILURE = 7218; //游戏服务授权失败,用户未同意应用市场协议
接入华为的时候发现文档很多,找的时候很容易忘记或者搞乱,特此记录一下:
https://developer.huawei.com/consumer/cn/doc/development/HMS-Examples/iap-example-v4
https://developer.huawei.com/consumer/cn/doc/development/HMS-Examples/game-example-v4
https://developer.huawei.com/consumer/cn/doc/development/HMS-Examples/account-example-v4
HSMAgent在4.0的时候已经取消,从2.0升级4.0的时候主要就是自己从新封装了下调用的各个API,替换下里面的方法就可以了。