標籤:code 註冊帳號 ndt 允許 工作方式 com 音頻 調用 color
目前市面上很多彙總支付APP都需要在收款成功後,進行語音提示,例如收錢吧,樂惠等!公司App融E收也同樣需要實現改功能,主要分為2個部分,一是推送,而是語音播報,下面簡單介紹一下
一 推送,目前整合的推送主要是極光推送,整合極光推動的流程比較簡單,主要流程是
1.註冊帳號,在極光推送官網上註冊帳號,地址:https://www.jiguang.cn/accounts/register/form
2.登入帳號,右上方點擊建立應用,填寫應用程式名稱,上傳應用icon,點擊建立
3.上傳推送認證,做APNS驗證
4.匯入極光推送SDK, pod ‘JPush‘
5.在AppDelegete裡面匯入
// 引入JPush功能所需標頭檔#import "JPUSHService.h"// iOS10註冊APNs所需標頭檔#import <UserNotifications/UserNotifications.h>
做完上面的工作基本已經可以在代碼中整合推送了
代碼:
//整合推送,註冊- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [JPUSHService registerForRemoteNotificationConfig:entity delegate:self]; [JPUSHService setupWithOption:launchOptions appKey:@"You appKey" channel:nil apsForProduction:YES]; //擷取registrationID [JPUSHService registrationIDCompletionHandler:^(int resCode, NSString *registrationID) { }];}#pragma mark - 推送代理方法//ios10以前調用 --- 前後台收到訊息- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {//接收到訊息}// iOS 10 --- 前台顯示推送- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {//接收到訊息}// iOS 10 --- 後台顯示推送- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {//接收到訊息}// 擷取裝置deviceToken- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{ [JPUSHService registerDeviceToken:deviceToken];}
??:當推送做完之後,需要在接收到推送訊息之後進行語音播報,這時需要後台(伺服器)在整合推送的時候增加一個欄位
欄位:"content-available" : 0
只有添加這個欄位,才能保證在APP在前台啟動並執行時候擷取到推送的內容.
二 語音播報
做完推送訊息之後,下面就是語音播報了,語音播報這裡會有一個坑,當APP退到後台運行或者鎖屏狀態下時,語音不會播報,但是會走播報的方法,這時我們需要在info.plist裡面進行一下使用權限設定.具體如:
或者:(比較方便,推薦使用)
這樣設定之後,就可以寫代碼了,主要有2種方法:1.整合第三方SDK(例如:訊飛科大的語音辨識);2iOS系統內建的系統方法
首先匯入AVFoundation架構
然後需要引入架構到項目中
#import<AVFoundation/AVSpeechSynthesis.h>
1.訊飛科大:
配置流程參考訊飛官網整合流程
網址:http://doc.xfyun.cn/msc_ios/302721
主要代碼:
NSString *initString = [[NSString alloc] initWithFormat:@"appid=%@", @"59671829"]; [IFlySpeechUtility createUtility:initString]; //擷取語音合成單例 _iFlySpeechSynthesizer = [IFlySpeechSynthesizer sharedInstance]; //設定協議委派物件 _iFlySpeechSynthesizer.delegate = self; //設定合成參數 //設定線上工作方式 [_iFlySpeechSynthesizer setParameter:[IFlySpeechConstant TYPE_CLOUD] forKey:[IFlySpeechConstant ENGINE_TYPE]]; //設定音量,取值範圍 0~100 [_iFlySpeechSynthesizer setParameter:@"99" forKey: [IFlySpeechConstant VOLUME]]; //發音人,預設為”xiaoyan”,可以設定的參數列表可參考“合成發音人列表” [_iFlySpeechSynthesizer setParameter:@"xiaoyan" forKey: [IFlySpeechConstant VOICE_NAME]]; //儲存合成檔案名稱,如不再需要,設定為nil或者為空白表示取消,預設目錄位於library/cache下 [_iFlySpeechSynthesizer setParameter:@" tts.pcm" forKey: [IFlySpeechConstant TTS_AUDIO_PATH]]; // 關閉日誌 [IFlySetting showLogcat:NO];
2.系統方法:
在這裡對象最好建立為全域的,便於我們控制;當然如果你不需要暫停、繼續播放等操作的話可以建立一個局部的。
{AVSpeechSynthesizer*av;}
初始化:
//初始化對象av= [[AVSpeechSynthesizer alloc]init];av.delegate=self;//掛上代理AVSpeechSynthesisVoice*voice = [AVSpeechSynthesisVoicevoiceWithLanguage:@"zh-CN"];//設定發音,這是中文普通話AVSpeechUtterance*utterance = [[AVSpeechUtterance alloc]initWithString:@"需要播報的文字"];//需要轉換的文字utterance.rate=0.6;// 設定語速,範圍0-1,注意0最慢,1最快;utterance.voice= voice;[avspeakUtterance:utterance];//開始
最後當在後台或鎖屏狀態下播報:
在AppDelegate的.m檔案裡面實現下面的方法:
//實現一下backgroundPlayerID:這個方法:+(UIBackgroundTaskIdentifier)backgroundPlayerID:(UIBackgroundTaskIdentifier)backTaskId{ //設定並啟用音頻會話類別 AVAudioSession *session=[AVAudioSession sharedInstance]; [session setCategory:AVAudioSessionCategoryPlayback error:nil]; [session setActive:YES error:nil]; //允許應用程式接收遠端控制 [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; //設定背景工作ID UIBackgroundTaskIdentifier newTaskId=UIBackgroundTaskInvalid; newTaskId=[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil]; if(newTaskId!=UIBackgroundTaskInvalid&&backTaskId!=UIBackgroundTaskInvalid) { [[UIApplication sharedApplication] endBackgroundTask:backTaskId]; } return newTaskId;}
到這裡就已經可以根據推送訊息進行語音播報了,但是蘋果審核的時候又一個坑,誰讓蘋果是爸爸呢!好吧,那就是我們在info.plist裡面添加了下面的許可權:
想要通過蘋果審核,就需要錄製一個視屏給蘋果審核人員,錄製的適配最好上傳到YouTube上面(我現在使用的),國外的網站,需要FQ;也可以上傳到優酷,但是我沒有傳過,這樣審核就可以通過了.
如果有更好的方法請多多指教,或有疑問請聯絡我. QQ:1475074574
iOS - 根據推送訊息進行語音播報