在iOS 10之前的系统,APP在后台或者APP被杀掉后,收到推送消息时会弹出通知提醒,如果APP是在前台运行的话,收到推送消息时是不会弹出通知的,这种情况下需要开发者自己处理弹框提醒的逻辑。
但在iOS 10之后的系统,APP处于前台时,收到推送消息也会弹出系统通知,这时如果开发者自己也写了弹框提醒,那么就会出现系统提醒和自定义提醒共存的问题,这可能不是我们想要的效果。那么如何去掉系统的提醒呢?我们先来看下iOS 10系统下收到推送消息时的代理方法(我这里集成的是极光推送):
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
// Required
NSDictionary * userInfo = notification.request.content.userInfo;
if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
[JPUSHService handleRemoteNotification:userInfo];
}
completionHandler(UNNotificationPresentationOptionAlert); // 需要执行这个方法,选择是否提醒用户,有 Badge、Sound、Alert 三种类型可以选择设置
}
其中关键就在于completionHandler()
这个方法,其参数有UNNotificationPresentationOptionAlert
、UNNotificationPresentationOptionSound
、UNNotificationPresentationOptionBadge
三种,经测试发现设置为第一个时只有通知弹出提醒,没有声音提醒;设置为第二个时只有声音提醒,没有通知弹出提醒;设置为第三个时没有任何效果。我们可以根据自己的需求来设置参数,如果你既要弹出提醒也要声音提醒,那么可以把3个值都加进去,也就是completionHandler(UNNotificationPresentationOptionBadge | UNNotificationPresentationOptionSound | UNNotificationPresentationOptionAlert);