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文件以获取更多信息。