乐于分享
好东西不私藏

牛马闹钟技术揭秘:节假日数据从哪来?iOS后台限制怎么破?

牛马闹钟技术揭秘:节假日数据从哪来?iOS后台限制怎么破?

前两篇讲了”为什么做”和”怎么做”,今天来聊聊技术实现。我们是产品经理,不是开发工程师,但作为一个独立开发者,我想分享下我的解题思路

───

一、节假日数据源:从哪获取?

1.1 数据来源:这个是根源,确实费了我不少力气,才最终找到的一个宝藏小站:https://timor.tech/api/holiday

这个接口非常简单,直接在网页中就能看到效果:试着访问地址:http://timor.tech/api/holiday/year/2026?type=Y&week=Y

节假日数据返回非常直观:

{ "code"0// 0服务正常。-1服务出错 "holiday": { "10-01": { "holiday"true// 该字段一定为true "name""国庆节"// 节假日的中文名。 "wage"3// 薪资倍数,3表示是3倍工资 "date""2018-10-01" // 节假日的日期 }, "10-02": { "holiday"true// 该字段一定为true "name""国庆节"// 节假日的中文名。 "wage"3// 薪资倍数,3表示是3倍工资 "date""2018-10-01" // 节假日的日期 } }, "type": { // 只有明确指定参数 type=Y 时才返回类型信息 "2018-10-01": { // 一一对应holiday对象的key,holiday有多少个这里就有多少个 "type"enum(0123), // 节假日类型,分别表示 工作日、周末、节日、调休。 "name""周六"// 节假日类型中文名,可能值为 周一 至 周日、假期的名字、某某调休。 "week"enum(1 - 7// 一周中的第几天。值为 1 - 7,分别表示 周一 至 周日。 } }}

1.2 数据解析:可以直观看到节假日具体名称和日期,我是和百度的节假日日历核对的;

1.3 数据更新:为了减少网络请求,我们直接将当年的节假日数据打包进应用,这样即使没有网络也可以使用

───

二、iOS后台限制:闹钟怎么响?

2.1 核心问题:iOS26可以支持第三方调用 AlarmKit,与系统闹钟功能完全一样,而低版本的iOS则不开放权限并且对后台任务有严格限制,App切换到后台或被关闭后是不会触发闹钟响铃的。

iOS后台限制:

App在前台时:闹钟正常响 ✅

App在后台时:可能在几分钟后被系统杀掉 ❌

App关闭时:完全无法运行 💀

2.2 解决方案

应用本地消息通知 + 床头模式

问题:为了避免应用关闭或切换到后台,我专门设计了床头模式,通过床头模式展示翻页时钟,增加了白噪音,婉转解决了锁屏或应用关闭的问题,避免闹钟不响的尴尬

───

三、写在最后

技术实现中最深的体会:iOS限制多,但可以灵活变通,只是看谁更愿意动脑子想解决方案。

关键经验:

  1. 数据准确性第一:闹钟不能错,错了就是事故
  2. 充分测试:确保每个场景都要测试

───

继续关注我:AI产品经理老李,一个本职工作是B端产品经理,副业是独立开发者,并且被iOS系统闹钟坑过的打工人。
#产品设计 #产品实战 #产品落地 #独立开发 #iOS应用 #niuma闹钟 #打工人痛点 #产品分析 #产品落地