你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS編程技術 >> iOS -- 處理推送消息

iOS -- 處理推送消息

編輯:IOS編程技術

簡介

很多應用都會實現推送功能,我們可以集成第三方框架實現推送功能,比如:

JPush推送:https://www.jpush.cn

個推:http://www.getui.com

下面來說說收到推送消息的邏輯處理

收到推送消息有三種情況:

1、應用未啟動(默認顯示在通知欄,或者鎖屏時顯示在鎖屏頁面)

2、應用在後台掛起(默認顯示在通知欄,或者鎖屏時顯示在鎖屏頁面)

3、應用在前台(默認不顯示)

點擊推送消息有兩種情況:

1、應用未啟動 -> 啟動

這個時候如論是點擊推送消息打開應用還是點擊icon打開應用都會調用以下方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

}

通過launchOptions判斷應用是點擊推送消息打開應用還是點擊icon打開應用,點擊推送消息啟動應用會把推送的消息userInfo通過launchOptions參數傳遞過來。

推送是遠程推送:

    if (launchOptions) {
        NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
        if (userInfo) {
            //接收到遠程推送進行相應的邏輯處理          
        } 
    }

推送是本地推送:

if (launchOptions) {
        UILocalNotification *notifi = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
        if (notifi) {
            //處理本地推送消息
        }
    }

2、應用在後台 -> 應用在前台

應用在後台掛起時點擊推送消息和應用在前台時收到推送消息,都會調用以下方法:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler{

}

應用在後台掛起時默認是不調用該方法的,如果你需要接收到推送消息還沒點擊推送就調用該方法,可以讓服務器發給APNS時在aps 字典中加入:

aps = {   content-available = 1; }
應用在前台運行時接收到推送消息默認沒有任何顯示,如果你想實現顯示在通知欄,可以轉化成本地通知:
if (application.applicationState == UIApplicationStateActive) {
        UILocalNotification *localNotification = [[UILocalNotification alloc] init];
        localNotification.userInfo = userInfo;
        localNotification.soundName = UILocalNotificationDefaultSoundName;
        localNotification.alertBody = [[userInfo objectForKey:@"aps"] objectForKey:@"alert"];
        localNotification.fireDate = [NSDate date];
        [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
    }

 

應用有三種狀態:未啟動、後台掛起、前台;我們可以通過以下方法獲取狀態:

NSInteger state = [UIApplication sharedApplication].applicationState;
    if (state == UIApplicationStateActive) {
        //應用在前台
    }
    else if(state == UIApplicationStateBackground){
        //應用在後台
    }
    else if(state == UIApplicationStateInactive){
        //應用從後台->前台
    }

PS:

最近負責公司項目的推送功能,要求根據推送消息中的“類型”參數判斷具體跳轉位置,項目中使用的是“個推”,下面來簡單說說個推。

個推中有個透傳消息模版,只要應用在前台就會收到所有發過來的透傳消息(不做任何顯示,顯示需要自己定義),即使關閉推送功能也會收到透傳消息;接受到該消息會調用以下方法:

- (void)GeTuiSdkDidReceivePayload:(NSString *)payloadId andTaskId:(NSString *)taskId andMessageId:(NSString *)aMsgId andOffLine:(BOOL)offLine fromApplication:(NSString *)appId {
    
    // [4]: 收到個推消息
    NSData *payload = [GeTuiSdk retrivePayloadById:payloadId];

    /**
     *匯報個推自定義事件
     *actionId:用戶自定義的actionid,int類型,取值90001-90999。
     *taskId:下發任務的任務ID。
     *msgId: 下發任務的消息ID。
     *返回值:BOOL,YES表示該命令已經提交,NO表示該命令未提交成功。注:該結果不代表服務器收到該條命令
     **/
    [GeTuiSdk sendFeedbackMessage:90001 taskId:taskId msgId:aMsgId];
}

 



代碼為OC
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved