沒有開啟了Background Modes 里面的Remote notifications
- 當App沒有啟動的時候,收到通知時,系統(tǒng)會彈出通知提示框, 如果用戶點擊通知,程序會自動啟動,但是
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo函數(shù)并不會被調(diào)用,這個時候需要判斷- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中的launchOptions的UIApplicationLaunchOptionsRemoteNotificationKey來獲取Apns信息,然后再做進一步的處理;
- 如果App是在后臺的話,收到通知時,系統(tǒng)會彈出通知提示框,如果用戶點擊通知,系統(tǒng)會把程序喚醒到前臺,然后
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo會被調(diào)用;
- 如果App是在前臺運行的時候收到通知的話, 系統(tǒng)不會自動彈出通知提示框, 需要自己在
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo里面處理, 比如顯示一個alertview或者發(fā)送Local Notification;
注意
如果同時實現(xiàn)了- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler 和 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo, 只有前者會被調(diào)用.
開啟了Background Modes 里面的Remote notifications
如果返回的apns payload 結(jié)構(gòu)是
silent notification的話, 不管App是在后臺,還是在前臺,(如果app在后臺被kill掉了,一樣不會調(diào)用) 系統(tǒng)都不會自動彈框,同時(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo方法會被調(diào)用, 如果App是在后臺的suspend的話,會被喚醒到后臺如果返回的apns payload結(jié)構(gòu)是普通的,流程和上面沒有開啟
Background Modes是一致的(APP不會被喚醒);
靜默通知 payload配置
- 不能加alert,sound這些,;
- content-avaliable : 1;
- 可以添加自定義的key ,否則發(fā)靜默通知也沒有用;
- aps { content-available: 1 yourkey: {...} }