上一篇文章我們介紹了如何在iOS10上實(shí)現(xiàn)推送信息的語音播報(bào)俩莽。雖然在iOS10及以上能夠?qū)崿F(xiàn),但是在iOS10以下就無法播報(bào)了,同一需求下給用戶的感覺有點(diǎn)突兀岭洲,這里我們簡(jiǎn)單的優(yōu)化一下。在iOS 10及以上播報(bào)坎匿,在iOS 10以下實(shí)現(xiàn)播報(bào)固定的一段文字(如:"您有一筆收款到賬")盾剩。
如果您還不知道怎么實(shí)現(xiàn)iOS 10上的語音播報(bào),或者不明白請(qǐng)結(jié)合上一篇文章一起閱讀iOS10 實(shí)現(xiàn)支付寶收款播報(bào)這里附上優(yōu)化后的demo
思考
需求
1替蔬、iOS 10及以上實(shí)現(xiàn)推送消息的播報(bào)
2告私、iOS 10以下實(shí)現(xiàn)固定語音通知
搞清楚了需求之后我們就著手考慮該如何來實(shí)現(xiàn)了,首先iOS 10及以上實(shí)現(xiàn)推送消息的播報(bào)我們可以實(shí)現(xiàn)进栽,iOS 10以下實(shí)現(xiàn)固定語音通知也可以實(shí)現(xiàn)德挣。問題是如果我把送的消息改成自定義的之后,在iOS 10及以上系統(tǒng)會(huì)出現(xiàn)固定語音播報(bào)和推送消息播報(bào)重疊的情況快毛,這里我們?cè)撊绾翁幚恚?/p>
1格嗅、首先自定義推送鈴聲是我們將sound的這個(gè)字段改成的自定義的推送鈴聲名稱。
2唠帝、推送消息的播報(bào)是我們通過攔截推送在NotificationService通過代理方法處理- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler{}
而iOS 10以下是走不到NotificationService里面的
3屯掖、那么到這里我們的問題就基本解決了。我們可以在- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler{}
方法里處理襟衰,將sound在設(shè)置成default這樣就不會(huì)出現(xiàn)重疊播報(bào)了贴铜。
實(shí)現(xiàn)如下
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
self.contentHandler = contentHandler;
// copy發(fā)來的通知,開始做一些處理
self.bestAttemptContent = [request.content mutableCopy];
self.bestAttemptContent.sound = [UNNotificationSound defaultSound];
// Modify the notification content here...
// self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]", self.bestAttemptContent.title];
NSLog(@"userInfo----->%@",self.bestAttemptContent.userInfo);
NSData *jsonData = [self.bestAttemptContent.userInfo[@"payload"] dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *pushdic = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:nil];
if ([pushdic[@"Type"] isEqualToString:@"1"]) {
[self startSpeaking:pushdic[@"Content"]];
}
self.contentHandler(self.bestAttemptContent);
}
對(duì)于自定義推送的有幾點(diǎn)需要注意一下
1瀑晒、音頻文件格式是 aiff绍坝,wav,caf
2苔悦、音頻文件必須放到 app 的 mainBundle 目錄中
3轩褐、音頻文件的播放時(shí)間必須在 30s 內(nèi),否則將被系統(tǒng)默認(rèn)通知聲音替代玖详。
如果您在集成的過程中有遇到問題您可以留言或者私信我把介。文章若有表述不正確的地方還請(qǐng)各位大佬指出勤讽。