Ios 推送擴(kuò)展Notification Service Extension 與簡單的語音合成

?最近公司的一個(gè)新項(xiàng)目要用到推送,然后語音播報(bào)推送里的內(nèi)容蓄愁。比如支付寶的推送功能“支付寶到賬100元”旁趟,這種的蹭越。

?目前做這個(gè)的方法第一個(gè)想到的就是Notification Service Extension了,Notification Service Extension是ios10推出的新功能弛槐,所以只能在ios10及其以上的手機(jī)上有用懊亡。

Notification Service Extension的作用就是在蘋果服務(wù)器在給手機(jī)推送消息的中間,進(jìn)入Notification Service Extension丐黄, 我們可以在進(jìn)Notification Service Extension時(shí)對(duì)推送的消息 進(jìn)行一次加工斋配,這就是Notification Service Extension的功能的作用。

推送流程

首先你要確定你已經(jīng)接好了推送灌闺,可以收到推送了艰争!

現(xiàn)在我們對(duì)Notification Service Extension進(jìn)行創(chuàng)建:


第一步


第二步

這里說的不準(zhǔn)確,Content Extension ?是用來自定義推送UI和一些附加功能的 桂对,這么說比較好理解甩卓。

第二步,有自定義需求的可以吧兩個(gè)都創(chuàng)建出來蕉斜,不需要的只用創(chuàng)建Notification Service Extension就可以了逾柿。

第三步缀棍,創(chuàng)建成功之后,就會(huì)在項(xiàng)目中出現(xiàn)新創(chuàng)建的文件夾机错,里面有兩個(gè)文件爬范,

創(chuàng)建成功

這里要多說一句,創(chuàng)建成功之后弱匪,我們的Notification Service Extension的 Bundle Identifier應(yīng)該是青瀑,原本的項(xiàng)目BundleIdentifier.XXX(Notification Service Extension的id),即原項(xiàng)目的Bundle Identifier.你的項(xiàng)目名萧诫,這是一個(gè)固定格式 不能出錯(cuò)斥难。

第四部,創(chuàng)建好后帘饶,.m文件中 有兩個(gè)方法哑诊,

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void(^)(UNNotificationContent *_Nonnull))contentHandler {}

- (void)serviceExtensionTimeWillExpire {}

我們?cè)诘谝粋€(gè)方法里對(duì)通知進(jìn)行處理,第二個(gè)方法是緊急方法及刻,即第一個(gè)方法處理不完的時(shí)候就在第二個(gè)方法緊急處理镀裤,這個(gè)方法我還不是很了解具體的作用。

大家可以用下面這段代碼測(cè)試一下提茁,這里改變了通知的大標(biāo)題淹禾,小標(biāo)題,和內(nèi)容:

- (void)didReceiveNotificationRequest:(UNNotificationRequest*)request withContentHandler:(void(^)(UNNotificationContent*_Nonnull))contentHandler {

? ? self.contentHandler= contentHandler;

? ? self.bestAttemptContent= [request.contentmutableCopy];


? ? // Modify the notification content here...

//? ? self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]", self.bestAttemptContent.title];

? ? // 重寫一些東西

? ? self.bestAttemptContent.title = @"我是大標(biāo)題";

? ? self.bestAttemptContent.subtitle = @"我是小標(biāo)題";

? ? self.bestAttemptContent.body =@"我是內(nèi)容";

}

接下來就是簡單的語音合成了茴扁,

#import <AVFoundation/AVFoundation.h>

@property?(nonatomic,?strong)AVSpeechSynthesizer *synthesizer;

- (void)didReceiveNotificationRequest:(UNNotificationRequest*)request withContentHandler:(void(^)(UNNotificationContent*_Nonnull))contentHandler {

? ? self.contentHandler= contentHandler;

? ? self.bestAttemptContent= [request.contentmutableCopy];


? ? // Modify the notification content here...

//? ? self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]", self.bestAttemptContent.title];

? ? // 重寫一些東西

? ? NSDictionary*dict =? self.bestAttemptContent.userInfo;

? ? NSDictionary*notiDict = dict[@"aps"];

? ? NSString*content = [notiDictvalueForKey:@"alert"];//這里取到我們通知的內(nèi)容铃岔,字段和后臺(tái)提前溝通好。

? ? NSString*voiceString =nil;

? ? voiceString = [NSStringstringWithFormat:@"%@", content];

? ? [selfsyntheticVoice:voiceString];

? ? self.contentHandler(self.bestAttemptContent);

}

- (void)syntheticVoice:(NSString*)string {

? ??//? 語音合成

? ? self.synthesizer = [[AVSpeechSynthesizer alloc] init];

? ? AVSpeechUtterance*speechUtterance = [AVSpeechUtterancespeechUtteranceWithString:string];

? ? //設(shè)置語言類別(不能被識(shí)別峭火,返回值為nil)

? ? speechUtterance.voice= [AVSpeechSynthesisVoicevoiceWithLanguage:@"zh-CN"];

? ? //設(shè)置語速快慢

? ? speechUtterance.rate=0.5;//0.5是一個(gè)

? ? //語音合成器會(huì)生成音頻

? ? [self.synthesizerspeakUtterance:speechUtterance];

}

這就是最簡單的語音合成通知內(nèi)容并播放了毁习。

最后就是運(yùn)行了:

運(yùn)行項(xiàng)目

后面就是你可能會(huì)用到的tip了:

1.


2.我用的極光作為例子,這里自己測(cè)試的時(shí)候的選項(xiàng)卖丸,注意:這里很關(guān)鍵纺且,一定要有"mutable-content": "1"這個(gè)字段,不然擴(kuò)展是攔截不到你的推送的稍浆, 這個(gè)字段也要和推送內(nèi)容字段在極光是Alert字段 在 同一級(jí)载碌。這個(gè)要給后臺(tái)說清楚不然攔截不到。


3.運(yùn)行推送擴(kuò)展你的斷點(diǎn)不會(huì)起作用衅枫。

4.在我連線測(cè)試的時(shí)候嫁艇,攔截到推送后就會(huì)崩潰,但是不連線測(cè)試就沒問題弦撩,這個(gè)我也沒找到原因步咪。

5.不論你的調(diào)試是release還是debug,只要是連線運(yùn)行上的項(xiàng)目都只能收到開發(fā)狀態(tài)下的推送益楼, ?想收到生產(chǎn)狀態(tài)下的推送 就需要到appstore猾漫,或者打測(cè)試包分發(fā)出來点晴。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市悯周,隨后出現(xiàn)的幾起案子粒督,更是在濱河造成了極大的恐慌,老刑警劉巖队橙,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坠陈,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡捐康,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門庸蔼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來解总,“玉大人,你說我怎么就攤上這事姐仅』ǚ悖” “怎么了?”我有些...
    開封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵掏膏,是天一觀的道長劳翰。 經(jīng)常有香客問我,道長馒疹,這世上最難降的妖魔是什么佳簸? 我笑而不...
    開封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮颖变,結(jié)果婚禮上生均,老公的妹妹穿的比我還像新娘。我一直安慰自己腥刹,他們只是感情好马胧,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著衔峰,像睡著了一般佩脊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上垫卤,一...
    開封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天威彰,我揣著相機(jī)與錄音,去河邊找鬼葫男。 笑死抱冷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的梢褐。 我是一名探鬼主播旺遮,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼赵讯,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了耿眉?” 一聲冷哼從身側(cè)響起边翼,我...
    開封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鸣剪,沒想到半個(gè)月后组底,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡筐骇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年债鸡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铛纬。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡厌均,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出告唆,到底是詐尸還是另有隱情棺弊,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布擒悬,位于F島的核電站模她,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏懂牧。R本人自食惡果不足惜侈净,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望归苍。 院中可真熱鬧用狱,春花似錦、人聲如沸拼弃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吻氧。三九已至溺忧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盯孙,已是汗流浹背鲁森。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留振惰,地道東北人歌溉。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親痛垛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子草慧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361