前提条件
- 实现游戏初始化前,必须已经完成AppGallery Connect的配置准备,参见AGC控制台准备。
- 已完成集成SDK和配置混淆脚本。
注意事项
- 本场景中涉及的功能必须在应用启动时完成,而不是用户在进行登录、支付等操作时才完成,否则可能会导致应用审核被驳回。
- 如果游戏向用户提供了自己的用户隐私条款,init接口必须在用户同意条款后调用,init接口调用后HMS Core SDK还会弹出华为联运隐私协议,用户需要同意后才能进入游戏。
- 如果需要发布游戏到非中国大陆地区,请集成5.0.4.303版本游戏服务SDK,并在调用init接口时不传参数。
开发步骤
1、在Application的onCreate方法中添加如下代码,用于注册Activity的回调监听。
public class MyApplication extends Application{
@Override
public void onCreate(){
super.onCreate();
HuaweiMobileServicesUtil.setApplication(this);
}
}
编译前请确认应用的Manifest文件中application已经配置了Application类的名称,例如“android:name=".MyApplication"”。
2、调用JosApps.getJosAppsClient方法初始化JosAppsClient对象,并调用JosAppsClient.init(AppParams appParams)方法进行游戏服务SDK初始化和游戏公告初始化,AppParams中传入游戏应用对应的Scope(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM_GAME)。
- 发布中国大陆地区的游戏需要设置AntiAddictionCallback防沉迷回调,当满足以下条件时游戏会将结果回调给您。
1、已实名的未成年人在非规定游戏时间内登录游戏,游戏服务会弹框提示用户不允许游戏,玩家点击“确定”。
2、已实名的未成年人在规定时间内登录游戏,当游戏进行到21时,游戏服务会弹框提示玩家已到游戏时间,玩家点击“知道了”。
您需要在onExit方法中实现触发防沉迷后的游戏保存、帐号登出等功能。
调用init接口进行游戏初始化时,HMS Core SDK会向用户弹出华为联运隐私协议窗口,用户如果拒绝则会返回7401错误码,此时应禁止用户进入游戏。
- 需要支持智慧屏会员功能的游戏需要设置ExitCallback退出游戏,当智慧屏会员权益校验不通过需要退出游戏时触发。
public void init() { AccountAuthParams params = AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM_GAME; JosAppsClient appsClient = JosApps.getJosAppsClient(this); Task<Void> initTask; ResourceLoaderUtil.setmContext(this); // 设置防沉迷提示语的Context,此行必须添加 AppParams appParams=new AppParams(params, new AntiAddictionCallback() { @Override public void onExit() { // 该回调会在如下两种情况下返回: // 1.未成年人实名帐号在白天登录游戏,华为会弹框提示玩家不允许游戏,玩家点击“确定”,华为返回回调 // 2.未成年实名帐号在国家允许的时间登录游戏,到晚上9点,华为会弹框提示玩家已到时间,玩家点击“知道了”,华为返回回调 // 您可在此处实现游戏防沉迷功能,如保存游戏、调用帐号退出接口或直接游戏进程退出(如System.exit(0)) } }); // 当您的游戏需要实现智慧屏会员功能时需要实现该回调,游戏过程中会员到期时触发。 appParams.setExitCallback(new ExitCallback() { @Override public void onExit(int retCode) { // 您需要在此方法中实现退出游戏的功能,例如保存玩家进度、调用华为帐号退出接口等。 } }); initTask = appsClient.init(appParams); initTask.addOnSuccessListener(new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { showLog("init success"); hasInit = true; // 游戏初始化成功后需要调用一次浮标显示接口 Games.getBuoyClient(this).showFloatWindow(); // 必须在init成功后,才可以实现登录功能 // signIn(); } }).addOnFailureListener( new OnFailureListener() { @Override public void onFailure(Exception e) { if (e instanceof ApiException) { ApiException apiException = (ApiException) e; int statusCode = apiException.getStatusCode(); // 错误码为7401时表示用户未同意华为联运隐私协议 if (statusCode == JosStatusCodes.JOS_PRIVACY_PROTOCOL_REJECTED) { Log.i(TAG, "has reject the protocol"); // 此处您需禁止玩家进入游戏 } else if (statusCode == GamesStatusCodes.GAME_STATE_NETWORK_ERROR) { // 错误码7002表示网络异常 Log.i(TAG, "Network error"); // 此处您可提示玩家检查网络,请不要重复调用init接口,否则断网情况下可能会造成手机高耗电。 } else if (statusCode == 907135003) { // 907135003表示玩家取消HMS Core升级或组件升级 showLog("init statusCode=" + statusCode); init(); } else { // 在此处实现其他错误码的处理 } } } }); }
欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh