Notification的用法

简介: Notification的用法

一、苹果中的通知



1、广播通知(NSNotificationCenter)

1)实现一个对象对多个对象的通信
  2)是抽象的,肉眼看不到的

2、推送通知

1)可以让不在前台运行的app,告知用户app内部发生了什么事情
  2)肉眼看看到的
  3)设置提示样式
     设置 ---- 通知中心  点击任意应用通知  提示样式
  4)推送通知有两种
     本地通知(Local Notification)
     远程通知(Remote Notification)

二、本地推送通知



1、概念

  • 不需要联网就能发出的推送通知(不需要服务器的支持)

2、使用场景

  • 常用来定时提醒用户完成一些任务,即使程序被杀死提示照样有,例如:记事本、备忘录等

3、如何发送出本地通知 (必须要有的5步)(其中5.1和5.2放到Appdelegate.m里面)

//1.通知对象
UILocalNotification *local = [[UILocalNotification alloc]init];
//2.通知的时间
local.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];
//3.通知的内容
local.alertBody = @"你吃饭了吗???";
//4.调度本地通知
[[UIApplication sharedApplication] scheduleLocalNotification:local];
//5.打开通知的设置权限
//5.1获取授权的内容
 UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeNone |
      UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
//5.2使用Applaction对象授权
[application registerUserNotificationSettings:setting];
  • 当然还有一些其他的通知属性如下:(选用上面本地通知的对象local)

//1.锁屏时的动作标题
    local.alertAction = @"来消息了";
//2.设置音效内容(要的是声音的字符串)
    local.soundName = @"布谷鸟.caf";
    //local.soundName = UILocalNotificationDefaultSoundName //系统默认的声音
//3.设置app图标文字
    local.applicationIconBadgeNumber = 99;
//4.还可以帮助设置App启动图片
    local.alertLaunchImage = @"图片的名字";
//5.设置通知的时候的附加信息
    local.userInfo = @{@"type":@"1",@"hello":@"word"};
//6 取消所有通知
    UIApplication *app = [UIApplication sharedApplication];
    [app cancelAllLocalNotifications];

三、监听本地通知点击(一条通知一个附加信息)



1、点击通知,应用程序进入前台或者在前台时调用,如果程序杀死(也就是移除APP),点击通知信息不执行

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{
 }

例如:

-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
 {
  //在这里还可以设置进入前台的状态(比如说刚开始的状态时:进入前台)
if (application.applicationState == UIApplicationStateInactive )
   {                          
       NSLog(@"我是从后台进来的");
   }
else
      {
         NSLog(@"我是从前台进入的");
      }
  }
  • 里面还可以嵌套一个if来判断userinfo通知附件信息里面的一些内容例如
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
 //在这里还可以设置进入前台的状态(比如说刚开始的状态时:进入前台)
if (application.applicationState == UIApplicationStateInactive ) {
  if ([notification.userInfo[@"type"] isEqualToString:@"1"]) {
      NSLog(@"跳转所需求的控制器");//type是我的userinfo的里面的信息
  }
 }
}
  • 2、如果程序被杀死后还想点击通知信息进入相应界面,需要在下面方法里做相应判断
  • (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    if(launchOptions){
    UILocalNotification *localNote = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
    }
    }

例如  (写到程序启动的方法里面)

//如果launchOptions是nil,就代表正常启动,如果不为空就代表点击通知的启动 
if (launchOptions) {
    //得到通知的对象
    UILocalNotification *local = launchOptions[UIApplicationLaunchOptionsAnnotationKey];
    if ([local.userInfo[@"type"] isEqualToString:@"1"] ) {
        NSLog(@"我是杀死之后进来的");
    }
}

3、在Appdelegate的didFinishLaunchingWithOptions:(NSDictionary *)launchOptions向window添加试图时,要重写window

  • 重写window只需要3步
1.创建窗口
self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
2.设置窗口根控制器
self.window.rootViewController = [[ViewController alloc]init];
3.显示窗口
[self.window makeKeyAndVisible];

四、远程通知



(一) 远程通知的概念


1.从远程服务器推送给客户端的通知(需要联网)

2.又称APNS(Apple Push Notification Services)

3.为什么需要远程推送通知


(1):传统获取数据的局限性


只要用户关闭了app,就无法跟服务器沟通,无法从服务器上获取新的数据内容


(2)远程推送通知可以解决以上问题:


不管用户打开还是关闭app,只要联网了,都能接到服务器推送的远程通知


(二)远程通知使用须知

所有苹果设备,在联网状态下,都会与苹果的服务器建立长链接
       1)链接
              1.长连接
              只要联网了,就一直建立链接,服务器给你主动发送信息,可以进行时间校正
              2.短链接
              发送请求并响应就会断开链接,我只求发送请求,服务器才能给我传数据,服务器无法主动给我们发送信息
        2)长连接作用
               时间校准
               系统升级
               查找iPhone
        3)长链接的好处
             数据传输速度快
             数据保持最新状态


(三)推送通知原理


image.png


image.png

1、发送设备的UDID和应用的Bundle Identifer给APNS服务器
      2、经苹果加密生成一个deviceToken,通过devieceToken能找到某个设备上的某个应用程序
      3、发送当前用户张三的deviceToken和用户的标志(比如id或qq)给QQ服务器
      4、QQ服务器将发送过来的内容存到数据库
      5、李四的手机给张三发信息--吃了么,实际是先发送到服务器
      6、去数据库查询张三的deviceToken
      7、将内容发送给苹果的APNS
      8、APNS通过deviceToken找到张三现在的设备,并发送相应信息

(四)、开发iOS程序的推送功能,iOS端需要做的事情


  • 1、向苹果请求获得deviceToken
  • 2、得到苹果返回的deviceToken
  • 3、发送deviceToken给公司的服务器
  • 4、监听用户对通知的点击

五、调试iOS远程推送功能,必备条件

  • 1、真机
  • 2、调试推送需要的证书文件,


1)aps_development.cer 
某台电脑就能调试app的推送服务
2)iPhone5_qq.mobileprovision
某台电脑就能利用某台设备调试某个程序
  • 3、发布具有推送服务的app


1)aps_production.cer
如果发布的程序中包含了推送服务,就必须安装这个证书
2)qq.mobileprovison
某台电脑就能发布某个程序






目录
相关文章
|
6月前
|
API Android开发
Android 监听Notification 被清除实例代码
Android 监听Notification 被清除实例代码
|
6月前
【亲测有效】Element UI 自定义 Notification 通知样式不生效,设置this.$notify样式不生效问题
【亲测有效】Element UI 自定义 Notification 通知样式不生效,设置this.$notify样式不生效问题
262 0
|
JavaScript
Notification.description(ant-design) 和 $notify.message(element-ui) 通知内容自定义
Notification.description(ant-design) 和 $notify.message(element-ui) 通知内容自定义
480 0
|
C# Windows 对象存储
WPF 路由事件 Event Routing
原文:WPF 路由事件 Event Routing 1.路由事件介绍 之前介绍了WPF的新的依赖属性系统,本篇将介绍更高级的路由事件,替换了之前的.net普通事件。
1306 0
|
Android开发 数据格式 XML
Android开发教程 - 使用Data Binding(八)使用自定义Interface
本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fragment中的使用 ...
1159 0
|
Java Android开发 数据格式
Android开发教程 - 使用Data Binding(三)在Activity中的使用
本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fragment中的使用 ...
1143 0
|
前端开发 C#
WPF ContextMenu 在MVVM模式中绑定 Command及使用CommandParameter传参
原文:WPF ContextMenu 在MVVM模式中绑定 Command及使用CommandParameter传参 ContextMenu无论定义在.cs或.xaml文件中,都不继承父级的DataContext,所以如果要绑定父级的DataContext,直接DataContext=“{Bind...
3475 0
UGUI中Event Trigger的基本用法
UGUI中Event Trigger的基本用法 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) C...
1264 0

热门文章

最新文章