没有开启了Background Modes 里面的Remote notifications
- 当App没有启动的时候,收到通知时,系统会弹出通知提示框, 如果用户点击通知,程序会自动启动,但是
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
函数并不会被调用,这个时候需要判断- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
中的launchOptions
的UIApplicationLaunchOptionsRemoteNotificationKey
来获取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: {...} }