iOS – 当我没有 GUI "control"时如何处理通知



我在我的应用程序中经常使用Apple的视图控制器(如MFMessageComposeViewControllerABPeoplePickerNavigationController(。因此,当我收到通知(本地或远程通知(时,我将如何以最优雅的方式处理它,因为我无法与Apple的视图控制器进行交互(发送消息(。

我的假设是,如果用户正在积极使用该应用程序,即MFMessageComposeViewController他不想被他正在做的事情打扰/打断。但如果是我,如果我在做某事,我会有点困惑,我会听到嘘声(来自通知(,然后什么也没发生。

那么,处理

此问题的合理方法是否让用户在他所在的任何Apple视图控制器中完成任务,然后向用户显示通知?

或者关闭 Apple 视图控制器并处理通知,然后将用户放回 Apple 视图控制器中?

我不太确定我是否完全正确理解了你,但对我来说,听起来你想做这样的事情:

  • 如果用户正在您的应用程序中撰写消息,并且有一个传入通知,例如来自 facebook 应用程序的推送通知,您希望通过让 MFMessageComposerViewController 执行某些操作来在您的应用程序中以某种方式处理此事件。

作为对这一要求的答复,我想陈述如下:

  1. 如果扩展此类,您应该能够将消息发送到 MFMessageComposerViewController(即创建一个名为 MyMessageComposerController 的类并让它扩展标准控制器,并在那里执行任何您需要的操作(

  2. 但是,您实际上无法对推送通知执行任何操作,它来自另一个应用程序,并且此功能内置于iOS中,您无法在用户完成键入后使推送到达,它将始终到达并且用户将始终是决定他/她是否应该继续键入或查看通知的人。你唯一能做的是确保你的应用保存用户键入的所有内容,以便他/她在返回到你的应用时可以继续键入。

假设您不仅想在消息编辑器上显示 AlertView 或类似模式的内容,我会执行以下操作:

  1. 为作曲家指定MFMessageComposeViewControllerDelegate
  2. 像往常一样展示作曲家。
  3. 排队/记住作曲家演奏时收到的通知(通过正常的application:didReceive{Local|Remote}Notification:消息(
  4. 当编辑器关闭时,委托会收到其messageComposeViewController:didFinishWithResult:消息。
  5. 做... 随便...使用存储/排队的通知。

是延迟响应通知,直到用户完成合成还是打断他们,都是一个更棘手的情况。 如果这是一个相对不重要的通知或频繁的通知,我会倾向于队列/延迟方法。但是对于"重要"通知,我打断用户没有问题。 当然,这只是将问题转移到决定重要性的因素上。这在很大程度上取决于应用程序。