使用信标管理 iOS 框架的本地通知

Managing local notifications for iOS framework with beacons

我一直在研究包含信标功能的 iOS 框架(在 Swift 中)。我让它工作了,除了我不确定如何处理我在前台并且在短时间内遇到多个信标的情况。

如果我希望 didReceive 委托方法在前台显示信标警报,并且如果我遇到许多信标,它将无法很好地工作(警报将一个接一个地显示)。是否有某种解决方案可以以某种方式对通知进行排队?

另外我想知道,是否有办法在我的框架内创建所有接收本地通知的逻辑? 我必须能够支持 iOS-8.0,所以我不能使用 iOS-10.0

提供的通知中心

我可以创建一些 class 来表现得像 appdelegate(可能是一些 class 来在框架内实现 UIApplicationDelegate)吗?

我想将尽可能多的代码放入框架本身,这样就不会让某人将该框架包含所有功能变得过于混乱。

过了一段时间我想出了一个方法来做这个。我是 iOS 的初学者,有几个月的经验,所以我不能说这个解决方案是否最好,但它对我有用。

我找到了一种从框架中实现所有与推送和本地通知相关的委托方法的方法。基本上如果主应用程序希望框架处理通知而不必自己实现任何东西,在运行时框架将动态实现某些 UIApplicationDelegate 方法 AppDelegate.swift class (或任何你的 AppDelegate class 调用).

我用 object_getClass(UIApplication.shared.delegate!) 得到主要的 class。

然后我使用 func class_addMethod(_ cls: AnyClass!, _ name: Selector!, _ imp: IMP!, _ types: UnsafePointer!) -> Bool 从框架内部实现用于推送和本地通知的委托方法,所以现在归结为编写一两行代码以完全使用框架来处理工作通知和信标位置服务,而不必在框架外部编写大量代码。

至于在前台模式下处理通知,我通过将它们添加到队列中来实现这一点,这样如果收到多个通知,并且想要在前台模式下显示,UIAlertController 将只显示一个,其余的将被放入队列并再次发送,但有一些小的延迟(我将触发日期设置为我认为适合我的情况的某个值)在用户对第一个通知采取行动后,这是唯一出现的通知。

这些只是我对我遇到的问题的想法,如果有人对这些解决方案感兴趣,我会在需要时写下更多细节。我也很乐意接受任何批评。