游戏接入华为SDK4.0(记录:实名认证问题、错误码查询和支付/游戏/账号demo下载地址)

一、问题汇总(持续更新中)

1、createPurchaseIntentWithPrice 报 -1: IAP_APP_NOT_EXISTED

解决方法:
需要在AGC上打开相关IAP服务的,按照这个文档:https://developer.huawei.com/consumer/cn/doc/distribution/app/agc-enable_service
注意开通服务后,支付验证签名的密钥也在这里,记得更新密钥,不然也会导致支付失败

2、HMS SDK4.0游戏浮标(EMUI9.1以上)不显示的问题

解决方法:
(1)确认是否是EMUI 9.1及以上版本,在9.1以上版本终端测试浮标功能,需要通过“设置-应用-应用助手-游戏空间”将应用加入游戏空间中。
(2)确认是否添加混淆文件

注意:9.1以上的浮标和9.1以下的浮标显示不一样,这不是bug

3、防沉迷和实名认证

(1)防沉迷
防沉迷中提供了submitPlayerEvent上报玩家进入游戏事件,返回了sessionId,sessionid可以用来查询getPlayerExtraInfo接口,该接口返回玩家附加信息,包含是否成年。但是比较坑的是当你未实名或者是已成年的时候,无法触发华为的防沉迷机制,因此submitPlayerEvent接口会直接异常报错7022(//该用户为成年用户或未实名,不支持实名时长统计功能。)这样就无法正确的得到sessionid,同样也就无法使用getPlayerExtraInfo接口来查询玩家的实名信息,巨坑啊

(2)实名认证:参照demo使用getPlayerCertificationInfo接口查询。如果遇到已实名但是返回仍然是-1(未实名),请检查下实名验证方式中是否有任意一个已验证,我这边遇到的问题就是账号显示已经实名,但是我的实名验证方式没有任何一个验证,因此华为这边返回的是我未实名。添加任何一种验证方式即可(身份证或者银行卡)

注意:实名认证页面的拉起是HMS SDK处理的,开发者不需要做额外的操作。
实名政策刚开始执行,这个功能现阶段还没有开放给新开发的游戏进行测试。对于已上架的游戏,考虑到现有用户的体验,现阶段实名认证功能通过后台控制正在分阶段放开。
如果您的应用已上架,并且需要马上开通实名认证的功能,可以跟华为的运营人员联系优先处理。以上是华为的回复,就是说4.0的实名制是不需要游戏单独实现的,需要开启强实名需要发邮件到指定邮箱,详细看官网api

4、接入HMS 4.0自检apk浮标和登录告警

解决方法:如果缺人浮标和登录是显示正常。检查下混淆文件是否添加。如果已添加可忽略警告继续提交

二、错误码自查

1、登录状态码

具体参照:游戏登录通用错误码: 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;

2、支付状态码

具体参照:支付通用错误码: 支付通用错误码 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;	// 用户触发风控,交易被拒绝

3、游戏状态码

具体参照:游戏通用错误码: 游戏通用错误码 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;	//游戏服务授权失败,用户未同意应用市场协议

三、DEMO下载地址

接入华为的时候发现文档很多,找的时候很容易忘记或者搞乱,特此记录一下:

1、支付demo下载

https://developer.huawei.com/consumer/cn/doc/development/HMS-Examples/iap-example-v4

2、游戏demo下载

https://developer.huawei.com/consumer/cn/doc/development/HMS-Examples/game-example-v4

3、账号服务demo下载

https://developer.huawei.com/consumer/cn/doc/development/HMS-Examples/account-example-v4

四、HSMAgent在4.0的时候取消

HSMAgent在4.0的时候已经取消,从2.0升级4.0的时候主要就是自己从新封装了下调用的各个API,替换下里面的方法就可以了。

你可能感兴趣的:(Android)