ASJPushNotificationManager
要使您应用支持推送/远程通知,需要设置很多。您需要在 Apple 开发者门户上创建证书并在项目中注册它们。我个人认为这会使我的 AppDelegate 复杂化。
从 iOS 8.0 开始,推送通知的设置过程已改变,如果您仍然支持以下版本,则意味着需要更多的代码。此库抽象注册设备以接收推送通知的代码,并为您处理代理方法。
安装
推荐使用 CocoaPods 安装此库。只需在 Podfile 中添加以下命令并运行 pod install 即可。
pod 'ASJPushNotificationManager'用法
您需要在需要请求用户推送权限的类中导入 ASJPushNotificationManager.h。
+ (instancetype)sharedInstance;此类是单例的,您必须使用它的共享实例来访问定义的属性和方法。
- (void)registerWithTypes:(ASJPushNotificationType)types categories:(nullable NSSet<UNNotificationCategory *> *)categories completion:(nullable CompletionBlock)completion;调用此方法以触发注册流程。当首次调用时,它会提示用户应用希望能够发送推送通知。用户选择后,完成块将被触发,您将收到设备令牌或错误对象。
默认的代理方法 application:didRegisterForRemoteNotificationsWithDeviceToken: 将设备标记作为 NSData 返回。在您在块中收到它之前,它会转换为可用的 NSString。您就像往常一样可以将此字符串传递到您的服务器。 注意 模拟器上不会获取标记。
@property (nullable, readonly, copy, nonatomic) NSString *deviceToken;生成的设备标记始终可以作为公开属性使用。请注意,如果在未允许接收推送通知的情况下,则可能为 nil。
- (void)unregister;要停止在应用程序中接收推送,您可以取消注册。
处理推送事件
大多数委托方法都被抽象化,即使你在 AppDelegate 中写它们,也不会被调用。您需要观察不同事件的 NSNotification。只需确保在 dealloc 中删除观察者即可。
extern NSString *const ASJAuthorizationSuccessfulNotification;当权限被授予时发布。
extern NSString *const ASJAuthorizationFailedNotification;当权限未被授予时发布。
extern NSString *const ASJTokenErrorNotification;当调用 application:didFailToRegisterForRemoteNotificationsWithError: 时发布的通知。
extern NSString *const ASJTokenReceivedNotification;当调用 application:didRegisterForRemoteNotificationsWithDeviceToken: 时发布的通知。
extern NSString *const ASJSilentPushReceivedNotification;当调用 application:didReceiveRemoteNotification:fetchCompletionHandler: 时发布的通知。
extern NSString *const ASJVisiblePushReceivedNotification;当调用 userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler: 时发布的通知。
注意
对于带有 completionHandler 的方法,您必须在这些方法中调用该块,以便它们能正常工作。块将作为 NSNotification 的 object 部分接收。
致谢
- NSHipster - 方法交换
- UIApplication 类参考
- iOS: 在代码中访问 app-info.plist 变量
- 从图标打开 intendsReceiveRemoteNotification: fetchCompletionHandler: 与推送通知的关系
- 能否交换 application:didReceiveRemoteNotification 方法?
- 将 NSData 序列化为十六进制字符串的最佳方式
- M2DPushNotificationManager - 检查 iOS 8 以下的推送注册状态
- Nick Lockwood 的 '弃用' gist 以去除 iOS 7 警告
- 升级到 iOS 10 - 用户通知框架
待办
为iOS 7添加检查,以确保没有警告。
许可证
ASJPushNotificationManager可在MIT许可证下使用。请参阅LICENSE文件以获取更多信息。