一、背景 公司正在研發的一款App,需要在進行消息推送時支持語音播報。 具體要求: 離線:App在用戶未打開時,可收到消息推送 鎖屏:用戶在設備鎖屏狀態下,仍可收到消息推送 語音播報:收到消息推送時可同時進行語音播放 蘋果的APNs消息推送, 支持在應用未打開及設備鎖屏狀態下收到推送。 而同時進行語 ...
一、背景
公司正在研發的一款App,需要在進行消息推送時支持語音播報。 具體要求:
- 離線:App在用戶未打開時,可收到消息推送
- 鎖屏:用戶在設備鎖屏狀態下,仍可收到消息推送
- 語音播報:收到消息推送時可同時進行語音播放
蘋果的APNs消息推送, 支持在應用未打開及設備鎖屏狀態下收到推送。 而同時進行語音播報,則需要做一些特殊處理。 目前語音播報的場景有兩種: 一種是固定音頻的播放, 一種是需要動態合成後的音頻播放。如支付寶或微信收款的消息提醒: “支付寶/微信成功收款100元” 。 基於以上兩種場景,接下來會逐一分析。在分析之前,需要先對APNs做一個簡單的瞭解。
二、認識APNs
APNs(英文全稱:Apple Push Notification service),中文翻譯為:蘋果推送
通知
服務。
通知是由兩個主要部分組成的數據:設備令牌deviceToken
和 payload
消息。
- 設備令牌
deviceToken
: 是類似於一個電話號碼。它包含的信息,使的APN定位到設備上安裝的客戶端應用程式。APN還用它來驗證通知的路由。 payload
消息:是一個JSON
定義的屬性列表中指定的設備上的應用程式的用戶將被提醒。
2.1 工作步驟
- 首先,APNs會對用戶進行
物理連接認證
,和設備令牌認證
(簡言之就是蘋果的伺服器檢查設備里的證書以確定其為蘋果設備); - 然後,將伺服器的信息接收並且保存在APNs當中,APNs從其中註冊的列表中查找該IOS設備並將信息發送到該設備;
- 最後,設備接收到數據信息給相應的APP,並按照設定彈出Push信息。
參考如下順序圖,會更易理解:
2.2 payload 消息JSON結構
{
"aps" : {
"alert" : {
"title" : "Game Request", // 標題
"body" : "Bob wants to play poker", //內容
},
"badge" : 5, //角標
"sound" : "binggo.caf", //聲音
"content-available" : 1,
"mutable-content" : 1, //可變內容
},
}
註意: payload 最大不能超過256位元組
aps
字典包含蘋果用來向用戶設備發送通知的keys
。key
指定了您希望系統在提醒用戶時使用的交互類型
。
下表列出了包含在該字典中的keys以及每個key的信息類型。註意:非蘋果給定的key會被忽略。
鍵 | 值的類型 | 描述 |
---|---|---|
alert | Dictionary or String | 當您希望系統顯示標準警報或橫幅時,請包含此鍵。用戶設備上應用程式的通知設置決定是否顯示警報或橫幅。該key的首選值是字典 。字典的更多關鍵字請參閱 Table 9-2。 如果指定字元串作為該鍵的值,則該字元串將顯示為警報或橫幅的消息文本。 |
badge | Number | 當您希望系統修改應用程式圖標的角標 時,請包含此鍵。如果字典中沒有包含此鍵,則Badge角標不會更改。若要刪除角標,請將此鍵的值設置為0 。 |
sound | String | 當您希望系統播放聲音時,請包含此鍵。此鍵的值是應用程式main bundle 或應用程式數據容器的Library/Sounds 文件夾中聲音文件的名稱。如果找不到聲音文件,或者為該值指定了default,系統將播放預設警報聲音。有關為通知提供聲音文件的詳細信息;請參閱自定義警報聲音。 |
content-available | Number | 設置此鍵的值為1 ,以配置後臺更新通知。當此key存在時,系統會在後臺喚醒您的應用程式,並將通知發送給其應用程式代理。有關配置和處理後臺更新通知的信息,請參閱配置後臺更新通知。 |
category | String | 為該鍵提供一個表示通知類型 的字元串值。此值對應於應用程式的某個註冊類別的identifier屬性中的值。要瞭解有關使用自定義操作的更多信息,請參閱配置類別和可操作通知。 |
三、固定語音的推送方案
四、合成語音的推送方案
4.1 Notification Service Extension 通知服務擴展 介紹
4.2 Notification Service Extension項目中的使用
4.3 iOS12之前的方案
4.4 iOS12之後的方案
更多內容詳見:https://blog.csdn.net/zhanglei5415/article/details/130316253
本文來自博客園,作者:reyzhang,轉載請註明原文鏈接:https://www.cnblogs.com/reyzhang/p/17352424.html