主要有三种通知:
广播通知(broad notification)
本地通知(local notification)
推送通知即远程通知(push notification)
广播通知
将要接受通知的对象需要向通知中(NSNotificationCenter) 注册,当投放对象投送通知给通知中心时,通知中心就会把通知广播给注册过的接受者,当观察者不再观察时,则移除
- 发布通知postNotification…
- 添加观察者addObserver…
- 不再关注removeObserver
本地通知
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
self.window.rootViewController = self.viewController;
//本地通知
UILocalNotification *notification=[[UILocalNotification alloc] init];
if (notification!=nil) {
[[UIApplication sharedApplication] cancelAllLocalNotifications];
NSDate *now=[NSDate new];
notification.fireDate=[now dateByAddingTimeInterval:10]; //触发通知的时间
notification.repeatInterval = kCFCalendarUnitMinute; //循环次数,kCFCalendarUnitWeekday一周一次
notification.timeZone=[NSTimeZone defaultTimeZone];
notification.soundName = UILocalNotificationDefaultSoundName;
notification.alertBody=@"哈哈哈哈哈"; //若alertBody不为nil,则显示alert
//在模拟器上暂时还没有测试出以下两个属性的作用
notification.alertAction = @"打开"; //显示alert右侧提示按钮
notification.hasAction = YES; //默认为YES,是否显示额外的按钮,为no时alertAction消失
notification.applicationIconBadgeNumber = 1; //设置app图标右上角的数字
//下面设置本地通知发送的消息,这个消息可以接受
NSDictionary* infoDic = [NSDictionary dictionaryWithObject:@"value" forKey:@"key"];
notification.userInfo = infoDic;
//发送通知
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
}
[self.window makeKeyAndVisible];
return YES;
}
远程通知
远程推送服务,APNs(apple push notification servers)
所有的苹果设备,在联网状态下,都会与苹果的服务器建立长连接
过程:
- 客户端的app需要将用户的UDID和app的bundleID发送给apns服务器,进行注册,apns将加密后的device Token返回给app
- app获得device Token后,上传到公司服务器
- 当需要推送通知时,公司服务器会将推送内容和device Token一起发给apns服务器
PS:
例:保证self定义了aWindowBecameMain:方法。而对于一个任意的观察者observer,不能保证其对应的selector有aWindowBecameMain:,可采用[observer respondsToSelector:@selector(aWindowBecameMain:)]] 进行检查。所以完整的添加观察者过程为:if([observer respondsToSelector:@selector(aWindowBecameMain:)]) { [[NSNotificationCenter defaultCenter] addObserver:observer selector:@selector(aWindowBecameMain:) name:NSWindowDidBecomeMainNotification object:nil]; }