如何触发/强制以编程方式同步IOS提醒?

问题描述:

我正在编写使用EKReminder的任务管理应用程序。 在一台iOS设备上使用时可以很好地工作。如何触发/强制以编程方式同步IOS提醒?

当我在两台设备(同一个苹果帐户)上使用时,我意识到提醒更改同步的延迟时间很长,甚至经常不完整。 (试过的iCloud,谷歌,公司前景)

因此,这似乎无关,我的应用程序(如果我直接在提醒iOS应用更改提醒同样的情况)。

我可以通过编程的方式强制提醒与他们链接到的任何服务(例如iCloud)同步并触发此功能吗?

+1

有点冒险的解决方案是将提醒存储在服务器上,并将静默通知发送到与执行操作(添加/编辑/删除)的用户相关联的其他设备。那些设备会下载更新的信息。如果它足够小,它甚至可以放入通知中。 – Losiowaty

@Losiowaty建议在评论这个问题的有效解决方案,但我认为有以下解决方案(S)可以提供更多的信息。为了公平起见,我其实已经与苹果提醒应用程序注意到了这个完全一样的问题具体,并认为,在一般的解决方案适用于iOS,但可以结转到具有在MacOS类似的问题,以及相同的通知。

对于iOS,不过,这个问题似乎是:

  • 两个在同一个苹果iCloud帐户的iOS设备都将得到一个特定提醒推送通知。但问题是,清除1设备上的推送通知在几乎所有情况下都不能正确同步第二个设备。根据我的理解,这是上面提到的问题。

第二,从我所知道的问题来看,没有公认的问题是,这个问题是由于“主机”应用程序没有正确地清除它自己的推送通知,可以这么说。我的意思是:

  • iPad和iPhone从Reminders应用程序接收关于12:00 TODO项目的推送通知,在12:00。
  • iPad推送通知被执行,标记为已完成,并立即在iPad上清除
  • iPhone推送通知仍然存在(我们试图解决的问题),但可能不会被删除,直到它被删除打开提醒应用未从推送通知往往会不清楚这一点)。

这样做的原因是推送通知没有被应用程序清除,所以即使它现在是不相关的信息(因为它被标记为完成(或延后)其他设备上后清零)但推送通知系统并不知道(因为推动仅仅是信息的有效载荷,除非你正确地对这些使用TTL,但是这是一个不同的答案)。解决这个问题的方法,大多数/某些应用程序在某种程度上可能会使用:

1)如注释中所述,在第2点中,操作(标记为已完成并从设备1清除)可能会更新后端(在这种情况下,iCloud)这个item已完成,然后向所有关联设备发送无声推送,以正确清除推送通知(这可能会发生在应用程序后台任务的形式中,如Notification Service ExtensionApple link here (iOS 10+ only)

2)另一种方法是对发送的每个推送通知(通过所有关联设备)保持唯一的内部“秘密”密钥。然后,您可以将任何一个“任务”对象(在提醒应用上下文中作为示例,但这实际上可以是您的应用中保存的任何数据对象),并带有一组推送通知“秘密”密钥(可以过期一个自定义计时器,如果你觉得这些正在失控,特别是因为在大多数使用情况下30天后推送可能是查看不相关)。除此之外,如果应用程序通知设备有任何推送通知,它不应该(基于与“活动”数据相关联的“秘密”密钥集合)的应用程序更新它的数据,应该为你清除它们。这最终得到与方法1相同的结果,但不需要静默推送(可以使用套接字,或者完全使用其他套接字),并且可以依赖于基本的background job

它看起来像是任何一种方式,需要某种后台任务处理,以便在发生问题时采取行动(通过通知服务扩展as linked或Apple支持的简单background task)。

我希望这回答你的问题,并指出你在正确的方向为你正在建设!

+0

谢谢BHendricks。我不知何故一直希望有一个更简单/更直接的解决方案(一些命令来触发同步......)显然不那么简单。欣赏解释 – TPeter