通知发送,接收不到通知的处理办法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通知发送,接收不到通知的处理办法相关的知识,希望对你有一定的参考价值。

参考技术A

场景描述:
图中 我的订单 控制器下包含:两个控制器 个人订单 和 队员订单 。
点击按钮 个人订单 ,在 我的订单 发送通知,在 个人订单 里面收到通知,处理数据。
点击按钮 队员订单 ,在 我的订单 发送通知,在 队员订单 里面收到通知,处理数据。
我们在 我的订单 控制器切换的按钮点击事件里面发送通知

我们在两个控制器 个人订单 和 队员订单 里面接受通知

问题:
首次进这个 我的订单 ,然后切换到 队员订单 , 队员订单 里面没有收到通知,在 个人订单 可以收到。来回切换几次, 个人订单 和 队员订单 就都可以收到了。

通过 NSLog(@"Thread:%@",[NSThread currentThread]); 或 [NSOperationQueue currentQueue] 我们可以查到 push 时的线程和接收通知时的线程为主线程,输出: Thread:<NSThread: 0x170072d80>number = 1, name = main 。
接着再看一下苹果官方的说明:

百度翻译了一下:

定期通知中心在通知发布的线程上提供通知。分布式通知中心在主线程上提供通知。有时,您可能需要在由您决定的特定线程上传递通知,而不是通知中心。例如,如果运行在后台线程中的对象正在侦听来自用户界面的通知,如窗口关闭,则希望接收后台线程中的通知而不是主线程。在这些情况下,您必须捕获通知,因为它们在默认线程上传递,并将它们重定向到相应的线程。
如上,也就是,通知接收的线程是基于通知发送的线程。如果接收不到通知方发送的消息,很有可能是因为它们不在同一个线程上。因此,我们可以把通知的发送方放到和接收方同一个线程中。

解决:发送通知时做如下操作,解决了push时发送通知接收不到的情况。

控制台的输出:

最后,有一点要注意,添加通知接受者和移除通知接受者的操作是成对的。如下:

以上是关于通知发送,接收不到通知的处理办法的主要内容,如果未能解决你的问题,请参考以下文章

如何接收和处理 Chrome 通知/推送通知?

推送通知接收和处理

有没有办法在 MS 团队中发送活动提要通知?

对于Xamarin Android,我无法处理点击事件的后台通知

接收 PushKit VoIP 通知 iOS

仅接收来自 GCM 的最后一个后台静默推送通知