美文网首页
消息推送和通知

消息推送和通知

作者: 一个栗 | 来源:发表于2020-12-30 22:53 被阅读0次

推送类型

  • 本地消息推送:不需要联网,不需要服务器,客户端应用直接发出推送消息,一般通过定时器在指定的时间进行消息推送。
  • 远程消息推送:客户端从苹果公司的APNS服务器注册获得当前用户的设备令牌并发送给应用的服务器,然后应用的服务器才可以通过APNS服务器间接的向客户端发送推送消息,可能会有延迟。
    具体流程:
  1. App客户端向APNS服务器发送设备的UDID和Bundle Identifier。
  2. APNS服务器对传过来的信息加密生成一个deviceToken并返回给客户端。
  3. 客户端将当前用户的deviceToken发送给自己服务器。
  4. 自己应用的服务器将得到的deviceToken保存,需要的时候利用deviceToken向APNS服务器发送消息。
  5. APNS服务器收到自己应用服务器的推送消息时,验证传来的deviceToken,如果一致,则将消息推送到客户端。

NSNotification是同步还是异步

NSNotification默认在主线程中通知是同步的,当通知产生时,通知中心会一直等待所有的观察者都收到并且处理通知结束,然后才会返回到发送通知的地方继续执行后面的代码,但是可以将通知的发送或者将通知的处理方法放到子线程中从而避免通知阻塞。其中,通知的发送可以添加到NSNotificationQueue异步通知缓冲队列中,也不会导致通知阻塞。

NSNotificationQueue是一个缓冲队列,通常以FIFO规则维护通知队列的发送。向通知队列添加通知有3种枚举类型: NSPostASAP、NSPostWhenIdle、NSPostNow,分别表示尽快发送、空闲发送、立刻发送。

下面验证默认通知是同步的:

#define MYNotificationName @"NSNotificationName"
    
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(process) name:MYNotificationName object:nil];
  
    NSLog(@"即将发送通知");
    [[NSNotificationCenter defaultCenter] postNotificationName:MYNotificationName object:nil];
     NSLog(@"发送通知的下一行代码");

- (void)process {
    sleep(3);
    NSLog(@"通知处理结束");
}

执行结果如下:

2020-12-30 22:39:56.713692+0800 test[8190:20526067] 即将发送通知
2020-12-30 22:39:59.715492+0800 test[8190:20526067] 通知处理结束
2020-12-30 22:39:59.715798+0800 test[8190:20526067] 发送通知的下一行代码

由此可见,通知是同步的。

将通知的发送语句放到子线程:

NSLog(@"即将发送通知");
dispatch_async(dispatch_get_global_queue(0, 0), ^{
    [[NSNotificationCenter defaultCenter] postNotificationName:MYNotificationName object:nil];
});
NSLog(@"发送通知的下一行代码");

或者

NSLog(@"即将发送通知");
// 将通知放到通知异步缓冲队列
NSNotification *notif = [NSNotification notificationWithName:MYNotificationName object:nil];
[[NSNotificationQueue defaultQueue] enqueueNotification:notif postingStyle:NSPostASAP];
NSLog(@"发送通知的下一行代码");

将通知的处理放到子线程:

- (void)process {
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        sleep(3);
        NSLog(@"通知处理结束");
    });
}

执行结果如下:

2020-12-30 22:50:22.491123+0800 test[8258:20532310] 即将发送通知
2020-12-30 22:50:22.491815+0800 test[8258:20532310] 发送通知的下一行代码
2020-12-30 22:50:25.495750+0800 test[8258:20532458] 通知处理结束

相关文章

  • 消息推送和通知

    推送类型 本地消息推送:不需要联网,不需要服务器,客户端应用直接发出推送消息,一般通过定时器在指定的时间进行消息推...

  • iOS-消息推送

    iOS 消息推送包括远程推送通知(Remote Notification)和本地推送通知(Local Notifi...

  • 消息通知推送

    我们在设计产品时会涉及到消息通知的功能,消息通知一般采用消息推送系统来进行处理。 消息通知的基本功能 点对点的消息...

  • iOS推送Tips

    清除通知栏所有通知 推送通知进入后台处理通知消息 1.后台推送消息设置,要再推送消息中加入键值对"content-...

  • iOS本地通知和远程推送

    iOS 本地通知和远程推送 推送通知的应用,可以推送最新的消息给用户,获得更多的关注。推送分为本地推送和远程推送两...

  • 推送通知的跳转处理和消息提醒

    推送通知的跳转处理和消息提醒   消息推送功能在App开发中经常用到,用于及时通知用户,推送用户订阅的相关的信息。...

  • Swift JPush极光推送通知和自定义消息

    在开始之前,首先了解下自定义消息和通知的几点区别。 自定义消息和通知的区别 收到推送自定义消息时推送通知栏不显示 ...

  • 第三方推送服务

    通知栏消息和透传消息 第三方推送服务(小米、华为和魅族)都支持两种类型的推送消息,分别是通知栏消息和透传消息,这两...

  • 推送通知

    基本介绍 iOS中分两种推送通知:本地推送 和 远程推送 推送通知的作用:就是可以让不在前台运行的app接收到消息...

  • 消息通知—站内信消息推送

    上一篇《消息通知推送》中总结了消息通知推送的几种方式,这次就来聊聊产品中站内信消息推送渠道的功能建设。 同样,站内...

网友评论

      本文标题:消息推送和通知

      本文链接:https://www.haomeiwen.com/subject/fpsqoktx.html