iOS开发--本地通知与远程通知

iOS开发--本地通知与远程通知

作者 雷潮 关注

2016.02.01 00:18* 字数 1921 阅读 8898评论 1喜欢 41

这里是指推送通知跟NSNotification有区别:

1、NSNotification是系统内部发出通知,一般用于内部事件的监听,或者状态的改变等等,是不可见的
2、本地通知与远程通知是可见的,主要用于告知用户或者发送一些App的内容更新,推送一些相关的消息,让用户知道App内部发生了什么事情。

Paste_Image.png

iOS常用通知

1、本地推送通知:(Local Notification)
2、远程推送通知:(Remote Notification)

iOS通知呈现效果(5)

1.设置音效,(提醒作用)
2.设置横幅,
3.设置弹窗,
4.锁屏下也可以呈现,
5.App图标的数字 (即新内容的数量)
至于显示横幅或者弹窗,取决于用户的设置
iOS手机设置中:通知中心-选择应用-选择应用下的通知模式-OK!

Paste_Image.png

通知的注意点

1、App在前台运行的时候,通知不会展示出来
2、点击通知,默认会自动打开推送通知的App
3、不管App是否打开,通知都可以如期发出

1、本地推送通知:

不需要联网就可以发出的通知
使用场景:
提醒用户完成一些任务,比如:定时提醒,生活备注,看电影等等

推送通知属性:

// 枚举值-发出通知的时间(有局限性)
@property(nonatomic) NSCalendarUnit repeatInterval;
// 自定义-发出通知的时间(可以自由设定时间)
@property(nonatomic,copy) NSCalendar *repeatCalendar;
// 区域-创建只需要创建一个中心点与半径就可以了
@property(nonatomic,copy) CLRegion *region
// 进入区域发出一个通知,设置yes,只会发出一个通知,设置NO就会每次进入这个区域都发送
@property(nonatomic,assign) BOOL regionTriggersOnce NO
// 设置通知的内容
@property(nonatomic,copy) NSString *alertBody;
 // 决定alertAction是否生效
@property(nonatomic) BOOL hasAction;
// 设置滑块的文字
@property(nonatomic,copy) NSString *alertAction;    

// 设置点击通知的启动图片(一般设置App启动图片后,这里可以随便写)
@property(nonatomic,copy) NSString *alertLaunchImage;
// 设置alertTitle,就是通知内容上面的文字
@property(nonatomic,copy) NSString *alertTitle
 // 设置弹出的声音
@property(nonatomic,copy) NSString *soundName;
 // 设置App的消息条数
@property(nonatomic) NSInteger applicationIconBadgeNumber;
 // 设置通知一些额外数据
 @property(nonatomic,copy) NSDictionary *userInfo;

如何发出本地通知:

 // 1.创建本地通知
    UILocalNotification *localNote = [[UILocalNotification alloc] init];

    // 2.设置本地通知的内容
    // 2.1.设置通知发出的时间
    localNote.fireDate = [NSDate dateWithTimeIntervalSinceNow:3.0];
    // 2.2.设置通知的内容
    localNote.alertBody = @"在干吗?";
    // 2.3.设置滑块的文字(锁屏状态下:滑动来“解锁”)
    localNote.alertAction = @"解锁";
    // 2.4.决定alertAction是否生效
    localNote.hasAction = NO;
    // 2.5.设置点击通知的启动图片
    localNote.alertLaunchImage = @"123Abc";
    // 2.6.设置alertTitle
    localNote.alertTitle = @"你有一条新通知";
    // 2.7.设置有通知时的音效
    localNote.soundName = @"buyao.wav";
    // 2.8.设置应用程序图标右上角的数字
    localNote.applicationIconBadgeNumber = 999;

    // 2.9.设置额外信息
    localNote.userInfo = @{@"type" : @1};

    // 3.调用通知
    [[UIApplication sharedApplication] scheduleLocalNotification:localNote];
}

使用注意:
iOS7,不需要用户授权就可发出通知,而iOS8以后,必须用户授权才可以发出通知

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

    // 设置应用程序的图标右上角的数字
    [application setApplicationIconBadgeNumber:0];

    if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
        [application registerUserNotificationSettings:settings];
    }

    // 界面的跳转(针对应用程序被杀死的状态下的跳转)
    // 杀死状态下的,界面跳转并不会执行下面的方法- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification,
    // 所以我们在写本地通知的时候,要在这个与下面方法中写,但要判断,是通过哪种类型通知来打开的
    if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {
        // 跳转代码
        UILabel *redView = [[UILabel alloc] init];
        redView.frame = CGRectMake(0, 0, 200, 300);
        redView.numberOfLines = 0;
        redView.font = [UIFont systemFontOfSize:12.0];
        redView.backgroundColor = [UIColor redColor];
        redView.text = [NSString stringWithFormat:@"%@", launchOptions];
        [self.window.rootViewController.view addSubview:redView];
    }

    return YES;
}

监听通知,如果用户打开通知,可以让用户进入一些特定的界面

/*
 应用程序在进入前台,或者在前台的时候都会执行该方法
 */
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    // 必须要监听--应用程序在后台的时候进行的跳转
    if (application.applicationState == UIApplicationStateInactive) {
        NSLog(@"进行界面的跳转");
      // 如果在上面的通知方法中设置了一些,可以在这里打印额外信息的内容,就做到监听,也就可以根据额外信息,做出相应的判断
        NSLog(@"%@", notification.userInfo);

//
        UIView *redView = [[UIView alloc] init];
        redView.frame = CGRectMake(0, 0, 100, 100);
        redView.backgroundColor = [UIColor redColor];
        [self.window.rootViewController.view addSubview:redView];
    }
}

2、远程推送通知:

从远程服务器推送给客户端的通知(需要联网)
远程推送服务---就是APNs
模拟器无法调试远程推送

为什么需要远程推送通知:

解决获取传统数据的局限性,让数据实时更新

使用场景:

聊天功能(一般非即时聊天)、推送一下App的内部新功能、版本下载等

注:所有的苹果设备,在联网状态下,都会与苹果的服务器建立-长连接

长连接的作用:
时间效准、系统升级、查找我的iphone、远程通知
好处:
数据传输快、数据保持最新状态

Paste_Image.png

Paste_Image.png

Paste_Image.png

我在面试中一般也比较喜欢问面试者这个问题。能解释清楚肯定就有货真价实的开发经验

使用远程推送

1、获取苹果获得deviceToken-获取手机UDID+应用的唯一标识(bundel ID)
2、得到苹果返回的deviceToken
3、发送deviceToken给公司的服务器
4、监听用户对通知的点击

如何调试远程推送功能

1、真机
2、调试推送需要的证书文件
证书自己配置。。。
3、发布具有推送服务的App
包含推送的cer证书+某个具有发布资格的电脑,就可以发布

如何推送
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) { //iOS8
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
        [application registerUserNotificationSettings:settings];
        [application registerForRemoteNotifications];
    } else { // iOS7
        [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeNewsstandContentAvailability | UIRemoteNotificationTypeSound |UIRemoteNotificationTypeAlert];
    }

// 根据远程通知通过UIApplicationLaunchOptionsRemoteNotificationKey打开的情况来进行
    if (launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]) {
        // 跳转
        // 添加一个红色的View
    }

    return YES;
}
// 获取DeviceToken
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    // 将DeviceToken传给服务器
    NSLog(@"%@", deviceToken.description);
}
// 正常接到远程通知的时候会调用这个方法
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    NSLog(@"%@", userInfo);
    // 正常打开推送后,
}
// 后台操作(根据收到推送,让程序自己执行一些操作,不管用户是否点击推送)
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    NSLog(@"---------");
    UIView *redV = [[UIView alloc] init];
    redView.backgroundColor = [UIColor redColor];
    redView.frame = CGRectMake(100, 100, 100, 100);
    [self.window.rootViewController.view addSubview:redV];

    // 1.打开后台模式 2.告诉系统是否有新内容的更新 3.发送的通知有固定的格式("content-available":"1")
    // 2.告诉系统有新内容
    completionHandler(UIBackgroundFetchResultNewData);
}
1、打开后台模式

Paste_Image.png

2、告诉系统有新内容

completionHandler(UIBackgroundFetchResultNewData);

3、发送通知有固定格式

("content-available":"1")

找的这张图:也有相应的模拟推送代码,需要的可以联系我

Paste_Image.png

一般开发中直接使用(jpush)激光推送就可以快速完成App的推送功能。具体按照官方文档来进行.(有空会写一篇专门针对激光推送的文稿)

iOS开发

时间: 2024-10-24 07:50:48

iOS开发--本地通知与远程通知的相关文章

ios开发——实用技术OC-Swift篇&本地通知与远程通知详解

本地通知与远程通知详解 一:本地通知 Local Notification的作用 Local Notification(本地通知) :是根据本机状态做出的通知行为,因此,凡是仅需依赖本机状态即可判断需要发出通知的行为都可以或者说应该使用Local Notification来处理.比方说:iBeacon中进入了某个Beacon region,或者说自定义的一些定时提醒等. 构建Local Notification 在iOS中,构建LocalNotification非常简单,只需要掌握好NSLoca

iOS开发---本地通知(UILocalNotification)

iOS开发---本地通知(UILocalNotification) 标签: ios本地通知 2016-07-12 10:28 1437人阅读 评论(0) 收藏 举报  分类: iOS(25)  版权声明:本文为博主原创文章,转载请注明出处. iOS中通知机制又叫消息机制,其包括两类:一类是本地通知:另一类是推送通知,也叫远程通知. 本地通知是由本地应用触发的,它是基于时间行为的一种通知形式,例如闹钟定时.待办事项提醒,又或者一个应用在一段时候后不使用通常会提示用户使用此应用等都是本地通知.创建一

iOS(本地通知与远程通知)

iOS 推送通知有两种:本地推送.远程推送. 本地推送 :  在不需要联网的情况下,由APP发出推送,常用于某一时刻的通知,如闹钟.本地通送有局限性在于当APP处于后台或者退出时就无法发出通知. 远程推送:   APNs和第三方推送,第三方推送最终也需要APNs转发, 本地推送实现 注册通知: float sysVer = [[UIDevice currentDevice].systemVersion floatValue]; if (sysVer < 10) { //设置通知类型 弹框.脚标.

IOS开发-本地通知

1 // 注册 发送通知的方法 2 -(void)pushNotfation{ 3 4 5 //--------------初始化本地通知 alloc init 虽然是UI控件 但继承NSObject 6 UILocalNotification *not = [[UILocalNotification alloc]init]; 7 // 设置本地通知启动的时间 8 not.fireDate = [NSDate dateWithTimeIntervalSinceNow:5]; 9 // 设置通知的

iOS开发本地通知

/* 本地通知:不通过网络,在本地实现的通知,自己发给自己 远程通知:必须通过网络,使用推送技术(APNs),实现通知 本地通知: 1.要完成可以接收的通知形式的注册 2.具体通知的设置 3.发送通知 */ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization

iOS开发——本地通知

本地通知是由本地应用触发的,它是基于时间行为的一种通知形式,例如闹钟定时.待办事项提醒,又或者一个应用在一段时候后不使用通常会提示用户使用此应用等都是本地通知.创建一个本地通知通常分为以下几个步骤: 创建UILocalNotification. 设置处理通知的时间fireDate. 配置通知的内容:通知主体.通知声音.图标数字等. 配置通知传递的自定义数据参数userInfo(这一步可选). 调用通知,可以使用scheduleLocalNotification:按计划调度一个通知,也可以使用pr

iOS开发资源:推送通知相关开源项目--PushSharp、APNS-PHP以及Pyapns等

PushSharp  (github) PushSharp是一个实现了由服务器端向移动客户端推送消息的开源C#库,支持 iOS (iPhone/iPad APNS). Android (C2DM/GCM - Google Cloud Message).Windows Phone.Windows 8.Blackberry (BIS and BES via PAP)以及Amazon (ADM)设备,未来还将支持Firefox OS. PushSharp的API可以流畅地位不同平台创建消息,自适应消

iOS开发 kvc kvo 委托代理 协议 通知 简述 和使用场景

kvc: 简单来说, 是存取类属性, 通过字符串来访问对象属性. 1.只针对类属性,设置键值对 2.设置setValue: forKey:,即forKey只能为类属性 3.取值valueForKey kvo: 通过kvc 的方式修改被观察者的属性时,主动通知观察者. 1.利用KVC对类属性进行设置 2.注册observing对象addObserver:forKeyPath:options:context: 3.观察者类必须重写方法 observeValueForKeyPath:ofObject:

swift 本地通知、远程通知

无论是远程推送.本地推送   都需要注册通知代码 iOS 8  把原先一步到位的  RemoteNotification  的注册分成两部分,一部分是注册新引入的那个「 UIUserNotificationSettings 」,另一部分是  RemoteNotifications . 事实上, Apple  在  iOS 8  将 RemoteNotification  和 LocalNotification  统一了起来 .两种  Notifications  将统一由  UIUserNoti