iOS推送的那些事

2020-01-14 19:38:41于海丽

2、处理推送消息
1)、程序未启动,用户接收到消息。需要在AppDelegate中的didFinishLaunchingWithOptions得到消息内容


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  //...
  NSDictionary *payload = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
  if (payload) {
    //...
  }
  //...
}

2)、程序在前台运行,接收到消息不会有消息提示(提示框或横幅)。当程序运行在后台,接收到消息会有消息提示,点击消息后进入程序,AppDelegate的didReceiveRemoteNotification函数会被调用,消息做为此函数的参数传入


- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)payload {
  NSLog(@"remote notification: %@",[payload description]);
  NSString* alertStr = nil;    
  NSDictionary *apsInfo = [payload objectForKey:@"aps"];  
  NSObject *alert = [apsInfo objectForKey:@"alert"];  
  if ([alert isKindOfClass:[NSString class]])  
  {    
    alertStr = (NSString*)alert;  
  }  
  else if ([alert isKindOfClass:[NSDictionary class]])  
  {    
    NSDictionary* alertDict = (NSDictionary*)alert;    
    alertStr = [alertDict objectForKey:@"body"];  
  }    
  application.applicationIconBadgeNumber = [[apsInfo objectForKey:@"badge"] integerValue];    
  if ([application applicationState] == UIApplicationStateActive && alertStr != nil)  
  {
    UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"Pushed Message" message:alertStr delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alertView show];  
  }
}

3、义通知提示音
你可以在 App 的 Bundle 中加入一段自定义提示音文件。然后当通知到达时可以指定播放这个文件。必须为以下几种数据格式:

  • Linear PCM
  • MA4(IMA/ADPCM)
  • μLaw
  • aLaw

    你可以将它们打包为aiff、wav或caf文件。自定义的声音文件时间必须小于 30秒,如果超过了这个时间,将被系统声音代替。
    4、Payload
    Payload 是通知的一部分,每一条推送通知都包含一个 Payload。它包含了系统提醒用户通知到达的方式,还可以添加自定义的数据。即通知主要传递的数据为 Payload。