Notifiable
Notifiable 是一套实用类,易于与 Notifiable-Rails 集成。
它处理设备令牌注册,并负责重试失败的请求和避免重复注册。
为不同用户注册现有令牌会导致令牌被重新分配。
设置
项目集成
Notifiable for iOS 在 CocoaPods 上可用。要使用它安装,只需将以下行添加到您的 Podfile
中
pod 'Notifiable'
如果您不使用 CocoaPods,您可以克隆此项目并将文件导入到您自己的项目中。此库使用 AFNetworking 作为依赖项,并配置为 子模块。
您可以在 示例文件夹 中查看实现示例。
使用
要使用 FWTNotifiableManager
,创建一个新的对象,传递服务器URL、应用访问ID和应用密钥。您还可以提供将用于在设备注册远程通知和接收到新通知时通知您的代码的块。
self.manager = FWTNotifiableManager(url: <<SERVER_URL>>, accessId: <<USER_API_ACCESS_ID>>, secretKey: <<USER_API_SECRET_KEY>>, didRegisterBlock: { [unowned self] (manager, token) -> Void in
...
}, andNotificationBlock:{ [unowned self] (manager, device, notification) -> Void in
...
})
转发应用程序事件
将设备令牌转发到 FWTNotifiableManager
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData)
{
FWTNotifiableManager.application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken)
}
将新通知转发到 FWTNotifiableManager
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
if (FWTNotifiableManager.applicationDidReceiveRemoteNotification(userInfo)) {
print("Notifiable server notification")
}
}
监听应用程序事件
当设备注册远程通知或收到远程通知时,您可以使用 FWTNotifiableManager
中的块或注册一个对象作为 FWTNotifiableManagerListener
来接收通知。
func viewDidLoad() {
super.viewDidLoad()
FWTNotifiableManager.registerManagerListener(self)
}
//MARK: FWTNotifiableManagerListener methods
func applicationDidRegisterForRemoteNotificationsWithToken(token: NSData) {
...
}
func applicationDidReciveNotification(notification: [NSObject : AnyObject]) {
...
}
func notifiableManager(manager: FWTNotifiableManager, didRegisterDevice device: FWTNotifiableDevice) {
...
}
func notifiableManager(manager: FWTNotifiableManager, didFailToRegisterDeviceWithError error: NSError) {
...
}
注册设备
在调用 application:didRegisterForRemoteNotificationsWithDeviceToken:
之后,您可以使用设备令牌来在 Notifiable-Rails
服务器中注册该设备。
您可以注册一个匿名设备
override func viewDidLoad() {
super.viewDidLoad()
//1 - Config manager
self.manager = FWTNotifiableManager(URL: serverURL, accessId: accessID, secretKey: secretKey(), didRegisterBlock: { [unowned self] (manager, token) -> Void in
//3 - Register device
self.registerDevice(manager, token: token)
}, andNotificationBlock: nil)
//2 - Request for permission
let notificationSettings = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)
UIApplication.sharedApplication().registerUserNotificationSettings(notificationSettings)
}
func registerDevice(manager:FWTNotifiableManager, token:NSData) {
manager. registerAnonymousDeviceWithName("iPhone", locale: NSLocale.autoupdatingCurrentLocale(), deviceInformation: ["onsite":true]) { (device, error) -> Void in
...
}
}
或注册与用户关联的设备
func registerDevice(manager:FWTNotifiableManager, token:NSData) {
manager.registerDeviceWithName("device", userAlias: "user", locale: NSLocale.autoupdatingCurrentLocale(), deviceInformation: ["onsite":true]) { (device, error) -> Void in
...
}
}
deviceInformation
字典包含代表设备元数据的扩展参数,例如,您可以发送设备的当前纬度和经度。
您可以在管理器的 currentDevice
属性中访问已注册的设备信息
let device = self.manager.currentDevice
更新设备信息
设备注册后,您可以更新设备信息。
self.manager.updateDeviceToken(nil, deviceName: "device", userAlias: "user", location: NSLocale.currentLocale(), deviceInformation: ["onsite":true]) { (device, error) -> Void in
...
}
您还可以将设备与其他用户关联
self.manager.associateDeviceToUser(user, completionHandler: { (device, error) -> Void in
...
}
或匿名化令牌
self.manager.anonymiseTokenWithCompletionHandler { (device, error) -> Void in
...
}
注销设备
您可能希望注销设备令牌(可能是在用户登出或在应用程序中取消选中退出时)。
self.manager.unregisterTokenWithCompletionHandler { (device, error) -> Void in
...
}
标记通知为已打开
当应用程序启动或收到远程通知时,您可以将此通知用户已打开的事实传递给Notifiable-Rails。
此处应使用的userInfo
是通知收到的有效负载。
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
self.manager.applicationDidReceiveRemoteNotification(userInfo);
}
列出与用户关联的设备
设备注册后,您可以通过请求来获取用户已注册的设备列表。
self.manager.listDevicesRelatedToUserWithCompletionHandler { [weak self] (devices, error) -> Void in
...
}
如果设备注册为匿名,列表将仅包含当前设备。