zoukankan      html  css  js  c++  java
  • iOS 推送,当接到推送消息时如何处理?

    接收到通知时有两种进入的方式:
    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的信息。
      示例代码如下:

      - (BOOL)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];
      }
      }
  • 相关阅读:
    C语言函数名与函数指针详解
    在C语言中以编程的方式获取函数名
    Python 数据分析:Pandas 缺省值的判断
    手摸手教你如何在 Python 编码中做到小细节大优化
    如何在 Swoole 中优雅的实现 MySQL 连接池
    Python 数据分析:让你像写 Sql 语句一样,使用 Pandas 做数据分析
    Python 如何连接并操作 Aws 上 PB 级云数据仓库 Redshift
    Swoole 协程 MySQL 客户端与异步回调 MySQL 客户端的对比
    Protobuf 文件生成工具 Prototool 命令详解
    PHP 查看扩展信息的命令
  • 原文地址:https://www.cnblogs.com/fengmin/p/5458894.html
Copyright © 2011-2022 走看看