Local/Remote Notification

简介

远程通知(remote notification)和本地通知(local notification)是两种用户通知类型,远程通知又称为推送通知(push notification)。这两种通知都可以实现当不在前台运行的APP通知使用该APP的用户新信息,这消息可以是消息,临近的日历,或来自远端服务器的新数据等。当操作系统呈现这些通知时,可以显示一个alert提醒或是app icon提醒。在提醒的时候也可以有声音的提示。

当用户点击通知时可以启动APP查看通知详情,也可选择不打开APP忽略通知。

注意

不管是远程通知合适本地通知都与广播通知(NSNotificationCenter)和KVO(key value observe)无关。

本地通知

Xcode 6本地通知接收不到

出现提示信息:

  1. Attempting to schedule a local notification
  2. with an alert but haven't received permission from the user to display alerts
  3. with a sound but haven't received permission from the user to play sounds

原因在于在iOS8系统上需要注册本地通知,这样才能正常使用

iOS8注册本地通知

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]) {
        [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeSound | UIUserNotificationTypeBadge | UIUserNotificationTypeAlert categories:nil]];
    }

    return YES;
}

- (IBAction)registerLocationNotification:(id)sender {

UILocalNotification *locationNotification = [[UILocalNotification alloc]init];
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:5];
locationNotification.fireDate = date;
locationNotification.timeZone = [NSTimeZone defaultTimeZone];
locationNotification.repeatInterval = NSCalendarUnitSecond;
locationNotification.alertBody = @"通知来了。。。";
locationNotification.alertAction = @"通知";
locationNotification.alertLaunchImage = @"3.png";
locationNotification.userInfo = @{@"user":@"lfx"};
locationNotification.soundName = @"sound.caf";
locationNotification.applicationIconBadgeNumber = 10;
[[UIApplication sharedApplication] scheduleLocalNotification:locationNotification];
}

回调方法

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{
    //取消通知的注册
    [application cancelLocalNotification:notification];
}

远程通知(Push通知)

APNS推送机制(Apple Push Notification Service)

image

Provider:程序的后台服务器。

上图分为三阶段:

第一阶段:应用程序的服务器端把要发送的消息、目的iPhone的标识打包,发给APNS。

第二阶段:APNS在自身的已注册Push服务的iPhone列表中,并把消息发送到iPhone。

第三阶段:iPhone把发来的消息传递给应用程序,并按照规定弹出Push通知。

APNS推送通知的详细流程

image

  1. APP注册APNS消息推送,iOS向APNS Server 请求获取device token
  2. APNS向APP发送device token ,APP接受device token
  3. APP向程序的服务器端发送device token
  4. 程序服务器端发送Push通知到APNS
  5. APNS向APP发送Push通知

远程推送操作过程

  1. APP启动过程中,注册远程通知
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert| UIRemoteNotificationTypeSound];
  1. 若注册成功,回调方法
    -(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
    NSLog(@"%@", deviceToken);
    }
  1. App获取device token 后,将device token 发送到自己的服务端。
  2. APNS服务器得到JSON串后,向App发送通知消息,App调用回调方法
    -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
    NSLog(@"%@", userInfo);//从userInfo获得推送信息内容
}

客户端的开发

cer文件 provisioning文件的生成

下载生成的cer文件和provi文件,双击导入Xcode,在build setting中code signing一栏中选择这两个文件的名称,这样就可以将支持push的app部署到真机中。然后消息推送:

客户端对推送消息的处理分为两种情况
  1. 在App没有运行的情况下,系统受到推送消息,用户点击推送消息,启动App。此时,不会执行前面提到的didReceiveRemoteNotification方法,而是App的applicationDidFinishLaunching方法中进行推送处理,通过以下代码可以获取推送消息中数据:

    Dictionary *userInfo =[launchOptions objectForKey:UIApplicationLaunchOp tionsRemoteNotificationKey];

  2. 当App处于前台,系统受到推送消息,此时系统不会推送消息提示,会直接触发application:(UIApplication )application didReceiveRemoteNotification:(NSDictionary )userInfo方法,推送数据在userInfo中。 当App处于后台时,如果系统收到推送消息时,当用户点击推送消息时,会执行application: (UIApplication )application didReceiveRemoteNotification:(NSDictionary )userInfo方法,此时AppDelegate中方法的执行顺序为:applicationWillEnterForegroundapplicationWillEnterForegroundapplicationDidBecomeActive

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值