向 AppDelegate 添加类别以实现 UIAplicationDelegate 协议中的方法

Adding a category to AppDelegate to implement a method from UIAplicationDelegate protocol

我正在开发一个 Cocoa Touch Framework,我想接收来自 APNS 的远程通知,我发现(在所有需要与 APNS 建立通信的过程之后)我必须在 application:didReceiveRemoteNotification:fetchCompletionHandler: 方法。但是,我想让 IOS 开发人员尽可能少地工作,所以我一直在想。

我会说不需要。您在这里可以做的是使用与 application:didReceiveRemoteNotification:fetchCompletionHandler: 中相同的参数在您的代码中创建一些函数,并使其可供可能的开发人员从您的框架中调用。

许多框架都以这种方式工作,例如 FacebookSDK。 例如,我在 AppDelegate 中的代码 opening/handling URL:

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    let fbHandled: Bool = ApplicationDelegate.shared.application(app,
                                                               open: url,
                                                               sourceApplication: options[.sourceApplication] as? String,
                                                               annotation: options[.annotation])
    return fbHandled
}

您可以看到 Facebook 只是为我提供了一些 public 方法来处理其 SDK 中的链接。与隐式处理开发人员可能需要了解并可用于更改其代码的内容相比,这是一个更好的解决方案。