iOS推送應用邏輯場景

iOS推送應用邏輯場景

注意要點,
《推送接收情景》根據(jù)應用狀態(tài)分為,前臺,后臺,關(guān)閉應用,三種情況。

前臺:打開應用,并處于最前端使用狀態(tài)。
后臺,打開應用,并處于后端運行狀態(tài)。
關(guān)閉,完全關(guān)閉,殺死應用。

《推送通知類型》分為,靜默推送和普通推送。

靜默推送:
收到推送(沒有聲音,手機通知中心也不會顯示,程序處于前臺,后臺,關(guān)閉狀態(tài)下均不會顯示,不管程序處于前臺還是后臺,主要沒有完全關(guān)閉都可以觸發(fā),就能自動執(zhí)行。推送服務無法自行改變應用角標)

普通推送:
收到推送后(有聲音提示,程序處于前臺,后臺,關(guān)閉狀態(tài)下均會在手機的通知中心顯示推送的消息。
程序處于前臺狀態(tài)下,通知中心會自動提示。
通知中心已成功收到推送的消息,只能通過點擊通知中心消息,來獲取推送的數(shù)據(jù)進行處理。
如果通知中心已成功收到推送的消息,想通過點擊應用圖標,來獲取,推送的數(shù)據(jù),很抱歉無法做到。
如果非要實現(xiàn)這功能,需要,和后臺交互一起完成,提供一下思路。
后臺和推送的第三方比如信鴿,極光交互完成后。
后臺記錄,是否推送成功。
前端,通過點擊應用圖標時候,請求一次后臺,來獲取數(shù)據(jù)。然后獲取完成,作出相應操作。

《靜默推送》,獲取成功,不管前臺還是后臺都會觸發(fā)下面的代理方法一,方法二。

如果兩個方法同時實現(xiàn),只會觸發(fā)方法二。
方法一是iOS7之前,方法二是iOS7之后。
個人建議只實現(xiàn),方法一,來處理靜默推送。
理由,繼續(xù)往下看。

//方法一
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
NSLog(@"====方法一收到靜默推送的回調(diào)userinfo=%@", userInfo);

}
//方法二
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    NSLog(@"====方法二收到靜默推送的回調(diào)userinfo=%@", userInfo);
    }

《普通推送》分為前臺,后臺,關(guān)閉三個狀態(tài)。下面一一分析。

當應用處于《關(guān)閉狀態(tài)》下,點擊推送消息,同時觸發(fā)代理方法三,然后依次順序觸發(fā)方法二。
//方法三
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //成功獲取推送的數(shù)據(jù)
NSDictionary* remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if (launchOptions) {
/*
通過關(guān)閉程序下無法查看Xcode日記,可以通過改變,應用圖標,觀察應用變化邏輯
*/
       application.applicationIconBadgeNumber=66;
        NSLog(@"存在擊通知消息,并點擊了改消息進入應用=%@", remoteNotification);
}
else{

        NSLog(@"不存在擊通知消息,并點擊了應用圖標進入應用");;

}       

//方法二(與靜默推送中方法二,是同一個方法。所以,靜默推送時候,建議實現(xiàn)方法一就好。不然會沖突,處理就麻煩了)
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

/*
可以嘗試打開下面改變圖標對比,方法三和方法二執(zhí)行順序
*/
   // application.applicationIconBadgeNumber=77;
    NSLog(@"====方法二收到推送的回調(diào)userinfo=%@", userInfo);

    }
當應用處于《后臺狀態(tài)》下時,點擊推送消息
或從《前臺狀態(tài)》下,切換到通知中心,點擊推送消息
會觸發(fā)下面代理方法四
//方法四
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler {

NSDictionary *dic=response.notification.request.content.userInfo;
 NSLog(@"====[XGDemo]用戶點擊通知的回調(diào)成功=%@",dic);

    completionHandler();
}
當應用處于《前臺狀態(tài)》下時,推送消息過來,首先手機的通知中心會自動提示,并展示在程序的上方,此時程序會自動執(zhí)行下面代理方法五
//方法五
// App 在前臺彈通知需要調(diào)用這個接口
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {

    NSDictionary *dic=notification.request.content.userInfo;
    NSLog(@"APP前臺彈通知,提示時候會自動觸發(fā),不需要用戶再切換到后臺點擊通知或不需要用戶點擊彈出的dic =%@", dic);
    
    completionHandler(UNNotificationPresentationOptionBadge | UNNotificationPresentationOptionSound | UNNotificationPresentationOptionAlert);

}


聲明

本人在10.3.3系統(tǒng)下,使用的是信鴿推送服務測試。

如果文章幫到您,喜歡點個贊,謝謝您。
文章內(nèi)容出錯,記得留言,感激不盡。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容