根据国家新闻出版署的最新规定,发布中国大陆的所有网络游戏必须接入国家新闻出版署网络游戏防沉迷实名验证系统,并且仅可在周五、周六、周日和法定节假日每日20时至21时向未成年人提供1小时网络游戏服务,其他时间均不得以任何形式向未成年人提供网络游戏服务,并且游戏付费服务需要对未成年人支付充值金额设限。
华为平台已为您实现了整套防沉迷的控制逻辑,您只需编写少量代码即可实现防沉迷。本codelab针对发布中国大陆的游戏,演示如何通过华为帐号登录游戏,并快速高效实现防沉迷功能。

您将建立什么

在本次codelab中,您将建立一个具备简单游戏交互功能的Android应用程序,您的应用程序将包含:

  • 具备游戏初始化按钮,点击按钮后调用游戏初始化接口并注册防沉迷回调,以限制未成年玩家游戏时间。
  • 具备华为帐号登录按钮,点击按钮后登录华为帐号。
  • 具备获取玩家信息按钮,点击后获取玩家的信息。
  • 您将会学到什么

    通过这个Codelab,您将学到:

  • 如何在AppGallery Connect上创建应用
  • 如何集成华为HMS Core游戏服务。
  • 如何在您的应用中实现登录和防沉迷功能。
  • AppGallery Connect 首页点击"我的项目",在项目下面中点击您的应用。
  • 在"项目设置"页面中,点击"应用"栏下的"agconnect-services.json"下载配置文件。
  • 将"agconnect-services.json"文件拷贝到应用级根目录下。
  • 配置HMS Core SDK的Maven仓地址

    Android Studio的代码库配置在Gradle插件7.0以下版本、7.0版本和7.1及以上版本有所不同。请根据您当前的Gradle插件版本,选择对应的配置过程。

    7.0以下版本

    7.0版本

    7.1及以上版本

  • 7.0以下版本:
    a) 打开Android Studio项目级"build.gradle"文件。

    b) 在build.gradle文件的对应位置配置以下内容。
  • 在"buildscript > repositories"中配置HMS Core SDK的Maven仓地址。
  • 在"allprojects > repositories"中配置HMS Core SDK的Maven仓地址。
  • 如果App中添加了"agconnect-services.json"文件则需要在"buildscript > dependencies"中增加agcp插件配置。
    allprojects { repositories { google() jcenter() // 配置如下地址 maven {url 'https://developer.huawei.com/repo/'} buildscript { repositories { google() jcenter() // 配置如下地址 maven {url 'https://developer.huawei.com/repo/'} dependencies { classpath 'com.android.tools.build:gradle:3.5.4' // 配置如下地址(推荐您使用最新版本的agcp插件) classpath 'com.huawei.agconnect:agcp:1.6.3.300'
  • 在"buildscript > repositories"中配置HMS Core SDK的Maven仓地址。
  • 如果App中添加了"agconnect-services.json"文件则需要在"buildscript > dependencies"中增加agcp插件配置。
    buildscript { repositories { google() jcenter() // 配置如下地址 maven {url 'https://developer.huawei.com/repo/'} dependencies { classpath 'com.android.tools.build:gradle:3.5.4' // 配置如下地址(推荐您使用最新版本的agcp插件) classpath 'com.huawei.agconnect:agcp:1.6.3.300'
  • 7.1以上版本:
    a) 打开Android Studio项目级"build.gradle"文件。

    b) 添加HUAWEI agcp插件以及Maven代码库。
    如果App中添加了"agconnect-services.json"文件则需要在"buildscript > dependencies"中增加agcp插件配置。
    buildscript { dependencies { classpath 'com.android.tools.build:gradle:3.5.4' // 配置如下地址(推荐您使用最新版本的agcp插件) classpath 'com.huawei.agconnect:agcp:1.6.3.300' c) 打开项目级"settings.gradle"文件,配置HMS Core SDK的Maven仓地址。
    pluginManagement { repositories { gradlePluginPortal() google() mavenCentral() // 配置HMS Core SDK的Maven仓地址。 maven { url 'https://developer.huawei.com/repo/' } dependencyResolutionManagement { repositories { google() mavenCentral() // 配置HMS Core SDK的Maven仓地址。 maven { url 'https://developer.huawei.com/repo/' }
  • 打开应用级的"build.gradle"文件。
  • 在"dependencies"中添加如下编译依赖。
    dependencies { implementation 'com.huawei.hms:hwid:{version}' implementation 'com.huawei.hms:game:{version}'
  • hwid为华为帐号服务,{version}替换为Account SDK的最新版本号,请参见华为帐号服务。
  • game为游戏服务,{version}替换为Game Service SDK的最新版本号,请参见华为游戏服务。
  • 添加agcp插件配置。请根据实际情况选择:
    方式一:在文件头部声明下一行添加如下配置。
    apply plugin: 'com.huawei.agconnect'

    方式二:在plugins中添加如下配置。

    plugins { id 'com.android.application' // 添加如下配置 id 'com.huawei.agconnect'
  • 点击界面上的"Sync Now"同步已完成的配置。

    配置混淆脚本

    编译APK前需要添加混淆配置,避免功能异常。配置步骤如下:

  • 打开Android Studio工程的混淆配置文件proguard-rules.pro。
  • 加入混淆配置。
    -ignorewarnings -keepattributes *Annotation* -keepattributes Exceptions -keepattributes InnerClasses -keepattributes Signature -keepattributes SourceFile,LineNumberTable -keep class com.hianalytics.android.**{*;} -keep class com.huawei.updatesdk.**{*;} -keep class com.huawei.hms.**{*;} -keep class com.huawei.gamebox.plugin.gameservice.**{*;} -keep interface com.huawei.hms.analytics.type.HAEventType{*;} -keep interface com.huawei.hms.analytics.type.HAParamType{*;} -keep class com.huawei.hms.analytics.HiAnalyticsInstance{*;} -keep class com.huawei.hms.analytics.HiAnalyticsInstance{*;} -keep class com.huawei.hms.analytics.HiAnalytics{*;}
  • 当您启用R8资源缩减(项目级"build.gradle"文件中"shrinkResources"属性为"true")和严格引用检查("res/raw/keep.xml"文件中的"shrinkMode"为"strict")时,请您配置"keep.xml"文件手动保留layout资源,确保应用正常通过华为应用市场上架审核。
    <?xml version="1.0" encoding="utf-8"?> <resources xmlns:tools="http://schemas.android.com/tools" tools:keep="@layout/hms_download_progress,@drawable/screen_off,@layout/upsdk*,@drawable/c_buoycircle*,@drawable/hms_game*,@layout/c_buoycircle*,@layout/hms_game*,@strings/hms_game*,@strings/c_buoycircle*" tools:shrinkMode="strict" />

    您可以参考本Codelab在Android Studio工程中创建如下布局页面。其中,Init按钮点击后可触发初始化接口,SignIn按钮点击后可以触发登录接口,GetGamePlayer按钮用来触发获取玩家信息接口。

    <!--布局代码--> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <TextView android:id="@+id/init_btn" android:layout_width="match_parent" android:layout_height="@dimen/btn_height" android:background="@color/btn_background" android:gravity="center" android:text="@string/init_text" android:textColor="@color/text_color" android:textSize="@dimen/button_size"/> <TextView android:id="@+id/login_btn" android:layout_width="match_parent" android:layout_height="@dimen/btn_height" android:background="@color/btn_background" android:layout_marginTop="@dimen/margin_top" android:gravity="center" android:text="@string/login_text" android:textColor="@color/text_color" android:textSize="@dimen/button_size" /> <TextView android:id="@+id/player1_btn" android:layout_width="match_parent" android:layout_height="@dimen/btn_height" android:background="@color/btn_background" android:gravity="center" android:layout_marginTop="@dimen/margin_top" android:text="@string/game_player" android:textColor="@color/text_color" android:textSize="@dimen/button_size" /> </LinearLayout>

    如果您希望游戏对接国家版署,您可向当地的新闻出版局申请接入网络游戏防沉迷实名认证系统,并获取"bizID(游戏备案识别码)",再将bizID配置到AppGallery Connect,华为会自动对接国家新闻出版署的实名认证系统并开启强制实名认证,无需您进行额外的开发,具体操作请参见版署实名认证申请

  • 在Application的onCreate方法中添加注册Activity的回调监听。
  •