我在我的应用程序中经常使用Apple的视图控制器(如MFMessageComposeViewController
和ABPeoplePickerNavigationController
(。因此,当我收到通知(本地或远程通知(时,我将如何以最优雅的方式处理它,因为我无法与Apple的视图控制器进行交互(发送消息(。
我的假设是,如果用户正在积极使用该应用程序,即MFMessageComposeViewController
他不想被他正在做的事情打扰/打断。但如果是我,如果我在做某事,我会有点困惑,我会听到嘘声(来自通知(,然后什么也没发生。
此问题的合理方法是否让用户在他所在的任何Apple视图控制器中完成任务,然后向用户显示通知?
或者关闭 Apple 视图控制器并处理通知,然后将用户放回 Apple 视图控制器中?
我不太确定我是否完全正确理解了你,但对我来说,听起来你想做这样的事情:
- 如果用户正在您的应用程序中撰写消息,并且有一个传入通知,例如来自 facebook 应用程序的推送通知,您希望通过让 MFMessageComposerViewController 执行某些操作来在您的应用程序中以某种方式处理此事件。
作为对这一要求的答复,我想陈述如下:
-
如果扩展此类,您应该能够将消息发送到 MFMessageComposerViewController(即创建一个名为 MyMessageComposerController 的类并让它扩展标准控制器,并在那里执行任何您需要的操作(
-
但是,您实际上无法对推送通知执行任何操作,它来自另一个应用程序,并且此功能内置于iOS中,您无法在用户完成键入后使推送到达,它将始终到达并且用户将始终是决定他/她是否应该继续键入或查看通知的人。你唯一能做的是确保你的应用保存用户键入的所有内容,以便他/她在返回到你的应用时可以继续键入。
假设您不仅想在消息编辑器上显示 AlertView 或类似模式的内容,我会执行以下操作:
- 为作曲家指定
MFMessageComposeViewControllerDelegate
。 - 像往常一样展示作曲家。
- 排队/记住作曲家演奏时收到的通知(通过正常的
application:didReceive{Local|Remote}Notification:
消息( - 当编辑器关闭时,委托会收到其
messageComposeViewController:didFinishWithResult:
消息。 - 做... 随便...使用存储/排队的通知。
是延迟响应通知,直到用户完成合成还是打断他们,都是一个更棘手的情况。 如果这是一个相对不重要的通知或频繁的通知,我会倾向于队列/延迟方法。但是对于"重要"通知,我打断用户没有问题。 当然,这只是将问题转移到决定重要性的因素上。这在很大程度上取决于应用程序。