為更好的處理遠程推送提供一種可能:SGPush
SGPush
為更好的處理遠程推送提供一種可能
介紹
SGPush 將處理遠程推送時所需的頭文件引用、邏輯代碼封裝到 SGPushHandler 的子類中,當點擊遠程推送消息打開應用或應用開啟狀態下接收到遠程推送消息時自動執行相應的處理邏輯。
結構
類 | 描述 |
---|---|
SGPush | 核心類,管理注冊的SGPushHandler 子類,接管系統接收到的遠程推送消息 |
SGPushHandler | 推送數據以及相應處理邏輯的封裝類,請根據具體業務需求創建不同的子類并在executeFromViewController: 方法中實現推送處理邏輯,該類本身不可直接使用。 |
UIViewController+SGPush | 提供canHandleRemotePush: 方法,不同的視圖控制器可根據需求選擇是否處理推送消息 |
使用
1. 創建 SGPushHandler 子類
每一個子類實現一種遠程推送類型的處理邏輯,在子類中重載 executeFromViewController:
方法實現推送處理邏輯。
這里我們假定實現了 MessagePushHandler
子類來處理用戶的消息提醒,DefaultPushHandler
子類來為所有其他類型的推送提供默認處理。
2. 將子類注冊到 SGPush 中
想要實現的子類發揮作用需要將它注冊到 SGPush 中并與接收到的推送字典 userInfo 中的特定字段和值做綁定。這樣當接收到的推送消息含有特定的字段或值時,SGPush 會調用執行相應的 SGPushHandler 子類處理邏輯。
在 application:didFinishLaunchingWithOptions:
方法中進行子類注冊:
[SGPush registerPushHandlerClass:[MessagePushHandler class] forKeyPath:@"aps.messageId"]; [SGPush registerPushHandlerClass:[DefaultPushHandler class] forKeyPath:@"aps"];
3. 接管系統接收到的遠程推送
在 application:didFinishLaunchingWithOptions:
中加入代碼:
[SGPush handleRemotePush:launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]];
在 application:didReceiveRemoteNotification:
中加入代碼:
[SGPush handleRemotePush:userInfo];
4. 測試
通過以上幾部,當服務器向設備發送的推送內容 {"aps":{"alert":"This is a test message.","messageId":100}}
時,SGPush 會創建 MessagePushHandler 對象并執行。若推送內容中沒有 messageId 字段時,SGPush 會創建 DefaultPushHandler 對象執行推送處理邏輯。
更多
通過 SGPush 還可以實現更多靈活的推送處理方式,請參考 Demo 中的注釋和 SGPush 源碼注釋。