博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 推送,当接到推送消息时如何处理?
阅读量:6995 次
发布时间:2019-06-27

本文共 2035 字,大约阅读时间需要 6 分钟。

接收到通知时有两种进入的方式:

1.当app未运行时
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;launchOptions不会为空,就可以根据launchOptions是否为空来判断是否有推送消息,当launchOptions不为空时,你就可以发一个通知,可以再rootViewController中接收通知执行响应的操作。
2.当app在后台运行时
激活APP时会走
-(void)applicationDidBecomeActive:(UIApplication *)application;这个方法,在这里面里可以对推送消息做响应的处理

 

我们可以设想一下消息通知的几种使用场景:   1,在app没有被启动的时候,接收到了消息通知。这时候会按照默认的方式来展现一个alert消息,在app icon上标记一个数字,甚至播放一段声音。   2,用户看到消息之后,点击了一下action按钮或者点击了应用图标   如果action按钮被点击了,系统会通过调用application:didFinishLaunchingWithOptions:这个代理方法来启动应用,并且会把notification的payload数据传递进去。   如果应用图标被点击了,系统也一样会调用application:didFinishLaunchingWithOptions:这个代理方法来启动应用,唯一不同的是这时候启动参数里面不会有任何notification的信息。   示例代码如下:   - ()application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions   {
  // do initializing works   ...      if (launchOptions) {
  // do something else   ...      [AVAnalytics trackAppOpenedWithLaunchOptions:launchOptions];   }      [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound];   return YES;   }   3,如果远程消息发送过来的时候,app正在运行,这时候会发生什么呢?   app代理的application:didReceiveRemoteNotification:方法会被调用,同时远程消息中的payload数据会作为参数传递进去。   示例代码如下:   - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
  if (application.applicationState == UIApplicationStateActive) {
  // 转换成一个本地通知,显示到通知栏,你也可以直接显示出一个alertView,只是那样稍显aggressive:)   UILocalNotification *localNotification = [[UILocalNotification alloc] init];   localNotification.userInfo = userInfo;   localNotification.soundName = UILocalNotificationDefaultSoundName;   localNotification.alertBody = [[userInfo objectForKey:@"aps"] objectForKey:@"alert"];   localNotification.fireDate = [NSDate date];   [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];   } else {
  [AVAnalytics trackAppOpenedWithRemoteNotificationPayload:userInfo];   }   }

转载地址:http://tnsvl.baihongyu.com/

你可能感兴趣的文章