小游戏登录（必选）
=========

小游戏接入基础游戏服务的小游戏登录API后，支持玩家使用华为账号快速进入游戏，且小游戏的华为账号实名认证、未成年人防沉迷功能由基础游戏服务实现。

#### 前提条件

已完成[开发准备](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/gameservice-gameplayer-minigame-preparation)。

#### 业务流程

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/f4/v3/YkZspHbMRy6GBy3uEW6bZQ/zh-cn_image_0000002594669192.png?HW-CC-KV=V1&HW-CC-Date=20260612T073609Z&HW-CC-Expire=86400&HW-CC-Sign=246EA9DA3A59961A6B6428B0491EEA936AED03376AEDBE366E9424B9F3B7CE69)

1.  玩家启动小游戏。
    
2.  小游戏调用[init](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/gameservice-gameplayer#gameplayerinit-1)接口初始化Game Service Kit。初始化后，弹出华为隐私协议窗口，玩家确认同意后，可继续往下执行。
    
3.  小游戏调用[on](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/gameservice-gameplayer#gameplayeronminigameaddictionprevented)接口注册小游戏防沉迷事件监听。
    
4.  小游戏调用[miniGameLogin](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/gameservice-gameplayer#gameplayerminigamelogin)接口。小游戏顶部弹出欢迎横幅，并向小游戏返回playerId、playerSign等信息。同时对玩家是否完成实名认证及是否成年进行校验。
    
    *   若玩家未完成实名认证，[miniGameLogin](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/gameservice-gameplayer#gameplayerminigamelogin)接口自动弹出实名认证窗口要求玩家进行实名认证。
    *   若玩家账号实名认证为未成年人，[miniGameLogin](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/gameservice-gameplayer#gameplayerminigamelogin)接口将自动检测未成年人的游戏时间。若玩家不在指定时间内登录小游戏，将强制玩家退出小游戏并返回[1002000006](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-gameservice#section1002000006-玩家未成年并且当前不在可游戏时间)错误码。

#### 接口说明

具体API说明详见[接口文档](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/gameservice-gameplayer)。

| 接口名 | 描述 |
| :-- | :-- |
| [init](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/gameservice-gameplayer#gameplayerinit-1)(context: common.UIAbilityContext, callback: AsyncCallback<void>): void | 游戏初始化接口，使用默认的上下文信息，通过callback回调获取返回值。 |
| [on](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/gameservice-gameplayer#gameplayeronminigameaddictionprevented)(type: 'miniGameAddictionPrevented', callback: Callback<string>): void | 小游戏防沉迷事件监听接口，通过callback回调获取小游戏防沉迷事件结果。 |
| [off](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/gameservice-gameplayer#gameplayeroffminigameaddictionprevented)(type: 'miniGameAddictionPrevented', callback?: Callback<string>): void | 取消小游戏防沉迷事件监听接口。 |
| [miniGameLogin](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/gameservice-gameplayer#gameplayerminigamelogin)(context: common.Context, loginParam: MiniGameLoginParam): Promise<MiniGamePlayer> | 小游戏登录接口，通过Promise对象获取返回值。 |

#### 开发步骤

#### \[h2\]导入模块

导入Game Service Kit及公共模块。

import { gamePlayer } from '@kit.GameServiceKit';
import { common } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { window } from '@kit.ArkUI';

#### \[h2\]初始化

调用[init](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/gameservice-gameplayer#gameplayerinit-1)接口初始化Game Service Kit。

onWindowStageCreate(windowStage: window.WindowStage) {
  windowStage.loadContent("pages/index", (err, data) => {
    try {
      gamePlayer.init(this.context,()=>{
        hilog.info(0x0000, 'testTag', \`Succeeded in initializing.\`);
      });
    } catch (error) {
      let err = error as BusinessError;
      hilog.error(0x0000, 'testTag', \`Failed to init. Code: ${err.code}, message: ${err.message}\`);
    }
  });
}

#### \[h2\]监听小游戏防沉迷事件

调用[on](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/gameservice-gameplayer#gameplayeronminigameaddictionprevented)接口注册小游戏防沉迷事件监听。

private miniGameAddictionPreventedCallback(result: string) {
  // 退出小游戏
}
// ...
// 调用on接口注册小游戏防沉迷事件监听
try {
  gamePlayer.on('miniGameAddictionPrevented', this.miniGameAddictionPreventedCallback);
} catch (error) {
  let err = error as BusinessError;
  hilog.error(0x0000, 'testTag', \`Failed to register. Code: ${err.code}, message: ${err.message}\`);
}

#### \[h2\]小游戏登录

调用[miniGameLogin](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/gameservice-gameplayer#gameplayerminigamelogin)接口登录小游戏。

let context = this.getUIContext()?.getHostContext() as common.UIAbilityContext;
let request: gamePlayer.MiniGameLoginParam = {
  'gameAppId': '123xxx', // 小游戏appId
  'extraData': 'xxx' // 附加信息，要求JSON String格式
};
try {
  gamePlayer.miniGameLogin(context, request).then((result: gamePlayer.MiniGamePlayer) => {
    hilog.info(0x0000, 'testTag', \`Succeeded in logging in\`);
  }).catch((error: BusinessError) => {
    hilog.error(0x0000, 'testTag', \`Failed to login. Code: ${error.code}, message: ${error.message}\`);
  });
} catch (error) {
  let err = error as BusinessError;
  hilog.error(0x0000, 'testTag', \`Failed to login. Code: ${err.code}, message: ${err.message}\`);
}

#### \[h2\]取消监听小游戏防沉迷事件

游戏退出时通过调用[off](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/gameservice-gameplayer#gameplayeroffminigameaddictionprevented)接口取消监听状态。

// 取消miniGameAddictionPrevented事件的全部监听
try {
  gamePlayer.off('miniGameAddictionPrevented');
} catch (error) {
  let err = error as BusinessError;
  hilog.error(0x0000, 'testTag', \`Failed to unregister. Code: ${err.code}, message: ${err.message}\`);
}