1.权限定义

       应用退到后台或进程终止后,仍然有一些提醒用户的定时类通知,为满足此类功能场景,系统提供了代理提醒的能力。当应用退至后台或进程终止后,系统会代理应用做定时提醒。与Calendar Kit(日历服务)、Push Kit(推送服务)有明显的区别。

2.权限限制

       代理提醒仅对如下类型的应用开放申请:工具类、商务类、效率类、金融理财类、教育类、生活服务类、旅游类、医疗类、运动健康类、游戏类应用。营销类场景(如电商/红包/优惠券抢购、直播预约等)不支持申请代理提醒权限,仅支持几种常见的开放代理提醒申请的场景。

       单个普通应用有效/未过期的提醒数量不超过30个。从API version 10开始,所有应用有效/未过期的提醒数量总和不超过12000个。

3.权限申请

  1. 登录AppGallery Connect,选择“开发与服务”。

  2. 在项目列表中找到您的项目,在项目下的应用列表中选择需要申请代理提醒的应用。如果无对应应用,请先创建HarmonyOS应用

  3. 进入“项目设置”->“开放能力管理”页面,点击“代理提醒”卡片对应的“申请”按钮。

  4. 在“新建业务申请”窗口填写申请原因,上传代理提醒功能场景截图和应用分类信息截图,然后点击“提交”。应用分类信息可登录AppGallery Connect网站,在“APP”页签中选择“应用上架”->“应用信息”查询。

  5. 返回“开放能力接入”页面,原“申请”按钮变为“申请中”,8个工作日反馈申请结果。

  6. 申请审批通过后,互动中心会发送通知给您,同时“申请中”按钮会变为置灰显示的“申请”。

  7. 能力申请通过后,勾选代理提醒的能力开关,点击右上角“保存”。至此,您的应用已成功接入开放能力。此时,调试和发布应用必须重新生成Profile文件并使用手动签名

4.权限调用

       当开发者在AppGallery Connect网站-开发者服务-申请-项目-开放能力管理,申请代理提醒权限通过后,需要手动签名,重新生成Profile文件,并对应用进行手动签名,否则IDE仍没有权限调用此权限,导致调试和发布失败,显示比如错误代码1700002等错误信息。本文主要是对权限申请通过后,如何进行配置以便调用该权限进行说明。

4.1 文件种类及用途

      文件分为2类:

  1. 第一类是由DevEco Studio编辑器生成

    1. 密钥文件(格式为.p12)。

      包含非对称加密中使用的公钥和私钥,存储在密钥库文件中,公钥和私钥用于数字签名和验证。

    2. 证书请求文件(格式为.csr)

      包含密钥对中的公钥和通用名称、组织名称、组织单位等信息,用于向AppGallery Connect申请数字证书。

  2. 第二类是HarmonyOS应用/元服务运行的必要文件

    1. 数字证书(格式为.cer

      由华为AppGallery Connect颁发。

    2. Profile文件(格式为.p7b

      包含HarmonyOS应用/元服务的包名、数字证书信息、描述应用/元服务允许申请的证书权限列表,以及允许应用/元服务调试的设备列表(如果应用/元服务类型为Release类型,则设备列表为空)等内容,每个应用/元服务包中均必须包含一个Profile文件。

       在AppGallery Connect网站申请权限通过后,首先新增数字证书.cer(AppGallery Connect网站-证书、APP ID和Profile-证书-新增证书),然后添加Profile文件.p7b(AppGallery Connect网站-证书、APP ID和Profile-Profile-添加)后下载,接着在DevEco Studio利用密钥文件.p12手动签名应用程序。

4.2 步骤一:手动签名

       请根据手动签名里的5个步骤,在DevEco Studio逐步完成。

  1. 在主菜单栏单击Build > Generate Key and CSR。

  2. 在Generate Key and CSR界面,可以单击Select an existing key选择已有的密钥库文件(存储有密钥的.p12文件),若没有密钥库文件则进行填写。下面以新创建密钥库文件为例进行说明。

  3. 在Generate Key窗口,填写密钥库信息后,点击Next。

    • Keystore Name:填写p12文件名称,仅允许包含字母、数字、下划线(_)、中划线(-)、句号(.)。

    • Select file save path:设置密钥库文件存储路径。

    • Key store password:设置密钥库密码,必须由大写字母、小写字母、数字和特殊符号中的两种以上字符的组合,长度至少为8位。请记住该密码,后续签名配置需要使用。

    • Confirm password:再次输入密钥库密码。

    • Alias:密钥别名。请记住该别名,后续签名配置需要使用。

    • Advance Setting:密钥库文件的高级设置,选填。

  4. 在Generate Certificate Request File (CSR)窗口,设置CSR文件名和CSR文件存储路径后,点击Finish。

    1. CSR File Name:填写CSR文件名称,仅允许包含字母、数字、下划线(_)、中划线(-)、句号(.)。

    2. Select file save path:设置CSR文件存储路径。

  5. 创建CSR文件成功,可以在存储路径下获取生成的密钥库文件(.p12)、证书请求文件(.csr)。

4.3 步骤二:配置签名信息

  1. 连接真机设备,确保DevEco Studio与真机设备已连接。

  2. 在File > Project Structure > Project > Signing Configs窗口中,取消勾选“Automatically generate signature”和“Associate with registered application”,分别配置密钥(.p12文件)、Profile(.p7b文件)和数字证书(.cer文件)的路径等信息,配置完毕后点击Apply。

  • tore file:选择密钥库文件,文件后缀为.p12,该文件为生成密钥和证书请求文件中生成的.p12文件。

  • Store password:输入密钥库密码,该密码与生成密钥和证书请求文件中填写的密钥库密码保持一致。

  • Key alias:输入密钥的别名信息,与生成密钥和证书请求文件中填写的别名保持一致。

  • Key password:输入密钥密码,与生成密钥和证书请求文件中填写的Store Password保持一致。

  • Sign alg:签名算法,固定为SHA256withECDSA。

  • Profile file:选择申请调试Profile文件和添加权限信息中生成的Profile文件,文件后缀为.p7b。

  • Certpath file:选择申请调试证书中生成的数字证书文件,文件后缀为.cer。

       说明:

  • Store file,Profile file,Certpath file三个字段支持配置相对路径,以项目根目录为起点,配置文件所在位置的路径名称。
  • 密钥库文件(.p12)、密钥库密码、密钥别名、密钥密码、Profile文件(.p7b)、数字证书文件(.cer)必须配套使用,否则会导致签名失败。若失败请根据报错信息进行修改,再进行签名。

4.4 步骤三:在项目配置文件中声明权限

       在项目的module.json5文件(./entry/src/main/module.json5)中明确声明代理提醒所需权限,以便系统识别。关键权限为 ohos.permission.PUBLISH_AGENT_REMINDER。配置示例如下:

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.PUBLISH_AGENT_REMINDER",
        "reason": "$string:permission_reason",
        "usedScene": {
          "abilities": ["MainAbility"],
          "when": "inuse"
        }
      }
    ]
  }
}

4.5 步骤四:导入模块并请求通知授权

       代理提醒功能依赖系统的通知权限,因此必须在代码中主动请求用户授权。需要在项目中调用通知管理模块的接口,确保用户已开启通知开关。

import { notificationManager } from '@kit.NotificationKit';
import { BusinessError } from '@kit.BasicServicesKit';

notificationManager.requestEnableNotification().then(() => {
  console.info('Notification authorization granted');
}).catch((err: BusinessError) => {
  console.error('Failed to request notification authorization. Code:' + err.code + ' message:' + err.message);
});

4.6 定义并发布提醒

       根据需求创建倒计时、日历或闹钟类型的提醒请求,并调用发布接口。

4.7 取消提醒

       必要时可通过提醒ID取消已发布的提醒,或者用 reminderAgentManager.cancelAllReminders() 一键清空代理提醒,则不需要再去管理复杂的 ID 数组。

5.常见错误

5.1 错误代码:1700002

       错误信息:{"data":1700002,"code":1700002,"message":"The number of reminders exceeds the limit."}

       错误解释:提醒数量超出限制。

       解决方式:

       1.查看申请代理提醒权限后,虽然配置了.json5文件,但是否重新手动签名,且密钥和相关文件对应使用。

       2.应用提醒数量是否超过30个。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐