iOS中如何接收横幅通知的提醒?

7
我正在编写一个iOS应用程序,当操作系统显示横幅通知(如下图)时,我想暂停我的应用程序的动态内容: Banner Notification 是否有系统NSNotification可以观察或者可以响应的方法? 我已经尝试过applicationWillResignActive,但在这种情况下没有被调用。

1
便宜的方法:窗口的框架或边界是否会改变?如果是,您可以尝试在应用程序窗口的边界上使用KVO。 - Moshe
简短回答:没有合法的方法。APNS被设计为客户端-服务器模型,因此您不应该收到不属于您的横幅通知。长回答:通知横幅会出现,因此必须是视图或图层。无论哪种方式,我有一种预感,当横幅显示时,窗口层次结构可能会发生变化。 - CodaFi
1
@CodaFi- 我的猜测是,该通知不在你的窗口中,而是完全在你的应用程序视图层次结构之外。 - BergQuester
如果我能够获得iOS dmg的转储,我会做另一件事情,那就是寻找私有框架,以了解它们的开发方式。我建议给Springboard团队发送电子邮件,看看他们是否可以为你提供指导。 - Moshe
@Moshe 为什么选择Springboard? - bdesham
Springboard是主屏幕。我猜它会负责显示通知。 - Moshe
1个回答

2
今天早上我试着做了一下,我倾向于说这个没有公共API。
我尝试使用在这里概述的代码,但是没有收到任何通知。然后,我运行了一堆“测试”来看看是否能找到什么。
为了测试,我创建了一对应用程序,一个用于调度通知(GitHub链接)一个用于尝试“捕获”它们(GitHub链接)。在我的发送者应用中,我可以每隔N秒发送N个通知。我选择了一些任意高的值并发送了它们。
在我的 catcher 中,我尝试查看层级结构中可见矩形的值。(keyWindow 位于一个层中,但它的 superview 和 super layer.delegate 都是 nil)我还没有检查约束,但这不应该有影响。我已经查看了应用程序的窗口、nil superview、它的层、它的子视图。应用程序的边界也没有受到影响。该应用程序被沙盒化得非常好,以至于 SpringBoard 和通知中心在应用程序的世界中不存在。
我开始走私有框架的路线,但决定这不值得努力。
我打开了 Instruments,并查看了视图的透明度水平。(是否可能强制使层次结构中的所有视图都是不透明的,然后使用它来查看横幅是否阻挡了某些内容?也许如果它是透明的,那么它就不是“阻挡”了?)
我还尝试拍摄屏幕截图,并检查屏幕顶部区域的颜色,但这不起作用,因为您需要将一个视图传递到上下文中。即使它可以工作,它也不会特别高效。
另一个我想到的想法是在推送端口上监听推送通知,但我怀疑苹果是否允许你捕捉另一个应用程序的通知。作为开发人员,我不会在警报中发送私人信息,但这仍然是一个问题。
事实上,通知横幅并不会真正导致您的应用程序变得无效,所以我不确定这种行为是否有错。如果这是一种方便,请提交错误报告。那么请求DeviceWillShowNotificationNotification如何?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接