iOS學(xué)習(xí)筆記之遠(yuǎn)程推送、靜默推送與自定義消息推送
遠(yuǎn)程推送時(shí) , 應(yīng)用可能處于下列三種狀態(tài):
(1) . 應(yīng)用開(kāi)啟時(shí) , 應(yīng)用在前臺(tái)
(2) . 應(yīng)用開(kāi)啟時(shí) , 應(yīng)用在后臺(tái)
(3) . 應(yīng)用未啟動(dòng)(應(yīng)用被殺死)
從蘋(píng)果APNS服務(wù)器遠(yuǎn)程推送時(shí):
1 . 如果應(yīng)用處于 (1) 狀態(tài) , 則不會(huì)發(fā)出聲音 , 會(huì)直接調(diào)用appDelegate的代理方法didReceiveRemoteNotification,此時(shí)如果想收到類似系統(tǒng)的彈窗提示,則需要自定義彈窗,提示音,振動(dòng)(彈窗可以參考 : ForeNotification (本地下載))
AudioServicesPlaySystemSound(1007);//系統(tǒng)提示音 AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);//震動(dòng)
2 . 如果應(yīng)用處于 (2) 狀態(tài) , 則會(huì)發(fā)出提示音, 點(diǎn)擊推送消息 , 則會(huì)調(diào)用appDelegate的代理方法didReceiveRemoteNotification
3 . 如果應(yīng)用處于 (3) 狀態(tài),則會(huì)發(fā)出提示音 , 點(diǎn)擊推送消息 , 則會(huì)開(kāi)啟應(yīng)用 , 在下面這個(gè)方法中會(huì)帶上launchOptions這個(gè)參數(shù),如果實(shí)現(xiàn)了application:didReceiveRemoteNotification:fetchCompletionHandler:這個(gè)方法,則會(huì)調(diào)用這個(gè)方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSDictionary *remoteNotification = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];
if (remoteNotification) {
//自定義的BOOL值,用來(lái)標(biāo)記是從通知啟動(dòng)的應(yīng)用
self.isLaunchedByNotification = YES;
}else{
}
[self checkIsLaunchedByNotification];
return YES;
}
收到遠(yuǎn)程推送后 , 可以跳轉(zhuǎn)到消息界面 :
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
NSDictionary *aps = [userInfo valueForKey:@"aps"];
NSDictionary *alert = [aps valueForKey:@"alert"];
NSString * body = alert[@"body"];
if ([UIApplication sharedApplication].applicationState == UIApplicationStateActive) {
//處于前臺(tái)時(shí)
[EBForeNotification handleRemoteNotification:@{@"aps":@{@"alert":[NSString stringWithFormat:@"%@",body]}} soundID:1312];
}else{
//處于后臺(tái)時(shí)
[self gotoMessageVC];
}
}
#pragma mark - 檢測(cè)是否從通知欄啟動(dòng)得應(yīng)用
- (void)checkIsLaunchedByNotification{
if (self.isLaunchedByNotification) {
[self gotoMessageVC];
}
}
#pragma mark - 點(diǎn)擊了通知菜單(當(dāng)應(yīng)用在前臺(tái)時(shí),收到推送,點(diǎn)擊了自定義的彈窗,調(diào)用的方法)
- (void)clickBannerView:(NSNotification *)notification{
NSDictionary * dict = notification.object;
[self gotoMessageVC];
}
#pragma mark - 跳轉(zhuǎn)到消息界面(點(diǎn)擊通知菜單/點(diǎn)擊通知欄啟動(dòng)應(yīng)用時(shí))
- (void)gotoMessageVC{
if([self.window.rootViewController isEqual:self.tabBarController]){
if([self.tabBarController.selectedViewController isKindOfClass:[UINavigationController class]]){
UINavigationController * nav = self.tabBarController.selectedViewController;
if (![nav.topViewController isKindOfClass:[MessagesViewController class]]) {
MessagesViewController *messageVC = [[MessagesViewController alloc] init];
messageVC.hidesBottomBarWhenPushed = YES;
[nav.visibleViewController.navigationController pushViewController:messageVC animated:YES];
}
}
}
}
靜默推送
應(yīng)用想收到靜默推送需要滿足的條件:
1.應(yīng)用在前臺(tái)/后臺(tái) (應(yīng)用被殺死就收不到了)
2.應(yīng)用實(shí)現(xiàn)了
application:didReceiveRemoteNotification:fetchCompletionHandler:
3.如果僅僅實(shí)現(xiàn)了application:didReceiveRemoteNotification:,沒(méi)有實(shí)現(xiàn)application:didReceiveRemoteNotification:fetchCompletionHandler:,應(yīng)用只有在前臺(tái)時(shí)才能收到靜默推送 , 應(yīng)用在后臺(tái)時(shí),收不到靜默推送
自定義消息推送
介紹: 極光推送提供了自定義消息推送 , 這種推送只有當(dāng)應(yīng)用在 前臺(tái) 時(shí)才能收到 ; 當(dāng)應(yīng)用在 后臺(tái)/被殺死 時(shí),這時(shí)候的自定義消息被保存下來(lái),直到應(yīng)用處于前臺(tái)時(shí),應(yīng)用才會(huì)收到.
使用場(chǎng)景: 當(dāng)需要在前臺(tái)處理大量數(shù)據(jù)的時(shí)候,可以使用自定義消息,例如應(yīng)用某個(gè)模塊需要更新了,這時(shí)候后臺(tái)發(fā)送個(gè)自定義消息,等到應(yīng)用啟動(dòng)了就可以自動(dòng)去下載
// 使用自定義消息,需要在通知中心注冊(cè)
// 注冊(cè)通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveJPushCustomMessage:) name:kJPFNetworkDidReceiveMessageNotification object:nil];
// 接收到JPush的自定義消息推送
- (void)receiveJPushCustomMessage:(NSNotification *)notification {
NSDictionary *userInfo = [notification userInfo];
NSString *title = [userInfo valueForKey:@"title"];
NSString *content = [userInfo valueForKey:@"content"];
NSDictionary *extra = [userInfo valueForKey:@"extras"];
}
總結(jié):
1.應(yīng)用在后臺(tái)/前臺(tái)/被殺死,都可以收到普通的遠(yuǎn)程推送
2.應(yīng)用被殺死時(shí),可以通過(guò)Background Fetch短時(shí)間喚醒應(yīng)用
3.應(yīng)用在后臺(tái)/前臺(tái)時(shí),可以通過(guò)靜默推送,修改一些數(shù)據(jù)
4.自定義消息應(yīng)用在
好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
iOS對(duì)象指針和基礎(chǔ)數(shù)據(jù)類型的強(qiáng)轉(zhuǎn)詳解
最近在做一些小功能,忽然發(fā)現(xiàn)有的基礎(chǔ)數(shù)據(jù)轉(zhuǎn)換居然都忘記了。于是想著要趕緊整理下記下來(lái)!本文就是記錄的一些內(nèi)容,主要介紹了iOS中對(duì)象指針和基礎(chǔ)數(shù)據(jù)類型的強(qiáng)轉(zhuǎn),有需要的朋友們可以參考借鑒,下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2016-11-11
IOS 陀螺儀開(kāi)發(fā)(CoreMotion框架)實(shí)例詳解
這篇文章主要介紹了IOS 陀螺儀開(kāi)發(fā)實(shí)例詳解的相關(guān)資料,介紹了螺旋儀參數(shù)意義及CoreMotion框架,需要的朋友可以參考下2016-10-10
iOS適配https證書(shū)問(wèn)題(AFNetworking3.0為例)
本篇文章主要介紹了iOS適配https問(wèn)題(AFNetworking3.0為例)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02
iOS Objective-c實(shí)現(xiàn)左右滑動(dòng)切換頁(yè)面
這篇文章主要為大家詳細(xì)介紹了iOS Objective-c實(shí)現(xiàn)左右滑動(dòng)切換頁(yè)面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
iOS中TableView如何統(tǒng)一數(shù)據(jù)源代理詳解
這篇文章主要給大家介紹了關(guān)于iOS中TableView如何統(tǒng)一數(shù)據(jù)源代理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07
iOS組件化開(kāi)發(fā)實(shí)戰(zhàn)記錄
這篇文章主要給大家介紹了關(guān)于iOS組件化開(kāi)發(fā)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
iOS 請(qǐng)求權(quán)限封裝類的實(shí)例代碼
下面小編就為大家分享一篇iOS 請(qǐng)求權(quán)限封裝類的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01

