極光后臺推送響鈴

前言:

本教程不討論極光推送的集成低零,請自行百度如何集成極光推送
本教程適用于需要支持ios10以下的后臺推送響鈴
對于IOS以上的系統(tǒng)可以了解通知擴展(Notification Extension)郑象,一個非常強大的東西,本教程不介紹隆豹。
本教程的代碼全部都放在AppDelegate.m文件里面

需求:

根據(jù)推送過來的內(nèi)容,需要進行響鈴提醒操作爹耗。即對于重要的推送要通過響鈴要提醒用戶奔滑。

思路介紹:

1.APP在前臺,我們在接受通知的函數(shù)里面直接調(diào)用播放聲音即可
2.APP在后臺顺少,我們需要先支持后臺播放朋其,之后讓APP進入后臺之后執(zhí)行一個長期任務(wù),讓后臺處于活躍狀態(tài)脆炎,否則不會播放聲音和語音播報
3.對于后臺接受通知梅猿,會調(diào)用通知函數(shù),當(dāng)用戶點擊通知進入APP 會再調(diào)用一次通知函數(shù)秒裕,我們需要避免2次播放

步驟

1.配置Capabilities

image.png

image.png

2.支持后臺播放

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

    [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];
    [[AVAudioSession sharedInstance] setActive:YES error:nil];
    return YES;
}

3.后臺保存活躍

//為了讓后臺接受推送時響鈴 需要讓app處于活躍狀態(tài)
- (void)applicationDidEnterBackground:(UIApplication *)application {
    UIApplication* app = [UIApplication sharedApplication];
    __block    UIBackgroundTaskIdentifier bgTask;
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        dispatch_async(dispatch_get_main_queue(), ^{
            if (bgTask != UIBackgroundTaskInvalid)
            {
                bgTask = UIBackgroundTaskInvalid;
            }
        });
    }];
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        dispatch_async(dispatch_get_main_queue(), ^{
            if (bgTask != UIBackgroundTaskInvalid)
            {
                bgTask = UIBackgroundTaskInvalid;
            }
        });
    });
}

4.播放自定義的聲音

//對于用戶的定義的警告 要通過響鈴
- (void)alarmClockEventWithHandler:(void (^)())completionHandler {
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
    
    if(!self.player) {
        NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Thunder Song" ofType:@"m4r"];
        
        self.player = [[AVAudioPlayer alloc] initWithData:[NSData dataWithContentsOfFile:filePath] error:nil];
        
        self.player.numberOfLoops = -1;
        
        self.player.volume = 1.0;
    }
    
    [self.player stop];
    if([self.player prepareToPlay]) {
        [self.player play];
        completionHandler();
    }
}

5.推送處理函數(shù)

//收到推送信息  該API適用于IOS7以下的系統(tǒng)
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    [JPUSHService handleRemoteNotification:userInfo];
}
//收到推送信息 該API適用于IOS7以上的系統(tǒng)
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    [JPUSHService handleRemoteNotification:userInfo];
    
    [self.player stop];
    __weak typeof(self)weakSelf = self;
    UIWindow *alertWindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

    alertWindow.rootViewController = [[UIViewController alloc] init];

    alertWindow.windowLevel = UIWindowLevelAlert + 1;

    [alertWindow makeKeyAndVisible];
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示" message:[NSString stringWithFormat:@"%@",userInfo[@"msg_content"]] preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"朕知道了" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        [weakSelf.player stop];
    }];
    [alertController addAction:okAction];
    //程序當(dāng)前正處于前臺收到apns通知
    if (application.applicationState == UIApplicationStateActive) {
      //通過 userInfo[@"_j_msgid"]]來避免用戶點擊進入APP兩次響鈴問題
        if([currentMsgId isEqualToString:userInfo[@"_j_msgid"]]) {
            [self.player stop];
            //用戶點擊了通知進入前臺
            completionHandler(UIBackgroundFetchResultNewData);
        } else {
            //用戶在前臺沒點通知
            currentMsgId = userInfo[@"_j_msgid"];
            [alertWindow.rootViewController presentViewController:alertController animated:YES completion:nil];
            [self alarmClockEventWithHandler:^{
                completionHandler(UIBackgroundFetchResultNewData);
            }];
        }
    } else {
        //這個userInfo就是jpush推送來的消息內(nèi)容
        //后臺通知事件
        currentMsgId = userInfo[@"_j_msgid"];
        [self alarmClockEventWithHandler:^{
            completionHandler(UIBackgroundFetchResultNewData);
        }];
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末袱蚓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子几蜻,更是在濱河造成了極大的恐慌喇潘,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梭稚,死亡現(xiàn)場離奇詭異颖低,居然都是意外死亡,警方通過查閱死者的電腦和手機弧烤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門忱屑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人暇昂,你說我怎么就攤上這事莺戒。” “怎么了急波?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵从铲,是天一觀的道長。 經(jīng)常有香客問我澄暮,道長食店,這世上最難降的妖魔是什么渣淤? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮吉嫩,結(jié)果婚禮上价认,老公的妹妹穿的比我還像新娘。我一直安慰自己自娩,他們只是感情好用踩,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著忙迁,像睡著了一般脐彩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上姊扔,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天惠奸,我揣著相機與錄音,去河邊找鬼恰梢。 笑死佛南,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嵌言。 我是一名探鬼主播嗅回,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼摧茴!你這毒婦竟也來了绵载?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤苛白,失蹤者是張志新(化名)和其女友劉穎娃豹,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體购裙,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡培愁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了缓窜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片定续。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖禾锤,靈堂內(nèi)的尸體忽然破棺而出私股,到底是詐尸還是另有隱情,我是刑警寧澤恩掷,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布倡鲸,位于F島的核電站,受9級特大地震影響黄娘,放射性物質(zhì)發(fā)生泄漏峭状。R本人自食惡果不足惜克滴,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望优床。 院中可真熱鬧劝赔,春花似錦、人聲如沸胆敞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽移层。三九已至仍翰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間观话,已是汗流浹背予借。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留频蛔,地道東北人灵迫。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像帽驯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子书闸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容