iOS消息推送

推送的注冊(cè):

 /**
  * 系統(tǒng)大于10.0注冊(cè)推送
  */
- (void)registerrNotificationFromiOS10UP:(UIApplication *)application
{
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    // 必須寫(xiě)代理窃诉,不然無(wú)法監(jiān)聽(tīng)通知的接收與點(diǎn)擊
    center.delegate = self;
    [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert | UNAuthorizationOptionBadge | UNAuthorizationOptionSound) completionHandler:^(BOOL granted, NSError * _Nullable error) {
        if (granted) {
            CCLog(@"用戶(hù)授權(quán)向APNs注冊(cè)饵史,獲取deviceToken");
            [application registerForRemoteNotifications];
        } else {
            CCLog(@"用戶(hù)拒絕推送消息,注冊(cè)通知失敗==%@",error);
        }
    }];
}

/**
  * iOS10以下iOS8以上注冊(cè)推送
  */
- (void)registRemoteForiOS8ToiOS10 {
    UIUserNotificationSettings *notiSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];
    [[UIApplication sharedApplication] registerUserNotificationSettings:notiSettings];
    [[UIApplication sharedApplication] registerForRemoteNotifications];
}

方法回調(diào)

//啟動(dòng)時(shí)聂薪,保存數(shù)據(jù)
 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{ 
  NSDictionary *launchDic = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];
if ([launchDic isKindOfClass:[NSDictionary class]]) {
    //保存遠(yuǎn)程推送信息
    [self saveReceiveRemoteNotificationInfo:launchDic];
}
}

iOS10及以上方法回調(diào)

//不點(diǎn)擊痹换,在前臺(tái)時(shí)調(diào)用的方法
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
   willPresentNotification:(UNNotification *)notification
     withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler
{
    //建議將根據(jù)Notification進(jìn)行處理的邏輯統(tǒng)一封裝,后期可在Extension中復(fù)用~
    [AppDelegate saveReceiveRemoteNotificationInfo:notification.request.content.userInfo];
    [[NSNotificationCenter defaultCenter] postNotificationName:kReceiveRemoteNotification object:nil]; //接收到遠(yuǎn)程推送的通知精置,更新消息的請(qǐng)求等
    completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert);
}

/**
 * (10.0系統(tǒng))用戶(hù)與通知進(jìn)行交互后的response计寇,比如說(shuō)用戶(hù)直接點(diǎn)開(kāi)通知或通知上的    按鈕來(lái),打開(kāi)App、用戶(hù)點(diǎn)擊通知的按鈕或者進(jìn)行輸入文本框的文本
 */
    - (void)userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
     withCompletionHandler:(void(^)())completionHandler
{
      //在此番宁,可判斷response的種類(lèi)和request的觸發(fā)器是什么蹲堂,可根據(jù)遠(yuǎn)程通知和本地通知分別處理,再根據(jù)action進(jìn)行后續(xù)回調(diào)
    NSDictionary *userInfo = response.notification.request.content.userInfo;
    //處理遠(yuǎn)程推送跳轉(zhuǎn)
    [AppDelegate dealWithRemoteNotificationInfo:userInfo];
}

iOS10以下:

//在前臺(tái)或者后臺(tái)點(diǎn)擊時(shí)執(zhí)行,通過(guò)判斷[UIApplication sharedApplication].applicationState
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
//處理遠(yuǎn)程推送跳轉(zhuǎn)
  if ([UIApplication sharedApplication].applicationState == UIApplicationStateInactive) {
//顯示自定義的推送界面贝淤,刷新消息
}
else {
//點(diǎn)擊事件,刷新消息,進(jìn)行消息處理
     [AppDelegate dealWithRemoteNotificationInfo:userInfo];
    }
}

推送的Extension

分為service和UI的擴(kuò)展柒竞,service允許進(jìn)行網(wǎng)絡(luò)請(qǐng)求,音視頻處理等播聪,不知道為什么會(huì)造成推送消息的延遲朽基。公司通過(guò)服務(wù)器推送很慢,大概有30s的延遲离陶,是因?yàn)樘幚硗扑托畔⑼瓿傻腷lock沒(méi)有回調(diào)造成的稼虎。
但是相同的訂單通知,iOS10以下的手機(jī)很快就收到暫時(shí)沒(méi)有發(fā)現(xiàn)問(wèn)題所在招刨。
消息格式,mutable-content必須設(shè)置為字符串"1"

{"aps":{"alert":"Testing.. ","badge":1,"sound":"","mutable-content":"1"},"customContent":{"這是要播報(bào)的內(nèi)容"}}
DEBUG通知的extension --推送通知打斷點(diǎn)

選中擴(kuò)展target霎俩,在頂部工具欄的debug標(biāo)簽下選擇attach to process 選擇擴(kuò)展的名字.只有在iOS10系統(tǒng)以上,"mutable-content"設(shè)置為1沉眶,并且發(fā)送過(guò)一次推送后打却,才能打斷點(diǎn)。擴(kuò)展代碼應(yīng)該是懶加載的谎倔,推送一次過(guò)后才能打斷點(diǎn)柳击。

不能在extension中修改sound的值,否則會(huì)跳過(guò)之后的代碼片习,直接播放音頻文件捌肴。

我們的需求是iOS10以下播放錄的wav音頻文件(之前的音頻文件,來(lái)不及錄制新的音頻藕咏,希望在iOS10上實(shí)現(xiàn)靈活的語(yǔ)音功能状知,故用文字轉(zhuǎn)語(yǔ)音),iOS10以上用文字轉(zhuǎn)語(yǔ)音孽查。本來(lái)打算在iOS10中的extension里判斷是音頻文件就把sound的值msg.wav替換為default饥悴,然后用文字轉(zhuǎn)語(yǔ)音播放要朗讀的內(nèi)容。但是理想很豐滿(mǎn)現(xiàn)實(shí)很骨感卦碾。在通過(guò)kvc設(shè)置userinfo铺坞,修改sound的值時(shí)起宽,語(yǔ)音直接播放了msg.wav音頻文件洲胖,并且extension里之后的代碼都不執(zhí)行,直接跳過(guò)了坯沪。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绿映,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌叉弦,老刑警劉巖丐一,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異淹冰,居然都是意外死亡库车,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)樱拴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)柠衍,“玉大人,你說(shuō)我怎么就攤上這事晶乔≌浞唬” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵正罢,是天一觀的道長(zhǎng)阵漏。 經(jīng)常有香客問(wèn)我,道長(zhǎng)翻具,這世上最難降的妖魔是什么履怯? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮裆泳,結(jié)果婚禮上虑乖,老公的妹妹穿的比我還像新娘。我一直安慰自己晾虑,他們只是感情好疹味,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著帜篇,像睡著了一般糙捺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上笙隙,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天洪灯,我揣著相機(jī)與錄音,去河邊找鬼竟痰。 笑死签钩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的坏快。 我是一名探鬼主播铅檩,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼莽鸿!你這毒婦竟也來(lái)了昧旨?” 一聲冷哼從身側(cè)響起拾给,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎兔沃,沒(méi)想到半個(gè)月后蒋得,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乒疏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年额衙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怕吴。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡入偷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出械哟,到底是詐尸還是另有隱情疏之,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布暇咆,位于F島的核電站锋爪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏爸业。R本人自食惡果不足惜其骄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扯旷。 院中可真熱鬧拯爽,春花似錦、人聲如沸钧忽。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)耸黑。三九已至桃煎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間大刊,已是汗流浹背为迈。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缺菌,地道東北人葫辐。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像伴郁,于是被迫代替她去往敵國(guó)和親耿战。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

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