ios7远程推送以及静默推送

没有开启了Background Modes 里面的Remote notifications

  • 当App没有启动的时候,收到通知时,系统会弹出通知提示框, 如果用户点击通知,程序会自动启动,但是- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo函数并不会被调用,这个时候需要判断- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中的launchOptionsUIApplicationLaunchOptionsRemoteNotificationKey 来获取Apns信息,然后再做进一步的处理;
  • 如果App是在后台的话,收到通知时,系统会弹出通知提示框,如果用户点击通知,系统会把程序唤醒到前台,然后- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 会被调用;
  • 如果App是在前台运行的时候收到通知的话, 系统不会自动弹出通知提示框, 需要自己在- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo里面处理, 比如显示一个alertview或者发送 Local Notification;
注意

如果同时实现了- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo, 只有前者会被调用.



开启了Background Modes 里面的Remote notifications

  • 如果返回的apns payload 结构是silent notification的话, 不管App是在后台,还是在前台,(如果app在后台被kill掉了,一样不会调用) 系统都不会自动弹框,同时(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo方法会被调用, 如果App是在后台的suspend的话,会被唤醒到后台

  • 如果返回的apns payload结构是普通的,流程和上面没有开启 Background Modes是一致的(APP不会被唤醒);

静默通知 payload配置

  • 不能加alert,sound这些,;
  • content-avaliable : 1;
  • 可以添加自定义的key ,否则发静默通知也没有用;
  • aps { content-available: 1 yourkey: {...} }

你可能感兴趣的:(ios7远程推送以及静默推送)