推送通知本身是iOS系統(tǒng)的行為,所以在APP沒有運行(沒有再前臺也沒有再后臺)的時候,任然能夠推送或接受
收到推送的時候無法獲取到內(nèi)容,點擊通知之后能跳轉(zhuǎn)到APP中,可以獲取到推送中帶過來的擴展內(nèi)容
注冊推送服務(wù):
- (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary)launchOptions
{ //注冊推送
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
[JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert) categories:nil];
}
else {
[JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert) categories:nil];
}
}
在第一次出發(fā)這段代碼的時候,會有一個系統(tǒng)彈窗,詢問你是否允許該APP要給你推送消息
允許:系統(tǒng)打包APP+手機唯一標識+證書發(fā)送至APNs服務(wù)器注冊推送服務(wù)
注冊成功:
可以在此方法中獲取到deviceToken他是對(手機+APP)組合的唯一標識
-(void)application:(UIApplication *)applicationdidRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{ //獲取DeviceToken
[JPUSHService registerDeviceToken:deviceToken];此為極光方法
}
推送通知的提醒
前臺收到:
系統(tǒng)會將內(nèi)容傳到didReceiveRemoteNotification
后臺收到:
· 開啟了RemoteNotification,系統(tǒng)執(zhí)行didReceiveRemoteNotification:fetchCompletionHandler方法
· 展示橫幅、通知中心、聲音、角標
退出收到:
· 如果點擊推送橫幅、通知中心而啟動APP,執(zhí)行didFinishLaunchingWithOptions方法
· 展示橫幅、通知中心、聲音、角標
推送包含
本地通知:
APP指定推送時間,在該時間準時彈出推送通知
遠程通知:
1.普通推送
· 最常見的推送通知
· 包含聲音、橫幅、角標、自定義字段
· APP: 處于前臺,不展示橫幅,可通過didReceiveRemoteNotification(iOS7之前)或
didReceiveRemoteNotification:fetchCompletionHandler(iOS7之后)方法獲取內(nèi)容
· 處于后臺或退出,會展示橫幅,無法獲取通知內(nèi)容
· 點擊橫幅啟動,在didFinishLaunchingWithOptions方法獲取內(nèi)容
2.后臺推送
· 各種顯示效果如普通推送效果
· 必須攜帶"content-avaliable"=1;
· 必須攜帶alert,badge,sound中至少一個字段(后臺如果不給,前臺就沒有任何聲音)
· 必須在xcode工程中開啟notifications的功能
· APP
1.處于前臺或退出與普通推送效果一致
2.處于后臺,可通過didReceiveRemoteNotification:fetchCompletionHandler獲取通知內(nèi)容,獲取情況與普通推送不同的是,此時iOS系統(tǒng)允許開發(fā)者在APP處于后臺的情況下執(zhí)行代碼
3.靜默推送
· 沒有任何展示效果
· 必須攜帶"content-avaliable"=1;因此靜默必然是后臺的
· 不能攜帶alert、badge、sound任何字符
· 可攜帶自定義字段
· APP :效果與后臺推送效果一直
第三方推送
1.廣播 :
無差別的發(fā)給所有的用戶
2.別名(alias):
· 第三方提供的功能
· 每個手機只能設(shè)置一個別名alias
· 僅指定alias的用戶能收到推送,不再限制于手機
3.標簽(tag):
· 第三方提供
· 可以設(shè)置多個、可增加、清空
· 用于指定多樣的屬性,如"1000"+"daily"+"discount" 可用于標簽月消費超過1K,喜歡購買日用品、偏好折扣商品的用戶
· 如果要刪除,需要在上次設(shè)置的時候,講設(shè)置的tags保存至NSUserDefaults本次剔除不需要的tag之后,再重新設(shè)置
· 推送時可指定多個tag來統(tǒng)一發(fā)送內(nèi)容
4.Resgistration ID :
· 第三方提供
· 在講deviceToken提供給第三方之后,其服務(wù)器會自動生成的志向該手機的唯一id
· 可用于對核心用戶、期間用戶的精準推送
應(yīng)用內(nèi)消息
· 不需要證書
· 由第三方服務(wù)器下發(fā),而不是APNs
· 比通知快,不延遲,可用于IM消息的即時送達
· 能夠長時間保留離線消息,可獲取所有歷史消息內(nèi)容
· 能夠長連接技術(shù)下發(fā)消息 手機必須啟動并與第三方服務(wù)器建立連接
· 如果手機啟動立刻切換到后臺,很可能沒有建立連接
· 手機必須處于前臺才能接收消息
· 手機從后臺切回前臺,才會自動重新建立連接,并收到離線消息
· 沒有任何展示 只能自己實現(xiàn)UI效果
· 完全靜默情況下處理APP內(nèi)部邏輯
· AppStore審核必須關(guān)閉一些功能,上架后再通過后臺開啟
通知 與 消息對比
| 通知 | 消息 | |
|---|---|---|
| 送達時間 | 可能存在幾秒的延遲 | 無延遲 |
| 獲取時間 | 前臺或后臺 | 僅前臺 |
| 離線內(nèi)容 | 保留一段時間,無法查詢歷史內(nèi)容 | 始終保留,可查詢?nèi)繗v史內(nèi)容 |
| 系統(tǒng)展示 | 靜默或處于前臺不展示,后臺或退出展示角標、聲音、橫幅 | 不展示 |
QQ/微信聊天
同時下發(fā)一組通知 + 消息,如果用戶沒有啟動APP,雖然有延遲,但是必然能夠收到通知,在通知的提醒之后,用戶打開APP,此時收到離線消息,及時更新UI
參考:iOS 推送全解析,你不可不知的所有 Tips?。ㄍ暾妫?/p>