1.APP后臺(tái)掛起狀態(tài)
2.APP前臺(tái)運(yùn)行中
收到推送
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo fetchCompletionHandler:(void(^)(UIBackgroundFetchResultresult))completionHandlerNS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED;
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfoNS_AVAILABLE_IOS(3_0) __TVOS_PROHIBITED;
方法①是ios7新加入的方法叫编,并且如果實(shí)現(xiàn)了方法①那么方法②就被覆蓋掉不再執(zhí)行了.
方法①以有幾個(gè)特性:當(dāng)程序在前臺(tái)運(yùn)行時(shí)篷朵,收到遠(yuǎn)程推送虽风,會(huì)立刻調(diào)用此方法魂角,但是如果程序在后臺(tái)掛起粱甫,收到消息(未點(diǎn)擊推送消息時(shí))并不會(huì)執(zhí)行方法①拙已,如果想在收到消息的時(shí)候有需求需要執(zhí)行一些代碼冲粤,那么可以讓服務(wù)器發(fā)給APNS時(shí)在aps 字典中加入
aps ={
content-available = 1;
}
這個(gè)字段淫茵,那么當(dāng)應(yīng)用在后臺(tái)掛起時(shí)接收到推送消息時(shí)就會(huì)立即執(zhí)行方法①爪瓜,當(dāng)然,當(dāng)你再點(diǎn)擊推送消息時(shí)匙瘪,還會(huì)再執(zhí)行一次(這兩種情況可以根據(jù)applicationState這個(gè)屬性區(qū)分)铆铆,,而方法②只會(huì)在點(diǎn)擊推送消息蝶缀,或者應(yīng)用在前臺(tái)運(yùn)行時(shí)接收到消息時(shí)才會(huì)調(diào)用。
需要注意的是:方法②在后臺(tái)掛起的時(shí)候,點(diǎn)擊圖標(biāo)進(jìn)入不會(huì)再次執(zhí)行
3.APP被殺死狀態(tài)
1.點(diǎn)擊橫幅進(jìn)入2.點(diǎn)擊圖標(biāo)進(jìn)入:
-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions: (nullableNSDictionary*)launchOptionsNS_AVAILABLE_IOS(3_0);
都會(huì)這個(gè)方法來啟動(dòng)程序薄货,兩者區(qū)別在于點(diǎn)擊推送消息啟動(dòng)應(yīng)用會(huì)把推送的消息userInfo通過launchOptions參數(shù)傳遞過來
if(launchOptions) {
NSDictionary*dicUserInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
}
可以通過這個(gè)參數(shù)是否為空來判斷程序是否是點(diǎn)擊推送消息啟動(dòng)了應(yīng)用翁都。launchOptions有幾個(gè)key:
UIApplicationLaunchOptionsRemoteNotificationKey//返回一個(gè)遠(yuǎn)程推送的userInfo字典類型參數(shù);
UIApplicationLaunchOptionsLocalNotificationKey//返回一個(gè)UILocalNotification對象谅猾;
Demo地址:https://github.com/yuying2012/WJDStudyLibrary
這是一個(gè)大工程,請從工程中尋找相關(guān)模塊代碼.