iOS 收款推送訊息語音播報
近期產品大大突然提出一個蛋疼的需求,並表示這是“客戶和市場強制要求”做的。。。沒辦法,只能硬著頭皮上了。
之前採用的是靜默推送+普通推送,而且網上大部分資料也預設使用的是靜默推送方式。據我所知,該方案有一定的缺陷:1、部分機器收不到語音播報;2、若需要在後臺或鎖屏狀態下播報語音時,上架會遇到"Audio,AirPlay,and Picture in Picture"和"Background fetch"等問題稽核被拒。通過查閱網上的資料,我改用iOS 10新的API推送擴充套件(UNNotificationServiceExtension),三方SDK使用極光,關於整合方式就不多說了,詳見極光官方文件。
這種方案的特點是:節省大量程式碼,上架簡單,伺服器只需要推一條訊息,但iOS 10以上"mutable-content = 1"必傳,否則程式不走這個擴充套件的Target。
實現原理
-
iOS 10以上採用推送擴充套件(極光必傳mutable-content,iOS 10以下不需要)處理,使用iOS原生API AVSpeechSynthesizer實現文字合成語音。
iOS10以下采用固定音訊檔案播放,比如“你有一筆收款”。
相關程式碼
- iOS 10以下:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
[JPUSHService handleRemoteNotification:userInfo];
completionHandler(UIBackgroundFetchResultNewData);
// iOS 10之前前臺沒有通知欄
if ([UIDevice currentDevice].systemVersion.floatValue < 10.0 && [UIApplication sharedApplication].applicationState == UIApplicationStateActive) {
// iOS 10以下 極光前臺不展示訊息欄,此處為自定義內容
[EBBannerView showWithContent:@"交易結果通知"];
// 獲取共享域的偏好設定(可百度“多target資料共享”)
NSUserDefaults *userDefault = [[NSUserDefaults alloc] initWithSuiteName:@"group.xxx"];
BOOL canSound = [userDefault boolForKey:@"voice"];
if (canSound) {
// 播放refund.wav或collection.wav固定音訊檔案
if ([refund condition]) {
[self playMusic:@"refund" type:@"wav"];
} else {
[self playMusic:@"collection" type:@"wav"];
}
}
}
}
// 播放音訊檔案
- (void)playMusic:(NSString *)name type:(NSString *)type {
//得到音效檔案的地址
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:name ofType:type];
//將地址字串轉換成url
NSURL *soundURL = [NSURL fileURLWithPath:soundFilePath];
//生成系統音效id
AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundURL, &_soundFileObject);
//播放系統音效
AudioServicesPlaySystemSound(_soundFileObject);
}
- iOS 10及以上:
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
self.contentHandler = contentHandler;
self.bestAttemptContent = [request.content mutableCopy];
// iOS 10在有語音播報的情況下 可遮蔽系統提示音,也可根據需求來
self.bestAttemptContent.sound = nil;
// Modify the notification content here...
// 獲取共享域的偏好設定
NSUserDefaults *userDefault = [[NSUserDefaults alloc] initWithSuiteName:@"group. xxx"];
// 解析推送自定義引數userInfo
NSDictionary *userInfo = [self dictionaryWithUserInfo:self.bestAttemptContent.userInfo];
BOOL canSound = [userDefault boolForKey:@"voice"];
NSString *voiceString = nil;
if (canSound) {
if ([refund condition]) {
voiceString = [NSString stringWithFormat:@"退款%@元!", userInfo[@"money"]];
} else {
voiceString = [NSString stringWithFormat:@"收款%@元!", userInfo[@"money"]];
}
}
// 語音合成
[self syntheticVoice:voiceString];
self.contentHandler(self.bestAttemptContent);
}
- (void)syntheticVoice:(NSString *)string {
// 語音合成
self.synthesizer = [[AVSpeechSynthesizer alloc] init];
AVSpeechUtterance *speechUtterance = [AVSpeechUtterance speechUtteranceWithString:string];
//設定語言類別(不能被識別,返回值為nil)
speechUtterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"zh-CN"];
//設定語速快慢
speechUtterance.rate = 0.55;
//語音合成器會生成音訊
[self.synthesizer speakUtterance:speechUtterance];
}
相關文章
- android收款語音播報+個推遠端通知、透傳推送Android
- IOS 訊息推送處理iOS
- Android實現收款成功金額的語音播報功能(Nice tone)Android
- 訊息語音播報,微信語音自動播放,有點兒意思,可以看看這個應用
- StompJS+SpeechSynthesis實現前端訊息實時語音播報JS前端
- iOS開發訊息推送原理iOS
- IOS 推送訊息 php做推送服務端iOSPHP服務端
- iOS 訊息推送原理及實現DemoiOS
- 微信iOS收款到賬語音提醒開發總結iOS
- android 使用 SoundPool 語音播報Android
- Xamarin Essentials教程語音播報TextToSpeech
- iOS 10 訊息推送(UserNotifications)祕籍總結(一)iOS
- iOS 10 訊息推送(UserNotifications)祕籍總結(二)iOS
- iOS使用觀察者模式實現推送訊息模組化iOS模式
- iOS APNS推送遠端訊息 java後臺實現iOSJava
- win10關閉語音播報如何操作 win10電腦自動語音播報怎麼關Win10
- iOS 模仿支付寶支付到賬推送,播報錢數iOS
- workerman 實現訊息推送
- iOS 點選推送訊息跳轉指定介面 —總結篇iOS
- react頁面引導元件, 支援語音播報React元件
- Android 訊息推送:第三方訊息推送平臺 詳細解析Android
- iOS:利用訊息轉發機制實現多播委託iOS
- uni-app訊息推送方案APP
- 訊息推送背後的思考
- Android之訊息推送原理Android
- mqtt訊息推送(vue前端篇)MQQTVue前端
- 玩轉釘釘訊息推送!
- Flutter websocket 實現訊息推送FlutterWeb
- 微信開發推送訊息案例
- 使用redis進行訊息推送Redis
- 訊息推送系統架構架構
- 實時訊息推送方案-SSE
- 小程式訊息推送訂閱
- Python爬取天氣資訊並語音播報Python
- iOS 10 來點不一樣的推送 (2) - 語音提示iOS
- iOS後臺喚醒實戰:微信收款到賬語音提醒技術總結iOS
- APP訊息推送 極光推送 示例程式碼APP
- Android播放聊天語音訊息幀動畫問題Android音訊動畫