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];
  }
  }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM