iOS Notification (通讯与推送)

1. 用于app内消息通讯的Notification

1. 首先需要声明一个观察者来关注有可能在程序内发送的Notification

[[NSNotificationCenter defaultCenter] 
         addObserver:self selector:@selector(methodName:) name:strNoteName object:(id)sender]
// self是观察者
// methodName是接受通知后要执行的方法,它要有且仅有一个参数:NSNotification(name; Object; userInfo)
// strNoteName是指定只有收到名字为name的note的时候才继续
// sender可以为nil,用来指定只有sender是摸个obj是才继续

2. 写好收到特定通知时要执行的方法

- (void)newNotificationComes: (NSNotification *)note
{
  // 使用NSNotification的object方法得到需要的参数
  // 另外还有name, userInfo方法
  (myObj *)myObject = [note object];
}

3. 在程序需要的地方发送一条notification

// post一条通知,另外还有两种方法。更简单点的和更复杂点的
// - (void)postNotification:(NSNotification *)notification
/* - (void)postNotificationName:(NSString *)notificationName object:(id)notificationSender 
 * userInfo:(NSDictionary *)userInfo
 */
[[NSNotificationCenter defaultCenter] postNotificationName: strNoteName object:myObject];

2. 用于推送(push)服务的Notification

首先说明的是这个推送服务并不是随随便便就让用的,必须是缴纳了$99的开发者才能注册证书使用此功能。在实际使用之前你仍然有很多的事情需要做,推荐看一篇鸟语的详细指南

内容大概就是申请一个appID用于发送push notification
申请开启支持APNs服务
下载证书并添加profile
在XCode中你项目的target中把Identifier改成你申请appID的Identifier(一般是com.urCompany.appName)
在build setting里搜索code signing,改成使用你刚添加进去的profile
设置好了接下来就是代码的使用了

- (void)applicationDidFinishLaunching:(UIApplication *)application {    
// ...

NSLog(@"Registering for push notifications...");    

// 注册使用push notification(remote notification)
// 注意三种type的选择可以自定义
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
                                        (UIRemoteNotificationTypeAlert | 
                                         UIRemoteNotificationTypeBadge | 
                                         UIRemoteNotificationTypeSound)];
}
 
// 这个方法会在成功注册push notification时调用,你应该妥善的将这个token发送给你自己的设置的服务器
// 以便在日后需要像这个设备发送push notification是使用
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 
   // 这个唯一的token就是你找到这个唯一设备的根据
   NSLog(@"Device Token:%@", deviceToken);
}
 
// 这个方法会在注册失败是调用。失败包括但不限于 用户不允许接受这个app的notification
- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err { 
   NSLog(@"Error: %@", err);    
}
 
// 这个方法会在设备(正在运行当前app)收到ANPs发送的notification时调用
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    for (id key in userInfo) {
        NSLog(@"key: %@, value: %@", key, [userInfo objectForKey:key]);
    }    
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注