iOS 10和低版本下,前后台收到消息处理方案

由于iOS 9及以下版本,前台收到通知时无法显示在通知栏的。iOS 10 已经开放了前台展示通知栏的API。

首先我们来看看低版本的如何处理:
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo;
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler;

首先来比较这两个API的异同,虽然前者已经被苹果抛弃了,但是在低版本系统我们还是要适配的,最主要的区别是前者只能在应用跑在前台时才能收到,后者则前后台都可以收到,而且如果设置了后台模式为Remote Notifications的话,还可以执行30s来获取数据。

假如两者都在Appdelegate里面都实现的话,系统只会调用带completionHandler的后者。
为了前后台通知处理一致,我们实现后者,大致如下:

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
//如果是前台,使用第三方EBForeNotification定制通知栏界面,假如在后台或者未运行,则本来就有
if ([UIApplication sharedApplication].applicationState == UIApplicationStateActive) {
[EBForeNotification handleRemoteNotification:userInfo soundID:0 isIos10:NO];
}
completionHandler(UIBackgroundFetchResultNoData);
}

下面处理iOS 10的情况:
//new API 设置前台收到远程消息时是否显示
-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{

completionHandler(UNNotificationPresentationOptionAlert);

}

//用户点击通知栏,前后台处理方式一致,需要注意的是以前的低版本的API是收到通知就回调,iOS 10以后则是用户点击才回调
-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{
//do something
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知...
    莫离_焱阅读 6,543评论 1 8
  • 推送通知 注意:这里说的推送通知跟NSNotification有所区别 NSNotification是抽象的,不可...
    iOS开发攻城狮阅读 4,286评论 1 13
  • 引言:iOS开发,推送可以说是必须的,但是之前对于推送总是概念模糊,最近借公司项目需求,深入了解了一下。“对于知识...
    ibabyblue阅读 1,382评论 36 8
  • 许多集成的步骤个推官网都有了,这里只写关于推送的远程推送和本地通知的步骤和代码。APP在后台时:走苹果的APNS通...
    AllureJM阅读 2,743评论 1 9
  • 不同版本极光推送SDK集成各有差异,集成时一定要注意版本号,楼主已将博文更新成最新的SDK JPush v3.0....
    i顺颂时宜阅读 7,896评论 37 170