微信小程序向系统日历添加事件(提醒)实现

直接上代码

// pages/calendar/calendar.js

Page({
  // 点击添加日程按钮
  handleAddCalendar() {
    wx.getSetting({
      success(res) {
        // 判断是否已经授权
        if (!res.authSetting['scope.writePhotosAlbum']) {
          wx.authorize({
            scope: 'scope.writePhotosAlbum',
            success() {
              // 用户已授权,调用添加日程 API
              wx.addPhoneCalendar({
                title: '会议', // 日程标题,必填项
                startTime: new Date('2023/04/15 09:00').getTime()/1000, // 日程开始时间,必填项
                endTime: new Date('2023/04/15 12:00').getTime()/1000, // 日程结束时间,必填项
                location: '北京市朝阳区东三环北路', // 日程地点,非必填项
                notes: '请大家准时参加会议', // 日程备注,非必填项
                success(res) {
                  console.log(res) // 日程添加成功的回调函数
                  wx.showToast({
                    title: '添加日程成功',
                    icon: 'success',
                    duration: 2000
                  })
                },
                fail(res) {
                  console.log(res) // 日程添加失败的回调函数
                  wx.showToast({
                    title: '添加日程失败',
                    icon: 'none',
                    duration: 2000
                  })
                }
              })
            },
            fail() {
              // 用户拒绝授权,提示用户授权
              wx.showToast({
                title: '请先授权',
                icon: 'none',
                duration: 2000
              })
            }
          })
        } else {
          // 已经授权,调用添加日程 API
          wx.addPhoneCalendar({
            title: '会议', // 日程标题,必填项
            startTime: new Date('2023/04/15 09:00').getTime()/1000, // 日程开始时间,必填项
            endTime: new Date('2023/04/15 12:00').getTime()/1000, // 日程结束时间,必填项
            location: '北京市朝阳区东三环北路', // 日程地点,非必填项
            notes: '请大家准时参加会议', // 日程备注,非必填项
            success(res) {
              console.log(res) // 日程添加成功的回调函数
              wx.showToast({
                title: '添加日程成功',
                icon: 'success',
                duration: 2000
              })
            },
            fail(res) {
              console.log(res) // 日程添加失败的回调函数
              wx.showToast({
                title: '添加日程失败',
                icon: 'none',
                duration: 2000
              })
            }
          })
        }
      }
    })
  }
})

使用 wx.addPhoneCalendar 需要满足以下前置条件:

  1. 微信版本支持:wx.addPhoneCalendar 是微信小程序的 API,只有在微信版本号大于等于 6.6.6 的环境下才能使用。

  2. 用户授权:在用户手机的日历中添加日程需要获取用户授权,用户需要在小程序中点击授权按钮才能进行操作。授权按钮可以通过 <button open-type="openSetting"> 组件实现。

  3. 合法域名:使用 wx.addPhoneCalendar 的小程序必须在小程序管理后台配置合法域名,包括 wx.addPhoneCalendar 的调用域名和日历服务域名。在开发阶段可以使用开发者工具自带的“不校验合法域名、Web-view(业务域名)、TLS 版本以及 HTTPS 证书”选项进行调试。

注意:由于用户的隐私安全问题,小程序只能添加到用户选择的日历中,无法选择具体的日历。getTime()需要除1000

参考:

wx.addPhoneCalendar(Object object) | 微信开放文档