iOS 后臺金額播報(類似支付寶 收款金額播報)

由于現(xiàn)在二維碼支付越來越流行。越來越多的小伙伴參與到聚合支付的行業(yè)中。那在app的開發(fā)中,金額播報這個功能肯定是必要的一項了!

下面直接進入主題

金額播報的情形(主流app工具如“支付寶”“收錢吧”)

1、iOS 10以下的設備收到錢之后不管App是殺死還是進入后臺狀態(tài)都會播報”xxxx收款成功”一句固定的語音

2、iOS 10以上的設備,收到錢之后,不管APP是殺死還是壓入后臺狀態(tài),在收到轉賬的時候,會播報”xxx到賬 xxx 元”


實現(xiàn)以上功能注意的點:

iOS 10以上和iOS10以下設備,實現(xiàn)方式不一樣

1.iOS10以前的收款播報是在后臺或者app被殺死的時候,播放一個固定的聲音,可以借助遠程推送定制鈴聲的功能來實現(xiàn),只要在本地添加一段提前錄制好的語音,并且在推送內容的時候將sound字段,修改成語音的名稱即可。(ios 10 之前也可以有另類的方法做到,后臺金額播報,后面會有介紹)

2.iOS10以后,無論是app在后臺,或者沒有開啟,都可以進行具體的播報金額. 用到的是iOS 10的推送擴展( Notification Extension)


推薦的語音播報的兩種方式

1.科大訊飛的語音合成 ?(有兩個GG 兩個MM的聲音可以選) ? ? ? ? ? ? ? ? ? ? ? ?-> ? ? ?科大訊飛語音合成

2.系統(tǒng)語音合成? ? ? ? ?->?系統(tǒng)語音播報

#import <AVFoundation/AVFoundation.h>


AVSpeechUtterance * aVSpeechUtterance = [[AVSpeechUtterance alloc] initWithString:@"想說啥就說啥"];

aVSpeechUtterance.rate = AVSpeechUtteranceDefaultSpeechRate;?

aVSpeechUtterance.voice =[AVSpeechSynthesisVoice voiceWithLanguage:@"zh-CN"];?

[self.aVSpeechSynthesizer speakUtterance:aVSpeechUtterance];?



下面我們一步一步來完成這個功能的實現(xiàn)



iOS 10以上處理方法 Notification Extension ?


原理如下,想要深入研究的可以看看 ? ?NotificationServiceExtension


1.


生成以下的文件

點開的.m文件

#import "NotificationService.h"

#import@interface NotificationService ()

@property (nonatomic, strong) void (^contentHandler)(UNNotificationContent *contentToDeliver);

@property (nonatomic, strong) UNMutableNotificationContent *bestAttemptContent;

@property (nonatomic, strong) AVSpeechSynthesizer *aVSpeechSynthesizer;

@end

@implementation NotificationService


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

self.contentHandler = contentHandler;

self.bestAttemptContent = [request.content mutableCopy];

self.bestAttemptContent.title = [NSString stringWithFormat:@"%@",request.content.body];

self.bestAttemptContent.subtitle = @"";

self.bestAttemptContent.body = @"";

self.aVSpeechSynthesizer = [[AVSpeechSynthesizer alloc] init];

//request 可以獲取所有推送信息,里面可以取得播報內容

AVSpeechUtterance * aVSpeechUtterance = [[AVSpeechUtterance alloc] initWithString:@"這里放入播報的聲音文字就行了"];

aVSpeechUtterance.rate = AVSpeechUtteranceDefaultSpeechRate; ??

aVSpeechUtterance.voice =[AVSpeechSynthesisVoice voiceWithLanguage:@"zh-CN"]; ??

[self.aVSpeechSynthesizer speakUtterance:aVSpeechUtterance];

self.contentHandler(self.bestAttemptContent);

}


你以為這就結束了嗎???NO,NO,NO 下面很關鍵

1. 后端給你推送過來的json 必須添加 ? ? "mutable-content":1 ? ? (后臺一直引用不出來這個參數(shù)方法,請讓他升級推送!)

2.播放的語音時長最好不要超過30秒 ? (我也不信誰能播放30秒)

3.iOS10以下推送的sound 有值,想要iOS10 以上沒有推送聲音 可以設置 self.bestAttemptContent.sound = nil;

4.斷點調試的時候,跑正確的target





iOS10以上推送金額播報大致就是這樣的一個流程。本文章也只提供一個大致的思路和實現(xiàn)方法。具體的細節(jié)處理 可以自己去琢磨。比如支付寶的金額播報,他們的錢的單位和0 - 9 的數(shù)字都是固定語音,大概就是將推送獲取的金額,然后音頻拼接起來,有興趣的可以自己研究。




下面簡單說說iOS10以下的后臺金額播報

首先,未開啟app的話不可能詳細的金額播報啦!!

方式一 ,app進入后臺后 就進行無聲的音樂播放,每三分鐘撥一次,保證app一直后臺活躍,并且 ?

然后接到推送后,就可以播報

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler {

//回調

NSLog(@"Received remote notification with userInfo %@", userInfo);

completionHandler(UIBackgroundFetchResultNewData);

//語音播報

AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:@“userinfo有你要讀的東西”];

AVSpeechSynthesizer *synth = [[AVSpeechSynthesizer alloc] init];

[synth speakUtterance:utterance];

}


重點:

1."content-avilable" =1 ? 后端必須傳這個字段。 (靜默推送) ? ?

2.

勾選后,可能會被蘋果拒絕!你可以上傳一段你使用后臺播放的用途!這個通過率大概30% ,看運氣!


如果你有更好的建議,想法,或者疑問,歡迎留言!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,923評論 6 535
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,740評論 3 420
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,856評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,175評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,931評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,321評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,383評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,533評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 49,082評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,891評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,618評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,319評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,732評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,987評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,794評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,076評論 2 375

推薦閱讀更多精彩內容