• 【HMS Core】游戏初始化


     前提条件

    注意事项

    • 本场景中涉及的功能必须在应用启动时完成,而不是用户在进行登录、支付等操作时才完成,否则可能会导致应用审核被驳回。
    • 如果游戏向用户提供了自己的用户隐私条款,init接口必须在用户同意条款后调用,init接口调用后HMS Core SDK还会弹出华为联运隐私协议,用户需要同意后才能进入游戏。
    • 如果需要发布游戏到非中国大陆地区,请集成5.0.4.303版本游戏服务SDK,并在调用init接口时不传参数。

    开发步骤

    cke_12788.png

    1、在Application的onCreate方法中添加如下代码,用于注册Activity的回调监听。

    1. public class MyApplication extends Application{
    2. @Override
    3. public void onCreate(){
    4. super.onCreate();
    5. HuaweiMobileServicesUtil.setApplication(this);
    6. }
    7. }
    8. 编译前请确认应用的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退出游戏,当智慧屏会员权益校验不通过需要退出游戏时触发。
      1. public void init() {
      2. AccountAuthParams params = AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM_GAME;
      3. JosAppsClient appsClient = JosApps.getJosAppsClient(this);
      4. Task<Void> initTask;
      5. ResourceLoaderUtil.setmContext(this); // 设置防沉迷提示语的Context,此行必须添加
      6. AppParams appParams=new AppParams(params, new AntiAddictionCallback() {
      7. @Override
      8. public void onExit() {
      9. // 该回调会在如下两种情况下返回:
      10. // 1.未成年人实名帐号在白天登录游戏,华为会弹框提示玩家不允许游戏,玩家点击“确定”,华为返回回调
      11. // 2.未成年实名帐号在国家允许的时间登录游戏,到晚上9点,华为会弹框提示玩家已到时间,玩家点击“知道了”,华为返回回调
      12. // 您可在此处实现游戏防沉迷功能,如保存游戏、调用帐号退出接口或直接游戏进程退出(如System.exit(0))
      13. }
      14. });
      15. // 当您的游戏需要实现智慧屏会员功能时需要实现该回调,游戏过程中会员到期时触发。
      16. appParams.setExitCallback(new ExitCallback() {
      17. @Override
      18. public void onExit(int retCode) {
      19. // 您需要在此方法中实现退出游戏的功能,例如保存玩家进度、调用华为帐号退出接口等。
      20. }
      21. });
      22. initTask = appsClient.init(appParams);
      23. initTask.addOnSuccessListener(new OnSuccessListener<Void>() {
      24. @Override
      25. public void onSuccess(Void aVoid) {
      26. showLog("init success");
      27. hasInit = true;
      28. // 游戏初始化成功后需要调用一次浮标显示接口
      29. Games.getBuoyClient(this).showFloatWindow();
      30. // 必须在init成功后,才可以实现登录功能
      31. // signIn();
      32. }
      33. }).addOnFailureListener(
      34. new OnFailureListener() {
      35. @Override
      36. public void onFailure(Exception e) {
      37. if (e instanceof ApiException) {
      38. ApiException apiException = (ApiException) e;
      39. int statusCode = apiException.getStatusCode();
      40. // 错误码为7401时表示用户未同意华为联运隐私协议
      41. if (statusCode == JosStatusCodes.JOS_PRIVACY_PROTOCOL_REJECTED) {
      42. Log.i(TAG, "has reject the protocol");
      43. // 此处您需禁止玩家进入游戏
      44. } else if (statusCode == GamesStatusCodes.GAME_STATE_NETWORK_ERROR) {
      45. // 错误码7002表示网络异常
      46. Log.i(TAG, "Network error");
      47. // 此处您可提示玩家检查网络,请不要重复调用init接口,否则断网情况下可能会造成手机高耗电。
      48. } else if (statusCode == 907135003) {
      49. // 907135003表示玩家取消HMS Core升级或组件升级
      50. showLog("init statusCode=" + statusCode);
      51. init();
      52. } else {
      53. // 在此处实现其他错误码的处理
      54. }
      55. }
      56. }
      57. });
      58. }

    欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh

  • 相关阅读:
    全平台高速下载器Gopeed
    信息学奥赛一本通-编程启蒙3103:练18.3 组别判断
    (0 , _login.default) is not a function ES6,小程序浮点数精度问题
    uni-app 经验分享,从入门到离职(实战篇)——模拟从后台获取图片路径数据后授权相册以及保存图片到本地(手机相册)
    Vue3中如何使用ref获取元素节点全面解析
    什么是面向切面编程(AOP)?
    python创建与分发自己的包
    Kotlin学习笔记之高阶函数
    Jtti:windows虚拟机如何设定永久静态路由
    41、基于深度学习的自适应线性预测(matlab)
  • 原文地址:https://blog.csdn.net/weixin_44708240/article/details/127993771