【知识总结】(2)远程推送

推送SDK:极光推送


后台点击推送: iOS 10 以下收到推送点击触发

方法已废弃 - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 

- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)userInfo
          fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

iOS 10 以上触发:

极光推送中使用到的方法

- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {

1,app接收推送

app状态:

a,app�前台状态(前台锁屏即后台状态)

收到推送消息,不会有消息提示的弹出,下面的方法接收到响应,进行相关的处理;在iOS 10 以后也会出现消息提醒的弹出,不会调用这个方法

//收到消息就可以触发,不需要点击操作
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

状态
application.applicationState == UIApplicationStateActive

b,app后台(包括锁屏)

//点击推送消息时触发
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

状态 // 不活跃
application.applicationState == UIApplicationStateInactive

c,app关闭 (包括关闭后锁屏)

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

状态 // 不活跃
application.applicationState == UIApplicationStateInactive

极光推送中通过下面方法判断app是正常打开还是通过点击推送打开

// 软件打开时调用方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions; 

// 查看字典是否存在,存在:推送点击进入   不存在:正常打开
// apn 内容获取:
NSDictionary *remoteNotification = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];

查看userInfo信息:

NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    [Utils alertTitle:@"application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler" message:[NSString stringWithFormat:@"%@ --- %ld", [userInfo mj_JSONString], application.applicationState] delegate:nil cancelBtn:@"确定" otherBtnName:nil];

app正常打开情况,userInfo为空;
点击推送消息进入,userInfo中携带推送消息,如图:

【知识总结】(2)远程推送_第1张图片
app关闭状态进入didFinish打印信息

仔细观察,可以看到app关闭点击推送消息进入,在 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler中的userInfo是相同的

因此,app关闭点击推送消息进入时的处理操作可以在这里进行处理


二,极光推送

极光推送中提供了的接收推送消息和点击消息响应的方法

1,接收消息

前台接收到消息

1,didFinishLoad方法中注册通知

- (void)registerJPushCustomMessage{
    NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
    [defaultCenter addObserver:self selector:@selector(networkDidReceiveMessage:) name:kJPFNetworkDidReceiveMessageNotification object:nil];
}

收到推送时调用方法

- (void)networkDidReceiveMessage:(NSNotification *)notification {
    
    NSDictionary * userInfo = [notification userInfo];
    [Utils alertTitle:@"networkDidReceiveMessage" message:[NSString stringWithFormat:@"%@", [userInfo mj_JSONString]] delegate:nil cancelBtn:@"确定" otherBtnName:nil];
}

2,iOS10中,如果前台收到推送消息,会调用这个方法

// iOS 10 Support
- (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];
    }
    
    // 进行相应的处理
    // coding...
    
    completionHandler(UNNotificationPresentationOptionAlert); // 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以选择设置
}
2,点击响应

iOS10:
后台和软件关闭状态点击收到的推送消息

// 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];
    }
    
    // 进行响应的处理
    //coding ...

    completionHandler();  // 系统要求执行这个方法
}

iOS10中,使用上面的两个方法处理,系统的方法是不起作用的

接收到推送的提示图片:

【知识总结】(2)远程推送_第2张图片
锁屏提示.png
【知识总结】(2)远程推送_第3张图片
导航栏提示.png
【知识总结】(2)远程推送_第4张图片
通知栏图片.png
【知识总结】(2)远程推送_第5张图片
app关闭点击推送消息进入.png

你可能感兴趣的:(【知识总结】(2)远程推送)