1. 程式人生 > >iOS 推送後臺語音播報

iOS 推送後臺語音播報

推送通知

  • 注意:這裡說的推送通知NSNotification有所區別
  • NSNotification是抽象的,不可見的
  • 推送通知是可見的(能用肉眼看到)
  • iOS中提供了2種推送通知
  • 本地推送通知(Local Notification
  • 遠端推送通知(Remote Notification





推送通知的呈現效果總結

  • 總結一下,推送通知有5種不同的呈現效果
  • 在螢幕頂部顯示一塊橫幅(顯示具體內容
  • 在螢幕中間彈出一個UIAlertView顯示具體內容
  • 在鎖屏介面顯示一塊橫幅(鎖屏狀態下,顯示具體內容
  • 更新app圖示的數字(說明新內容的數量
  • 播放音效(提醒作用



 推送通知的使用細節

  • 發出推送通知時,如果
    當前程式正執行在前臺,那麼推送通知就不會被呈現出來
  • 點選推送通知後,預設會自動打開發出推送通知的app
  • 不管app開啟還是關閉,推送通知都能如期發出

本地推送通知

  • 什麼是本地推送通知
  • 顧名思義,就是不需要聯網就能發出的推送通知(不需要伺服器的支援)
  • 本地推送通知的使用場景
  • 常用來定時提醒使用者完成一些任務,比如
  • 清理垃圾、記賬、買衣服、看電影、玩遊戲

如何發出本地推送通知

  • 建立本地推送通知物件

UILocalNotification *ln = [[UILocalNotification alloc] init];

  • 設定本地推送通知屬性
  • 推送通知的觸發時間(何時發出推送通知)

@property(nonatomic

,copy) NSDate *fireDate;

  • 推送通知的具體內容

@property(nonatomic,copy) NSString *alertBody;

  • 在鎖屏時顯示的動作標題(完整標題:滑動來 + alertAction

@property(nonatomic,copy) NSString *alertAction;

  • 音效檔名

@property(nonatomic,copy) NSString *soundName;

  • app圖示數字

@property(nonatomic) NSInteger applicationIconBadgeNumber;

如何發出本地推送通知

  • 排程本地推送通知(排程完畢後,推送通知會在特地時間
    fireDate發出)

[[UIApplication sharedApplication] scheduleLocalNotification:ln];

  • 獲得被排程(定製)的所有本地推送通知

@property(nonatomic,copy) NSArray *scheduledLocalNotifications;

(已經發出且過期的推送通知就算排程結束,會自動從這個陣列中移除)

  • 取消排程本地推送通知

- (void)cancelLocalNotification:(UILocalNotification *)notification;

- (void)cancelAllLocalNotifications;

  • 立即發出本地推送通知

- (void)presentLocalNotificationNow:(UILocalNotification *)notification;

本地推送通知的其他屬性

  • 每隔多久重複發一次推送通知

@property(nonatomic) NSCalendarUnit repeatInterval;

  • 點選推送通知開啟app時顯示的啟動圖片

@property(nonatomic,copy) NSString *alertLaunchImage;

  • 附加的額外資訊

@property(nonatomic,copy) NSDictionary *userInfo;

  • 時區

@property(nonatomic,copy) NSTimeZone *timeZone;

(一般設定為[NSTimeZone defaultTimeZone] ,跟隨手機的時區)

點選本地推送通知

  • 當用戶點選本地推送通知,會自動開啟app,這裡有2種情況
  • app並沒有關閉,一直隱藏在後臺
  • app進入前臺,並會呼叫AppDelegate的下面方法(並非重新啟動app

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification;

  • app已經被關閉(程序已死)
  • 啟動app,啟動完畢會呼叫AppDelegate的下面方法

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

  • launchOptions引數通過UIApplicationLaunchOptionsLocalNotificationKey取出本地推送通知物件

遠端推送通知()

  • 什麼是遠端推送通知
  • 顧名思義,就是從遠端伺服器推送客戶端的通知(需要聯網)
  • 遠端推送服務,又稱為APNsApple Push Notification Services
  • 為什麼需要遠端推送通知?
  • 傳統獲取資料的侷限性
  • 只要使用者關閉了app,就無法跟app的伺服器溝通,無法從伺服器上獲得最新的資料內容
  • 遠端推送通知可以解決以上問題
  • 不管使用者開啟還是關閉app,只要聯網了,都能接收到伺服器推送的遠端通知


遠端推送通知使用須知

  • 所有的蘋果裝置,在聯網狀態下,都會與蘋果的伺服器建立長連線
  • 什麼是長連線
  • 只要聯網了,就一直建立連線
  • 長連線的作用
  • 時間校準
  • 系統升級
  • 查詢我的iPhone
  • .. ...
  • 長連線的好處
  • 資料傳輸速度快
  • 資料保持最新狀態








.開發iOS程式的推送功能, iOS端需要做的事

1.請求蘋果獲得deviceToken

2.得到蘋果返回的deviceToken

3.傳送deviceToken給公司的伺服器

4.監聽使用者對通知的點選

.除錯iOS的遠端推送功能, 必備條件:

1.真機

2.除錯推送需要的證書檔案

1> aps_development.cer : 某臺電腦就能除錯某個app的推送服務

2> ios_development.cer : 讓電腦具備真機除錯的能力(除錯裝置)

3> iphone5_qq.mobileprovision : 某臺電腦就能利用某臺裝置除錯某個程式

.釋出具有推送服務的app

1> aps_production.cer : 如果釋出的程式中包含了推送服務,就必須安裝此證書

2> ios_distribution.cer  : 讓電腦具備釋出程式的能力

3> qq.mobileprovision  : 某臺電腦就能釋出某個程式








註冊遠端推送通知

  • 註冊成功後會呼叫AppDelegate的下面方法,得到裝置的deviceToken

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

{

    NSLog(@"%@", deviceToken);

}

點選遠端推送通知

  • 當用戶點選遠端推送通知,會自動開啟app,這裡有2種情況
  • app並沒有關閉,一直隱藏在後臺
  • app進入前臺,並會呼叫AppDelegate的下面方法(並非重新啟動app

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo;

  • app已經被關閉(程序已死)
  • 啟動app,啟動完畢會呼叫AppDelegate的下面方法

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

  • launchOptions引數通過UIApplicationLaunchOptionsRemoteNotificationKey取出伺服器返回的字典內容






JPush

  • 什麼是JPush
  • 一套遠端推送解決方案,支援androidiOS兩個平臺
  • 它能夠快捷地為iOS App增加推送功能,減少整合APNs需要的工作量、開發複雜度
  • 整合iOS SDK的步驟可以參考





. 推送通知

1. 什麼是推送通知?

> 首先明確:**此處的推送通知跟我們的”NSNotification”沒有半毛錢關係

> 可以理解為: 向用戶推送一條資訊來通知使用者某件事情

> 作用: 可以在APP退到後臺,或者關閉時;繼續推送一條訊息告訴使用者某件事情

2. 推送通知的應用場景?

(1) 一些任務管理APP,會在任務時間即將到達時,通知你做該任務;

(2) 健身App定時提醒你應該健身了;

(3) 買過電影票後,提前半小時告訴你,電影即將開場;

(4) 當你QQ或者微信收到訊息時,即使退到後臺,或者關閉APP,也可以收到資訊通知告訴我們;

(5) 電商APP,推送一條訊息通知我們有新品上架等等

3. 推送通知的展現樣式?

(1) 在螢幕頂部顯示一塊橫幅(顯示具體內容)

(2) 在螢幕中間彈出一個UIAlertView(顯示具體內容)

(3) 在鎖屏介面顯示一塊橫幅(鎖屏狀態下,顯示具體內容)

(4) 更新app圖示的數字(說明新內容的數量)

(5) 播放音效(提醒作用)

* 注意:以上樣式只能是使用者自己設定,我們無法通過程式碼控制*

4. 推送通知的分類

1.本地推送通知

本地可以理解為不聯網”;即使沒有網路情況下,也可以推送通知訊息

應用場景: 確定知道未來某個時間點應該提醒使用者什麼

2.遠端推送通知

概念:

本地相對,表示,必須在聯網情況下才會向用戶推送通知訊息

遠端推送服務,又稱為APNsApple Push Notification Services

應用場景:

1. 不確定未來某個時間點應該提醒使用者什麼,臨時性的

2. APP徹底退出時也想繼續讓使用者獲取一些最新訊息

使用原則: 誰能確定通知時間和內容, 誰就可以傳送(開發人員在APP內部通過程式碼傳送=本地通知; 伺服器可以確定通知時間和內容=遠端通知)

5. 推送通知的實現

1. 本地推送通知

1.建立UILocalNotification物件

2.設定一些必要屬性

推送通知的觸發時間(何時發出推送通知)

@property(nonatomic,copy) NSDate *fireDate;

推送通知的具體內容

@property(nonatomic,copy) NSString *alertBody;

3.開始推送通知

- 根據fireDate設定的時間進行推送

[[UIApplication sharedApplication] scheduleLocalNotification:ln];

- 立即推送

presentLocalNotificationNow:(UILocalNotification *)notification;

4.監聽使用者點選通知

- app處於前臺

此時不會彈框通知使用者通知的到達,但是還是會呼叫對應的代理方法

- app並沒有關閉,一直隱藏在後臺時

此時使用者點選通知資訊後,會讓app進入前臺,並會呼叫AppDelegate的下面方法

application: didReceiveLocalNotification:

- app已經被關閉(程序已死)

此時使用者點選通知資訊後,會啟動app,啟動完畢會呼叫AppDelegate的下面方法

application: didFinishLaunchingWithOptions:

launchOptions引數通過UIApplicationLaunchOptionsLocalNotif icationKey取出本推送通知物件

5.額外設定

每隔多久重複發一次推送通知

@property(nonatomic) NSCalendarUnit repeatInterval;

點選推送通知開啟app時顯示的啟動圖片

@property(nonatomic,copy) NSString *alertLaunchImage;

附加的額外資訊

@property(nonatomic,copy) NSDictionary *userInfo;

時區

@property(nonatomic,copy) NSTimeZone *timeZone;

(一般設定為[NSTimeZone defaultTimeZone] ,跟隨手機的時區)

在鎖屏時顯示的動作標題(完整標題:滑動來” + alertAction

@property(nonatomic,copy) NSString *alertAction;

音效檔名

@property(nonatomic,copy) NSString *soundName;

app圖示數字

@property(nonatomic) NSInteger applicationIconBadgeNumber;

6.其他操作

- 獲得被排程(定製)的所有本地推送通知

@property(nonatomic,copy) NSArray *scheduledLocalNotifications;

已經發出且過期的推送通知就算排程結束,會自動從這個陣列中移除

- 取消排程本地推送通知

- (void)cancelLocalNotification:(UILocalNotification *)notification;

- (void)cancelAllLocalNotifications;

7.注意事項

- iOS 8.0+,如果要使用本地通知,需要得到使用者的許可

didFinishLaunchingWithOptions方法中新增如下程式碼

UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];

[application registerUserNotificationSettings:settings];

8.額外補充

- iOS8.0之後,可以設定推送通知帶操作行為

在註冊設定時,設定categories:引數

監聽通知操作行為的點選

2. 遠端推送通知

1.遠端推送的原理

> 所有蘋果裝置, 在聯網狀態下,都會與蘋果伺服器建立一個長連線

長連線”: 相對的一個概念是短連線

長連線優勢: 伺服器可以向客戶端傳送資訊,保證資料即時性

劣勢: 佔用客戶和伺服器資源

短連線優勢: 節省資源,一個會話結束後,立即釋放資源

劣勢: 伺服器無法主動向客戶端發信息

> 蘋果裝置長連線作用:

時間校準

系統升級

查詢我的iPhone

推送通知...

> 原理就是藉助蘋果裝置與APNs伺服器之間的長連線, 藉助APNs伺服器將訊息傳送給客戶端

2.遠端推送通知實現的條件

> 有真機可以除錯推送通知

因為只有真機具備UDID, 才能夠生成deviceToken

> 需要真機除錯證書, 推送測試證書

3.遠端推送通知實現, 客戶端需要做的事

1. 請求蘋果獲得deviceToken

/**

 *  請求通知授權,以及請求遠端通知

 */

- (void)registerRemoteNotification

{

    if (isIOS(8.0))

    {

1. 請求通知授權

        UIUserNotificationSettings *notificationSet = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];

        [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSet];

2. 註冊遠端通知

相關推薦

iOS 後臺語音播報

推送通知 注意:這裡說的推送通知跟NSNotification有所區別NSNotification是抽象的,不可見的推送通知是可見的(能用肉眼看到)iOS中提供了2種推送通知本地推送通知(Local Notification)遠端推送通知(Remote Notification) 推送通知的呈現效

iOS 退款(或訂單)訊息語音播報

近期無知經理突然提出一個蛋疼的需求,並表示這是“客戶和市場強制要求”做的。。。沒辦法,只能硬著頭皮上了。之前採用的是靜默推送+普通推送,而且網上大部分資料也預設使用的是靜默推送方式。據我所知,該方案有一

關於IOS12 系統語音播報無聲解決方案

自從iOS升級到12.0.1 突然發現推送語音播報沒有了效果了,之前iOS12 完全沒有影響; 如何實現(網上很多,基本方案就是UNNotificationServiceExtension+語音合成) 除錯了一下NotificationServiceExtension 打

iOS訊息push,語音播報

iOS 10 開始支援1. xcode - >file -> new -> target 選擇iOS下面的,Notification Service Extension Service Extension 中收到推送之後,用AVSpeechSynthesi

ios 後臺語音播報被拒

發件人 Apple 2. 5 Performance: Software Requirements Guideline 2.5.4 - Performance - Software Requirements Your app declares support for

iOS後臺語音播報

最近做專案有一個需求: app在前臺彈出一個自定義提示框,並且語音讀出相關內容. app在後臺的時候彈出推送通知,並且語音讀出相關內容. 這個需求用到的知識點: 1,文字轉語音(iOS 7.0 之後自帶) 2,靜默推送(個推,jpush等,本人選用的是個推.個推帶有透傳功能,輕鬆實現需

iOS 服務的簡易原理與配置

補充 com 思考 lib email p12 sig 導出 文件的 最近的項目需要用到iOS的push功能,在配置push功能的過程中遇到了一些不清楚的地方,經過查閱資料和思考,已有初步認識,下面進行一下梳理,我們的服務器端用的是Facebook的Parse。 完整的

iOS證書從申請到使用

打包 desc apns div overflow cbe b2c 點擊 打開終端 關於這個話題,已經有非常多寫的非常好的文章了。可是,在自己做的過程中,即使別人寫的已經非常好了,還是會遇到這樣那樣的問題。自己還是再寫一遍吧。 本文記錄了從無到有申請證書,到最後可

IOS之PHP代碼(轉)

推送消息 獲取 option code bsp 包含 connect 手機 pan 準備工作 1.獲取手機註冊應用的deviceToken(iphone手機註冊應用時返回唯一值deviceToken) 2.獲取ck.pem文件(做手機端的給) 3.獲取pass phrase

iOS 原理

消息 產品 接收 mage div cati src 推送 ans 1. 什麽是遠程消息推送? APNs:Apple Push Notification server 蘋果推送通知服務 蘋果的APNs允許設備和蘋果的推送通知服務器保持連接,支持開發者推送消息給用戶設備對應

[iOS]相關兩點

討論一下最近遇到的兩個問題: 1. 推送接收 2.點選推送開啟APP時資料的處理 理想情況是: app處於活躍狀態,有推送到來,在應用內部應當彈出我們自己生成的提示。 app處於非活躍狀態,有推送到來,彈出系統生成的提示,點選提示會進入app並且顯示相關內容

IOShttp2使用netty服務啟動異常

IOS推送http2使用netty服務啟動異常 現象 使用netty開發×××送HTTP2,本機執行正常,部署至linux伺服器異常。 原因 是linux伺服器核心版本過低,所使用GLIBC類庫版本過低。netty要求GLIBC_2.10,我的伺服器最高才GLIBC_2.5。 linux檢視GLIB

ios (之遠端)升級成ios8系統之後有些程式接收不到遠端

維護一個程式,當手機升級到ios8之後就不能接收到遠端推送,顯示註冊失敗,查了下資料,原來是沒有獲取使用者許可,加了個方法試了下,ok if ([[[UIDevice currentDevice]systemVersion ]integerValue] >= 8) {

IOS通知開發流程

最近開發IOS的推送通知,現把流程及遇到的問題整理一下: 一、證書的準備工作 1.在開發電腦MAC上申請證書 開啟鑰匙串訪問 選擇從證書頒發機構請求證書 這裡的郵箱賬號寫你自己的,常用名稱可以隨便寫 選擇儲存到磁碟 這裡最好新建一個資料夾 用來專門儲存這些檔案

一步一步教你做ios pem證書製作 php

 最近在研究ios的推送問題,遇到了一些問題,最終整理了一下。放在這裡和大家分享 APNS的推送機制 首先我們看一下蘋果官方給出的對ios推送機制的解釋。如下圖 Provider就是我們自己程式的後臺伺服器,APNS是Apple Push Notification Service的縮寫,也就是

iOS小結(證書的生成、客戶端的開發、服務端的開發)

1.推送過程簡介      (1)App啟動過程中,使用UIApplication::registerForRemoteNotificationTypes函式與蘋果的APNS伺服器通訊,發出註冊遠端推送的申請。若註冊成功,回撥函式application:(UIApplication *)applicatio

JAVA SDK 極光後臺DEMO

pom導依賴 <properties> <comLog.version>1.1.1</comLog.version> </properties> <dependenci

伺服器端接入有盟,實現為android 和 ios的功能

       在伺服器端要做可以主動推送給客戶端一些提示資訊,比如會員到期,有人讚了你的評論,有人關注你這樣的提示資訊,        作為新手,暫時還不能自己寫一些restful的東西,藉助有盟現成的推送api,做一下記錄,方便以後使用。        有盟開發文件 ht

iOS詳解(二)收到通知跳到指定頁面的處理辦法

接著上一篇繼續,當接到通知需要的操作 一、APP在前臺        實現效果,在前臺無論在那個頁面都在頂部展示一個橫條,顯示推送資訊,點選時跳到自己處理的頁面(10秒不點選自動移除這個橫條view)        直接上程式碼吧,講解一下思路,有問題留言        當

IOS (本地、遠端、三方[極光])

Provider是給你手機應用發出推送訊息的伺服器,而APNS(Apple Push Notification Service)則是蘋果訊息推送伺服器。你本地的伺服器當需要給應用推送一條訊息的時候,先要將訊息發出到蘋果推送伺服器,然後再由蘋果推送伺服器將訊息發到安裝了該應用的手機。 接下來再看一張解釋圖