更新记录

1.0.0(2026-04-16)

  1. 新增 Android / iOS 系统日历权限检测与申请
  2. 新增读取日历列表能力
  3. 新增创建、查询、更新、删除日历事件
  4. 新增提醒时间数组配置
  5. 新增 iOS 官方原生日历编辑页
  6. 新增 Android 打开系统日历能力
  7. 提供完整模板页与示例文档

平台兼容性

uni-app(4.75)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
× × × × × ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × × ×

uni-app x(4.75)

Chrome Safari Android iOS 鸿蒙 微信小程序
× × × ×

austin-calendar

austin-calendar 是一个 App 系统日历事件 UTS 插件,兼容 Android / iOS 实现。

点击试用插件

当前工程里的体验页包含:

  • 当前平台能力展示
  • 权限状态检测与申请
  • iOS 官方原生日历编辑页
  • 日历列表读取
  • 创建测试事件
  • 查询未来 30 天事件
  • 更新最近创建事件
  • 删除最近创建事件
  • Android 打开系统日历

功能

  • 支持 Android / iOS 系统日历权限检测
  • 支持申请系统日历权限
  • 支持 iOS 通过 EventKitUI 拉起苹果官方原生日历编辑页
  • 支持查询可用日历列表
  • 支持创建、更新、删除事件
  • 支持查询指定时间范围内的事件
  • 支持提醒时间数组
  • Android 支持直接打开系统日历
  • iOS 不支持直接跳转系统日历 App,但支持苹果官方原生日历编辑页

适用场景

  • 预约成功后写入系统日历
  • 会议、课程、排班、值班提醒
  • 账单、续费、复诊、出行等到期提醒
  • 企业 App 把工单或拜访计划同步到系统日历

API

getCalendarEventCapabilities()

返回当前平台能力:

  • supported
  • platform
  • supportsListCalendars
  • supportsCreate
  • supportsUpdate
  • supportsDelete
  • supportsQuery
  • supportsAlarms
  • supportsOpenSystemCalendar
  • requiresPermission
  • notes

补充说明:

  • supportsOpenSystemCalendar 当前主要用于 Android 直接拉起系统日历
  • iOS 请使用 presentCalendarEventEditor(options) 打开苹果官方原生日历编辑页

getCalendarPermissionStatus()

同步获取当前系统日历权限状态。

返回字段:

  • status
    • Android:granted / prompt / denied
    • iOS:full-access / write-only / authorized / not-determined / denied / restricted
  • granted
  • canRead
  • canWrite
  • doNotAskAgain
  • errCode
  • errMsg

补充说明:

  • iOS 的 write-only 表示系统已经授予“仅写入”权限,此时 granted = truecanWrite = truecanRead = false
  • 如果业务需要读取日历列表、查询事件、更新已有事件,iOS 仍需要 full-access / authorized

requestCalendarPermission(options)

异步申请系统日历权限。

参数表:

参数 说明 类型 默认值 可选值
success 权限申请成功回调 Function - -
fail 权限申请失败回调 Function - -
complete 权限申请结束回调 Function - -

presentCalendarEventEditor(options)

拉起 iOS 官方原生日历编辑页。

  • iOS:支持
  • Android:当前返回不支持,请继续使用 createCalendarEventopenSystemCalendar

说明:

  • 不传 eventId 时,按“新建事件”方式打开
  • 传入 eventId 时,按“编辑已有事件”方式打开
  • iOS 17 及以上可以直接使用这套官方编辑页,不强依赖先申请日历权限
  • 由于 EventKitUI 在 iOS 17 上以系统进程界面处理保存,回调只保证返回 action,不保证返回最终事件对象

参数表:

参数 说明 类型 默认值 可选值
eventId 传入时编辑已有事件,不传时创建新事件 String '' -
calendarId 预设目标日历 ID,系统编辑页里用户仍可改 String '' -
title 预填标题 String '' -
startTime 预填开始时间,毫秒 Number 0 -
endTime 预填结束时间,毫秒 Number 0 -
allDay 是否预设为全天事件 Boolean - true / false
notes 预填备注 String '' -
location 预填地点 String '' -
alarms 预填提醒分钟数组 Number[] [] -
success 编辑页关闭后的成功回调,action 可能为 saved / deleted / canceled Function - -
fail 拉起失败回调 Function - -
complete 整个流程结束回调 Function - -

listCalendars()

同步读取当前可用日历列表。

createCalendarEvent(options)

创建系统日历事件。

参数表:

参数 说明 类型 默认值 可选值
calendarId 目标日历 ID,不传时自动使用默认日历 String '' -
title 事件标题 String - -
startTime 开始时间时间戳,毫秒 Number - -
endTime 结束时间时间戳,毫秒 Number - -
allDay 是否全天事件 Boolean false true / false
notes 备注 String '' -
location 地点 String '' -
alarms 提前多少分钟提醒,例如 [15, 60] Number[] [] -

updateCalendarEvent(options)

更新系统日历事件。

参数与 createCalendarEvent 基本一致,额外需要:

参数 说明 类型 默认值 可选值
eventId 待更新的事件 ID String - -

deleteCalendarEvent(options)

删除系统日历事件。

参数 说明 类型 默认值 可选值
eventId 待删除的事件 ID String - -

queryCalendarEvents(options)

查询时间范围内的系统日历事件。

参数 说明 类型 默认值 可选值
startTime 查询开始时间,毫秒 Number - -
endTime 查询结束时间,毫秒 Number - -
calendarId 指定日历 ID,不传表示全部 String '' -
keyword 按标题、备注、地点做本地过滤 String '' -
limit 最多返回多少条 Number 50 -

openSystemCalendar(time)

打开系统日历。

  • Android:支持跳到指定时间附近
  • iOS:当前不支持直接拉起系统日历 App,请改用 presentCalendarEventEditor(options) 打开苹果官方原生日历编辑页

返回结果

日历项

字段 说明 类型
id 日历 ID String
title 日历名称 String
accountName 账户名 String
accountType 账户类型 String
ownerAccount 拥有者账户 String
isPrimary 是否主日历 Boolean
allowsModifications 是否允许修改事件 Boolean

事件项

字段 说明 类型
id 事件 ID String
calendarId 所属日历 ID String
calendarTitle 所属日历名称 String
title 事件标题 String
startTime 开始时间,毫秒 Number
endTime 结束时间,毫秒 Number
allDay 是否全天 Boolean
notes 备注 String
location 地点 String
alarms 提醒时间数组,单位分钟 Number[]
timezone 时区标识 String

原生编辑页结果

字段 说明 类型
ok 是否成功进入或完成官方编辑页流程 Boolean
platform 平台标识 String
action saved / deleted / canceled / busy / start-failed / permission-denied / not-found / unsupported String
eventId 仅在编辑已有事件时回传原始事件 ID;新建事件不保证返回最终事件 ID String
errCode 错误码 Number
errMsg 错误信息 String

最小示例

import {
  getCalendarPermissionStatus,
  requestCalendarPermission,
  presentCalendarEventEditor,
  createCalendarEvent,
} from '@/uni_modules/austin-calendar'

const permission = getCalendarPermissionStatus()
if (!permission.granted) {
  requestCalendarPermission({
    success(res) {
      console.log('permission-success', res)
    },
    fail(res) {
      console.log('permission-fail', res)
    },
  })
}

const now = Date.now()
const createRes = createCalendarEvent({
  title: '测试预约提醒',
  startTime: now + 60 * 60 * 1000,
  endTime: now + 90 * 60 * 1000,
  notes: '由 austin-calendar 创建',
  location: '线上会议室',
  alarms: [15],
})

console.log('createRes', createRes)

presentCalendarEventEditor({
  title: '苹果官方原生日历编辑页测试',
  startTime: now + 2 * 60 * 60 * 1000,
  endTime: now + 3 * 60 * 60 * 1000,
  notes: '用户可以在系统原生编辑页里继续修改并保存',
  alarms: [15],
  success(res) {
    console.log('editor-success', res)
  },
  fail(res) {
    console.log('editor-fail', res)
  },
})

注意

  • Android / iOS 都依赖系统日历权限,首次使用前建议先检测并申请
  • 如果设备没有可写日历或用户关闭权限,会返回统一错误码
  • manifest.json 配置

{
  "app-plus": {
    "distribute": {
      "android": {
        "permissions": [
          "<uses-permission android:name=\"android.permission.READ_CALENDAR\"/>",
          "<uses-permission android:name=\"android.permission.WRITE_CALENDAR\"/>"
        ]
      },
      "ios": {
        "privacyDescription": {
          "NSCalendarsUsageDescription": "用于读取和写入系统日历事件",
          "NSCalendarsFullAccessUsageDescription": "用于读取和管理系统日历事件",
          "NSCalendarsWriteOnlyAccessUsageDescription": "用于写入系统日历事件",
          "NSContactsUsageDescription": "用于在系统原生日历编辑页中展示参与人等联系人信息"
        }
      }
    }
  }
}

隐私、权限声明

1. 本插件需要申请的系统权限列表:

安卓: "<uses-permission android:name=\"android.permission.READ_CALENDAR\"/>", "<uses-permission android:name=\"android.permission.WRITE_CALENDAR\"/>" ios: "NSCalendarsUsageDescription": "用于读取和写入系统日历事件", "NSCalendarsFullAccessUsageDescription": "用于读取和管理系统日历事件", "NSCalendarsWriteOnlyAccessUsageDescription": "用于写入系统日历事件", "NSContactsUsageDescription": "用于在系统原生日历编辑页中展示参与人等联系人信息"

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。