远程消息推送:2-获取推送消息内容
在远程推送消息中,可以携带一些信息。当用户点击推送消息进入App后,我们可以获取到推送消息中携带的内容,从而可以根据不同的消息内容做一些后续的操作。
获取推送消息中携带的内容,都需要在AppDelegate中添加相关的代码,但不同的iOS版本,使用的方法有一定的差别,我们分别做介绍,以使用极光推送为例。
iOS10
在iOS10中,引入了UserNotifications Framework框架,在该框架中,提供了userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:方法,当用户通过推送消息打开App时会调用该方法,在该方法中可以获取推送消息的内容。
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler;
在该方法中,通过参数response可以获得推送消息的内容,示例代码如下所示:
NSDictionary * userInfo = response.notification.request.content.userInfo;
NSLog(@"%@",userInfo);
在极光推送SDK中,也对该方法进行了封装,封装在JPUSHRegisterDelegate协议中,所以,我们也可以直接调用极光推送封装的方法,如下所示:
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
NSLog(@"%s",__func__);
// Required
NSDictionary * userInfo = response.notification.request.content.userInfo;
NSLog(@"%@",userInfo);
if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
[JPUSHService handleRemoteNotification:userInfo];
}
completionHandler(); // 系统要求执行这个方法
}
运行结果如下:
iOS7及以上版本
在iOS7~iOS9版本中,我们也可以使用如下的方法来获取userInfo。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler;
iOS6及以下版本
在iOS6及以下版本中,如果App状态为正在前台或者点击通知栏的通知消息,那么如下函数将被调用,并且可通过AppDelegate的applicationState是否为UIApplicationStateActive判断程序是否在前台运行。此种情况在此函数中处理:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo;
在didFinishLaunchingWithOptions:方法中获取
在AppDelegate.m中的didFinishLaunchingWithOptions:方法中,我们也可以获取到推送消息内容。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(nullable NSDictionary *)launchOptions;
如果App状态为未运行,此方法将被调用,如果参数launchOptions中包含UIApplicationLaunchOptionsRemoteNotificationKey表示用户点击推送消息通知导致app被启动运行;如果不含有对应键值则表示 App 不是因点击推送消息通知而被启动,可能为直接点击icon被启动或其他。
NSDictionary *remoteNotification = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];
最后编辑时间为: September 22nd , 2017 at 01:16 am
本文由 99ios 创作,转载请注明出处