iOS - 根據推送訊息進行語音播報

來源:互聯網
上載者:User

標籤: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 - 根據推送訊息進行語音播報

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.