各个推送平台:

极光推送

小米推送

友盟推送

个推

信鸽

阿里推送

推送的逻辑处理:

一、收到推送消息有三种情况:

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(); // 系统要求执行这个方法 }

更多推荐