大多数 iOS 开发者应该知道,在 iOS 8 的时候推送通知的开发有了些变化。主要体现在一些命名的变化(Remote 改为 User),另外相对之前只需要一句代码就能解决,现在需要多一些步骤。但总的来说改变并不大,实现原理并未改变。
如 iOS 7:
iOS 71 2 3 4
| [[UIApplication sharedApplication] registerForRemoteNotificationTypes:( UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound )];
|
iOS 8:
iOS 81 2 3 4
| UIUserNotificationType notificationTypes = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert; UIUserNotificationSettings *notificationSettings = [UIUserNotificationSettings settingsForTypes:notificationTypes categories:nil]; [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings]; [[UIApplication sharedApplication] registerForRemoteNotifications];
|
虽然很多人早就已经知道并在实践中作出了改变,但可能依然有些人并不知道 iOS 做出这种改变的原因。
原因是要对本地通知进行规范,并与远程推送通知进行统一。
之前对于本地通知,是无需取得用户授权的,只有远程推送类型的通知需要申请用户授权。上面的那些代码也只是针对远程通知来说的(所以它们之前的命名中都带有”Remote”字眼),本地通知根本无须注册,直接发送通知就好了。但其实这并不合理。
进行改变之后,本地通知跟远程推送通知的概念进行了统一,它们唯一的不同只是消息来源的不同。所以本地通知也需要进行授权。
在代码上,它们的注册也只有一句代码的差距:如果只需要本地通知,则不书写最后的一句:
1
| [[UIApplication sharedApplication] registerForRemoteNotifications];
|
即可。