各个推送平台:
极光推送
小米推送
友盟推送
个推
信鸽
阿里推送
推送的逻辑处理:
一、收到推送消息有三种情况:
1、应用未启动(默认显示在通知栏,或者锁屏时显示在锁屏页面)
2、应用在后台挂起(默认显示在通知栏,或者锁屏时显示在锁屏页面)
3、应用在前台(默认不显示)
二、点击推送消息有两种情况:
1、应用未启动-->启动:
无论是点击推送消息打开应用还是点击icon打开应用都会调用以下方法
//只有重新打开APP和后台杀死后在打开APP才会走下面的方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
NSDictionary *userInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];
//如果userInfo 有内容说明是点击通知打开的应用,如果没有内容则是点击icon打开的应用
if (userInfo) { // 有推送的消息,处理推送的消息
_isLaunchedByNotification = YES;
} }
2、应用在后台 -> 应用在前台:
应用在后台挂起时点击推送消息和应用在前台时收到推送消息,都会调用以下方法:
ios7以上会调用下面这个方法
- (void)application:(UIApplication *)application didReceiveRemoteNotification :(NSDictionary *)userInfo fetchCompletionHandler: (void (^)(UIBackgroundFetchResult result))completionHandler{}
ios 10 会调用 下面的方法
// iOS 10 Support(极光) 处于前台的时候 消息推送过来的手机上弹出消息的 - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
// Required
AudioServicesPlaySystemSound(1007);
NSDictionary * userInfo = notification.request.content.userInfo; if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
[JPUSHService handleRemoteNotification:userInfo];
}
completionHandler(UNNotificationPresentationOptionAlert); // 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以选择设置 }
// iOS 10 Support(极光) 点击消息的时候才调用的方法
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
// Required
NSDictionary * userInfo = response.notification.request.content.userInfo;
if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
[JPUSHService handleRemoteNotification:userInfo];
}
completionHandler(); // 系统要求执行这个方法 }