未成年人模式护航,保障安全健康上网

为保护未成年人的上网环境,预防未成年人沉迷网络,帮助未成年人培养积极健康的用网习惯,HarmonyOS SDK 提供未成年人模式功能,在华为设备上加强对面向未成年人的产品和服务的管理。

场景介绍(应用跟随系统未成年人模式状态变化)

1.查询系统状态:建议应用跟随系统未成年人模式状态切换,随系统一同开启或关闭未成年人模式。应用启动时可以查询系统的未成年人模式是否开启。未成年人模式开启时,应用应主动切换为未成年人模式。

2.感知系统状态切换:应用可通过订阅公共事件感知未成年人模式状态变化,应用进程存在时,如果用户切换系统的未成年人模式状态(开启或关闭),应用可主动跟随系统进行切换。

3.验证家长密码:当用户在调整应用内未成年人模式设置(如内容偏好等)时,应用可调用验证未成年人模式密码接口,让用户验证未成年人模式的家长密码,验证成功后可以进行调整。

开发步骤

1.准备:导入minorsProtection模块及相关公共模块。

复制代码
import { minorsProtection } from '@kit.AccountKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError, commonEventManager } from '@kit.BasicServicesKit';
// 以上引入的模块为当前场景的全量模块,请按照具体实现按需引入

2.感知系统状态切换:创建订阅者,订阅系统未成年人模式开启/关闭事件。推荐在应用Ability的onCreate生命周期中调用。

复制代码
//订阅者信息。
let subscribeInfo: commonEventManager.CommonEventSubscribeInfo = {
  events: [commonEventManager.Support.COMMON_EVENT_MINORSMODE_ON,commonEventManager.Support.COMMON_EVENT_MINORSMODE_OFF]
};
let subscriber: commonEventManager.CommonEventSubscriber;

//创建订阅者。
commonEventManager.createSubscriber(subscribeInfo)
  .then((commonEventSubscriber: commonEventManager.CommonEventSubscriber) => {
    subscriber = commonEventSubscriber;
    //订阅公共事件。
    commonEventManager.subscribe(subscriber,
      (error: BusinessError, data: commonEventManager.CommonEventData) => {
        if (error) {
          this.dealCommonEventAllError(error);
        } else {
          if (data.event === commonEventManager.Support.COMMON_EVENT_MINORSMODE_ON) {
            // 订阅到开启事件,可以调用查询年龄段接口
          }
          if (data.event === commonEventManager.Support.COMMON_EVENT_MINORSMODE_OFF) {
            // 订阅到关闭事件,关闭当前应用的未成年人模式,刷新应用内容展示,取消年龄限制
          }
        }
      });
  })
  .catch((error: BusinessError) => {
    this.dealCommonEventAllError(error);
  });
dealCommonEventAllError(error: BusinessError): void {
  hilog.error(0x0000, 'testTag', `Failed to subscribe. Code: ${error.code}, message: ${error.message}`);
}

3.查询系统状态:开发者可选择以下一种方式获取未成年人模式的开启状态,以及年龄段信息。推荐在自定义组件的aboutToAppear生命周期或者应用Ability的onCreate生命周期中调用。

当应用期望立即获取结果时,推荐使用同步方式;当应用期望使用非阻塞的方式调用接口时,推荐使用Promise异步回调方式。

使用同步方式,调用getMinorsProtectionInfoSync获取未成年人模式的开启状态,以及年龄段信息。

复制代码
if (canIUse('SystemCapability.AuthenticationServices.HuaweiID.MinorsProtection')) {
  const minorsProtectionInfo: minorsProtection.MinorsProtectionInfo =
    minorsProtection.getMinorsProtectionInfoSync();
  // 获取未成年人模式开启状态
  const minorsProtectionMode: boolean = minorsProtectionInfo.minorsProtectionMode;
  hilog.info(0x0000, 'testTag', 'Succeeded in getting minorsProtectionMode is: %{public}s',
    minorsProtectionMode.valueOf());
  // 未成年人模式已开启,获取年龄段信息
  if (minorsProtectionMode) {
    const ageGroup: minorsProtection.AgeGroup | undefined = minorsProtectionInfo.ageGroup;
    if (ageGroup) {
      hilog.info(0x0000, 'testTag', 'Succeeded in getting lowerAge is: %{public}s', ageGroup.lowerAge.toString());
      hilog.info(0x0000, 'testTag', 'Succeeded in getting upperAge is: %{public}s', ageGroup.upperAge.toString());
    }
  } else {
    // 未成年人模式未开启,建议应用跟随系统未成年人模式,展示正常内容
  }
} else {
  hilog.info(0x0000, 'testTag',
    'The current device does not support the invoking of the getMinorsProtectionInfoSync interface.');
}

使用Promise异步回调方式,调用getMinorsProtectionInfo获取未成年人模式的开启状态,以及年龄段信息。

复制代码
if (canIUse('SystemCapability.AuthenticationServices.HuaweiID.MinorsProtection')) {
  minorsProtection.getMinorsProtectionInfo()
    .then((minorsProtectionInfo: minorsProtection.MinorsProtectionInfo) => {
      // 获取未成年人模式开启状态
      const minorsProtectionMode: boolean = minorsProtectionInfo.minorsProtectionMode;
      hilog.info(0x0000, 'testTag', 'Succeeded in getting minorsProtectionMode is: %{public}s',
        minorsProtectionMode.valueOf());
      // 未成年人模式已开启,获取年龄段信息
      if (minorsProtectionMode) {
        const ageGroup: minorsProtection.AgeGroup | undefined = minorsProtectionInfo.ageGroup;
        if (ageGroup) {
          hilog.info(0x0000, 'testTag', 'Succeeded in getting lowerAge is: %{public}s', ageGroup.lowerAge.toString());
          hilog.info(0x0000, 'testTag', 'Succeeded in getting upperAge is: %{public}s', ageGroup.upperAge.toString());
        }
      } else {
        // 未成年人模式未开启,建议应用跟随系统未成年人模式,展示正常内容
      }
    })
    .catch((error: BusinessError<object>) =&gt; {
      this.dealGetMinorsInfoAllError(error);
    });
} else {
  hilog.info(0x0000, 'testTag',
    'The current device does not support the invoking of the getMinorsProtectionInfo interface.');
}
dealGetMinorsInfoAllError(error: BusinessError<object>): void {
  hilog.error(0x0000, 'testTag', `Failed to getMinorsProtectionInfo. Code: ${error.code}, message: ${error.message}`);
}

验证家长密码:未成年人模式开启时,如果用户需要调整应用内未成年人模式设置(如内容偏好等),可调用verifyMinorsProtectionCredential方法拉起验证未成年人模式的家长密码页面。

复制代码
if (canIUse('SystemCapability.AuthenticationServices.HuaweiID.MinorsProtection')) {
  minorsProtection.verifyMinorsProtectionCredential(getContext(this))
    .then((result: boolean) =&gt; {
      hilog.info(0x0000, 'testTag', 'Succeeded in getting verify result is: %{public}s', result.valueOf());
      // 使用结果判断验密是否通过,执行后续流程
    })
    .catch((error: BusinessError<object>) =&gt; {
      this.dealVerifyAllError(error);
    });
} else {
  hilog.info(0x0000, 'testTag',
    'The current device does not support the invoking of the verifyMinorsProtectionCredential interface.');
}
dealVerifyAllError(error: BusinessError<object>): void {
  hilog.error(0x0000, 'testTag', `Failed to verify. Code: ${error.code}, message: ${error.message}`);
}

了解更多详情>>

获取未成年人模式服务开发指导文档

相关推荐
HarmonyOS_SDK20 分钟前
汽车之家联合HarmonyOS SDK,深度构建鸿蒙生态体系
harmonyos
whysqwhw20 分钟前
鸿蒙沉浸式
harmonyos
合作小小程序员小小店34 分钟前
SDN安全开发环境中常见的框架,工具,第三方库,mininet常见指令介绍
python·安全·生成对抗网络·网络安全·网络攻击模型
后台开发者Ethan38 分钟前
Python需要了解的一些知识
开发语言·人工智能·python
BingoGo1 小时前
重新学习 PHP 目前短运算符 简化你得代码
后端·php
数据智能老司机1 小时前
实现逆向工程——汇编指令演练
安全·逆向·汇编语言
常利兵1 小时前
Kotlin作用域函数全解:run/with/apply/let/also与this/it的魔法对决
android·开发语言·kotlin
whysqwhw2 小时前
鸿蒙Stack使用
harmonyos
幼稚园的山代王2 小时前
Kotlin-基础语法练习一
android·开发语言·kotlin
重生成为编程大王2 小时前
Java ConcurrentHashMap 深度解析
java·开发语言