提醒 (TSReminders)
提醒模块提供了完整的提醒管理功能,包括获取、创建、修改和删除设备上的提醒。支持内置提醒类型(久坐、喝水、吃药)和自定义提醒。
前提条件
- 已成功初始化 TopStepComKit SDK
- 与设备建立了有效的蓝牙连接
- 设备支持提醒功能
数据模型
TSRemindersModel
提醒数据模型类,代表设备上的一个提醒。
| 属性名 | 类型 | 说明 |
|---|---|---|
reminderId | NSString * | 提醒的唯一标识符,由系统自动分配,请勿手动修改 |
reminderName | NSString * | 提醒的名称 |
enabled | BOOL | 提醒是否启用(getter=isEnabled,读取用 reminder.isEnabled,赋值用 reminder.enabled = YES) |
reminderType | TSReminderType | 提醒的类型(未知、内置、自定义等) |
repeatDays | TSRemindersRepeat | 提醒重复的星期几(位运算选项) |
timeType | TSReminderTimeType | 时间类型(时间点或时间段) |
startTime | NSInteger | 提醒的开始时间(从0开始的分钟数,如360表示6:00) |
endTime | NSInteger | 提醒的结束时间(从0开始的分钟数,如720表示12:00) |
interval | NSInteger | 提醒间隔(分钟) |
timePoints | NSArray<NSNumber *> * | 具体的时间点数组(每个元素为从0开始的分钟数) |
notes | NSString * | 提醒的备注 |
isLunchBreakDNDEnabled | BOOL | 午休免打扰功能是否启用 |
lunchBreakDNDStartTime | NSInteger | 午休免打扰开始时间(分钟,建议720即12:00) |
lunchBreakDNDEndTime | NSInteger | 午休免打扰结束时间(分钟,建议840即14:00) |
枚举与常量
TSReminderType
提醒类型枚举。
| 值 | 说明 |
|---|---|
TSReminderTypeUnknown | 未知类型 |
TSReminderTypeSedentary | 久坐提醒 |
TSReminderTypeDrinking | 喝水提醒 |
TSReminderTypeTakeMedicine | 吃药提醒 |
TSReminderTypeCustom | 自定义提醒 |
TSRemindersRepeat
提醒重复日期选项(位运算)。
| 值 | 说明 |
|---|---|
TSRemindersRepeatMonday | 星期一 |
TSRemindersRepeatTuesday | 星期二 |
TSRemindersRepeatWednesday | 星期三 |
TSRemindersRepeatThursday | 星期四 |
TSRemindersRepeatFriday | 星期五 |
TSRemindersRepeatSaturday | 星期六 |
TSRemindersRepeatSunday | 星期日 |
TSRemindersRepeatWorkday | 工作日(周一至周五) |
TSRemindersRepeatWeekend | 周末(周六至周日) |
TSRemindersRepeatEveryday | 每天 |
TSReminderTimeType
提醒时间类型枚举。
| 值 | 说明 |
|---|---|
TSReminderTimeTypePeriod | 时间段(使用 startTime、endTime 和 interval) |
TSReminderTimeTypePoint | 时间点(使用 timePoints 数组) |
回调类型
| 类型 | 说明 |
|---|---|
void (^)(TSRemindersModel * _Nullable reminder, NSError * _Nullable error) | 创建自定义提醒模板的完成回调,返回提醒模型和错误信息 |
void (^)(NSArray<TSRemindersModel *> * _Nullable reminders, NSError * _Nullable error) | 获取所有提醒的完成回调,返回提醒数组和错误信息 |
void (^)(BOOL success, NSError * _Nullable error) | 通用操作完成回调,返回操作是否成功和错误信息(别名:TSCompletionBlock) |
接口方法
获取设备支持的最大自定义提醒数量
- (NSInteger)maxSupportedCustomReminderCount;
获取设备支持的最大自定义提醒数量。
参数
无
返回值
| 类型 | 说明 |
|---|---|
NSInteger | 设备上可以设置的最大自定义提醒数量 |
代码示例
id<TSRemindersInterface> remindersInterface = ...;
NSInteger maxCount = [remindersInterface maxSupportedCustomReminderCount];
TSLog(@"最大自定义提醒数量: %ld", (long)maxCount);
创建自定义提醒模板
- (void)createCustomReminderTemplateWithCompletion:(void (^)(TSRemindersModel * _Nullable reminder, NSError * _Nullable error))completion;
创建一个自定义提醒模板(推荐使用)。此方法会自动分配有效的唯一ID、设置默认值,并确保在不同设备平台的兼容性。
参数
| 参数名 | 类型 | 说明 |
|---|---|---|
completion | void (^)(TSRemindersModel * _Nullable, NSError * _Nullable) | 完成回调,返回一个可用的自定义提醒模型和错误信息 |
代码示例
id<TSRemindersInterface> remindersInterface = ...;
[remindersInterface createCustomReminderTemplateWithCompletion:^(TSRemindersModel * _Nullable reminder, NSError * _Nullable error) {
if (error) {
TSLog(@"创建提醒模板失败: %@", error.localizedDescription);
return;
}
// 配置提醒
reminder.reminderName = @"运动提醒";
reminder.enabled = YES;
reminder.repeatDays = TSRemindersRepeatEveryday;
reminder.timeType = TSReminderTimeTypePoint;
reminder.timePoints = @[@360, @720]; // 6:00 和 12:00
// 保存提醒到设备
[remindersInterface setReminder:reminder completion:^(BOOL success, NSError * _Nullable error) {
if (success) {
TSLog(@"提醒已保存到设备");
} else {
TSLog(@"保存提醒失败: %@", error.localizedDescription);
}
}];
}];
获取所有提醒设置
- (void)fetchAllRemindersWithCompletion:(void (^)(NSArray<TSRemindersModel *> * _Nullable reminders, NSError * _Nullable error))completion;
获取设备上的所有提醒设置。
参数
| 参数名 | 类型 | 说明 |
|---|---|---|
completion | void (^)(NSArray<TSRemindersModel *> * _Nullable, NSError * _Nullable) | 完成回调,返回提醒对象数组和错误信息 |
代码示例
id<TSRemindersInterface> remindersInterface = ...;
[remindersInterface fetchAllRemindersWithCompletion:^(NSArray<TSRemindersModel *> * _Nullable reminders, NSError * _Nullable error) {
if (error) {
TSLog(@"获取提醒失败: %@", error.localizedDescription);
return;
}
TSLog(@"获取到 %lu 个提醒", (unsigned long)reminders.count);
for (TSRemindersModel *reminder in reminders) {
TSLog(@"提醒: %@ (类型: %ld, 启用: %@)",
reminder.reminderName,
(long)reminder.reminderType,
reminder.isEnabled ? @"是" : @"否");
}
}];
全量替换提醒设置
- (void)replaceAllReminders:(NSArray<TSRemindersModel *> *)reminders completion:(TSCompletionBlock)completion;
用提供的数组全量替换设备上的所有提醒。
参数
| 参数名 | 类型 | 说明 |
|---|---|---|
reminders | NSArray<TSRemindersModel *> * | 用于替换当前提醒的提醒对象数组 |
completion | void (^)(BOOL, NSError * _Nullable) | 完成回调,返回是否成功和错误信息 |
代码示例
id<TSRemindersInterface> remindersInterface = ...;
// 先获取所有提醒
[remindersInterface fetchAllRemindersWithCompletion:^(NSArray<TSRemindersModel *> * _Nullable reminders, NSError * _Nullable error) {
if (error || !reminders) return;
NSMutableArray *updatedReminders = [NSMutableArray arrayWithArray:reminders];
// 修改某个提醒
if (updatedReminders.count > 0) {
TSRemindersModel *firstReminder = updatedReminders[0];
firstReminder.enabled = NO;
}
// 全量替换
[remindersInterface replaceAllReminders:updatedReminders completion:^(BOOL success, NSError * _Nullable error) {
if (success) {
TSLog(@"提醒已全量替换");
} else {
TSLog(@"替换提醒失败: %@", error.localizedDescription);
}
}];
}];
更新或新增提醒
- (void)setReminder:(TSRemindersModel *)reminder completion:(TSCompletionBlock)completion;
根据提醒ID更新提醒。如果指定ID的提醒存在则更新,不存在则自动新增(受设备数量上限约束)。
参数
| 参数名 | 类型 | 说明 |
|---|---|---|
reminder | TSRemindersModel * | 包含更新信息的提醒模型,必须具有有效的 reminderId |
completion | void (^)(BOOL, NSError * _Nullable) | 完成回调,返回是否成功和错误信息 |
代码示例
id<TSRemindersInterface> remindersInterface = ...;
// 创建新提醒
[remindersInterface createCustomReminderTemplateWithCompletion:^(TSRemindersModel * _Nullable reminder, NSError * _Nullable error) {
if (error) {
TSLog(@"创建模板失败: %@", error.localizedDescription);
return;
}
// 配置提醒参数
reminder.reminderName = @"喝水提醒";
reminder.enabled = YES;
reminder.reminderType = TSReminderTypeCustom;
reminder.repeatDays = TSRemindersRepeatWorkday; // 工作日
reminder.timeType = TSReminderTypeTypePeriod; // 时间段
reminder.startTime = 480; // 8:00
reminder.endTime = 1020; // 17:00
reminder.interval = 60; // 每60分钟提醒一次
reminder.isLunchBreakDNDEnabled = YES;
reminder.lunchBreakDNDStartTime = 720; // 12:00
reminder.lunchBreakDNDEndTime = 840; // 14:00
// 设置提醒
[remindersInterface setReminder:reminder completion:^(BOOL success, NSError * _Nullable error) {
if (success) {
TSLog(@"提醒 '%@' 已保存", reminder.reminderName);
} else {
TSLog(@"保存提醒失败: %@", error.localizedDescription);
}
}];
}];
删除提醒
- (void)deleteReminderWithId:(NSString *)reminderId completion:(TSCompletionBlock)completion;
根据提醒ID删除提醒。
参数
| 参数名 | 类型 | 说明 |
|---|---|---|
reminderId | NSString * | 要删除的提醒的唯一标识符 |
completion | void (^)(BOOL, NSError * _Nullable) | 完成回调,返回是否成功和错误信息 |
代码示例
id<TSRemindersInterface> remindersInterface = ...;
// 假设已获取提醒的 reminderId
NSString *reminderId = @"reminder_001";
[remindersInterface deleteReminderWithId:reminderId completion:^(BOOL success, NSError * _Nullable error) {
if (success) {
TSLog(@"提醒已删除");
} else {
TSLog(@"删除提醒失败: %@", error.localizedDescription);
}
}];
验证提醒模型数组
+ (NSError * _Nullable)validateReminders:(NSArray<TSRemindersModel *> *)reminders;
验证一个提醒模型数组,检查每个模型的有效性。
参数
| 参数名 | 类型 | 说明 |
|---|---|---|
reminders | NSArray<TSRemindersModel *> * | 要验证的提醒模型数组 |
返回值
| 类型 | 说明 |
|---|---|
NSError * _Nullable | 返回第一个错误,如果所有模型都有效则返回 nil |
代码示例
// 验证提醒数组
NSArray<TSRemindersModel *> *reminders = ...;
NSError *validationError = [TSRemindersModel validateReminders:reminders];
if (validationError) {
TSLog(@"提醒验证失败: %@", validationError.localizedDescription);
} else {
TSLog(@"所有提醒验证通过");
}
注意事项
-
勿直接创建实例:请勿使用
[[TSRemindersModel alloc] init]直接创建提醒实例。获取提醒的方式应为:- 通过
fetchAllRemindersWithCompletion:获取现有提醒 - 通过
createCustomReminderTemplateWithCompletion:创建新的自定义提醒
- 通过
-
内置提醒无法删除:久坐、喝水、吃药等内置提醒无法通过
deleteReminderWithId:删除,只能通过修改enabled属性来禁用。 -
自定义提醒可完全管理:自定义提醒可以进行全部操作:创建、修改、删除。
-
设备数量限制:创建自定义提醒时应检查
maxSupportedCustomReminderCount限制,避免超过设备支持的最大数量。 -
时间格式:所有时间都以从午夜(0:00)开始的分钟数表示:
- 0 = 00:00(午夜)
- 360 = 06:00(早上6点)
- 720 = 12:00(中午)
- 1020 = 17:00(下午5点)
- 1440 = 24:00(下一天的午夜)
-
时间类型选择:
- 使用
TSReminderTimeTypePoint时,应配置timePoints数组 - 使用
TSReminderTimeTypePeriod时,应配置startTime、endTime和interval
- 使用
-
重复日期配置:使用位运算组合多个日期,例如
TSRemindersRepeatMonday | TSRemindersRepeatWednesday | TSRemindersRepeatFriday表示周一、周三、周五。 -
午休免打扰:当启用
isLunchBreakDNDEnabled时,建议将lunchBreakDNDStartTime设为 720(12:00)、lunchBreakDNDEndTime设为 840(14:00)。 -
全量替换的危险性:调用
replaceAllReminders:completion:会完全覆盖设备上的所有提醒,使用前应谨慎确认。 -
异步操作:所有操作都是异步的,必须通过 completion 回调获取结果,不要在同步上下文中依赖操作结果。