前提条件
- 实现游戏初始化前,必须已经完成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