精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何在iOS 10中使用推送通知

譯文
移動開發 iOS
雖然經常被過度使用,但是推送通知確實是一種有效的吸引用戶注意力的方式,例如通知他們更新軟件或需要采取相應的措施,等等。當前,新的iOS 10系統在推送通知方面也提供了新的支持,例如新消息、優惠和時間表變化等。

簡介

雖然經常被過度使用,但是推送通知確實是一種有效的吸引用戶注意力的方式,例如通知他們更新軟件或需要采取相應的措施,等等。當前,新的iOS 10系統在推送通知方面也提供了新的支持,例如新消息、優惠和時間表變化等。

在本教程中,你將學習如何在你的iOS應用程序中使用推送通知,同時還向你展示iOS 10的一些新功能。為了開發iOS 10推送通知,你需要使用Xcode 8Beta版本。

起步

啟用推送通知在Xcode中是很容易的,請遵循如下幾個步驟:

1.啟動Xcode創建一個新項目,給它一個唯一的名稱和相應的捆綁標識符。

2.創建項目后,轉到【Project Settings】界面,選擇【Capabilities】選項卡。然后,啟動推送通知功能,如下圖所示。

【注意】如果你是蘋果開發者計劃的一位付費會員,你只會看到【Push Notifications】(推送通知)功能項。

接下來,請轉到【Developer Account】部分并檢查Xcode自動作出的更改。從左邊的菜單中選擇【Certificates, IDs & Profiles】,然后在【Identifiers】部分選擇【App IDs】。找到剛才創建的應用程序名稱并選中,以便顯示相應的服務列表。

【注意】在【Push Notifications】附近有兩個可配置狀態。

先不要關閉此屏幕,你將很快返回到這個界面的。

發送通知

在本文中,我將使用Pusher技術(https://github.com/noodlewerk/NWPusher/releases/tag/0.7.0)發送推式通知。其實,你還可以使用其他解決方案,如Houston技術(https://github.com/nomad/houston)。無論采取哪種方式,想發送通知你都需要使用證書。

為了創建一個證書,你需要打開【Keychain Access】訪問權限并選擇“Keychain Access -> Certificate Assistant -> Request a Certificate from a Certificate Authority”菜單項。

填寫如下圖所示的表格并單擊【Continue】按鈕。請確保你剛才的選項保存到磁盤上。

現在,再返回到【Developer Account】屏幕,你可以在【App IDs】處生成用于開發或部署的證書了。選擇對應的應用程序后,在底部單擊【Edit】命令。然后,在【Push Notifications】部分,單擊【Create Certificate for development】。

必要時,你需要上傳由鑰匙串(Keychain)生成的證書請求,然后點擊【Continue】按鈕。請參考下圖。

你現在已經創建了證書,并可以下載它。為了安裝它,請打開下載的文件。

現在,你可以下載并運行Pusher。

【注意】在窗口頂部的組合框中要求選擇一個推送證書(Push Certificate)。因為它位于你的鑰匙串中,OS X將詢問是否允許訪問該證書。

 

上面圖的第二個字段(注意那個內容顯灰色的下拉列表框控件)需要你輸入一個設備令牌,你會在下一步中得到這個數據的。

獲取通知

從現在開始,你需要編寫代碼了。將接收通知的設備必須注冊到蘋果推送通知服務(Apple Push Notification Service,簡稱“APNS”)。為此,你需要發送一個在應用程序啟動時生成的唯一的令牌。

接下來,請打開文件AppDelegate.swift,然后添加下面的方法。

【注意】此代碼包括中使用了最新的Swift 3.0語法;因此,有些語法可能不同于你以前熟悉的2.0格式。

  1. func registerPushNotifications() { 
  2.  
  3. DispatchQueue.main.async { 
  4.  
  5. let settings = UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil) 
  6.  
  7. UIApplication.shared().registerUserNotificationSettings(settings) 
  8.  
  9.  

在這里的設置中,你需要指定應用程序將接收的類型(稍后會介紹)。在應用程序啟動時調用此方法。

  1. func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
  2.  
  3. registerPushNotifications() 
  4.  
  5. return true 
  6.  

此時,應用程序將自動顯示一個彈出窗口,要求用戶通過相應的權限來發送通知。

只有在用戶同意它時,才能注冊并發送該通知。其中,UIApplicationDelegate方法負責處理響應的問題。

  1. func application(_ application: UIApplication, didRegister notificationSettings: UIUserNotificationSettings) { 
  2.  
  3. if notificationSettings.types != UIUserNotificationType() { 
  4.  
  5. application.registerForRemoteNotifications() 
  6.  
  7.  

在上述代碼中,首先檢查用戶是否已授予權限,然后調用方法來注冊遠程通知。當請求完成時,后者將調用另一個委托方法。注意到,響應消息中包含一個設備令牌(你可以在調試階段輸出有關內容)。當發送推式通知來標識設備時,你將需要此令牌。

  1. func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { 
  2.  
  3. let chars = UnsafePointer<CChar>((deviceToken as NSData).bytes) 
  4.  
  5. var token = "" 
  6.  
  7. for i in 0..<deviceToken.count { 
  8.  
  9. token += String(format: "%02.2hhx", arguments: [chars[i]]) 
  10.  
  11.  
  12. print("Registration succeeded!"
  13.  
  14. print("Token: ", token) 
  15.  

如果出現了錯誤,則調用下面的方法。

  1. func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) { 
  2.  
  3. print("Registration failed!"
  4.  

【注意】在啟動應用程序時調用registerUserNotificationSettings方法是很重要的,因為用戶有可能更改其設置的權限。此外,RegisterForRemoteNotifications方法也很重要,因為有些情況下設備令牌可以更改并且將不再發送通知。

到目前為止,你的上述設置足以能夠接收一個簡單的通知了。

通知有效載荷

一個應用程序可以通過若干種不同方法來接收通知。這只需要在通知的有效載荷部分指定即可,其中包含應用程序如何通知用戶以及你可以使用通知發送的自定義數據。

通知實際上是發送給用戶的一個JSON字典,它本身又包含了一個帶有aps鍵的字典。在這第二個詞典中,你可以指定有效載荷部分的鍵/值對。

最常見的數據有:

向用戶顯示的通知消息。這可以是一個簡單的字符串或一個帶有如標題、正文等鍵的字典。

設備收到通知時將播放的聲音。它可以是應用程序自定義的聲音或系統聲音。

應用程序在其圖標附近將用作徽章的一個數字。將此設置為0將會刪除徽章。

content-available:值為1時將一個無聲通知發送給用戶。此時,不會播放任何聲音或設置任何徽章數字,但它會喚醒應用程序以便可以與服務器通信。

本教程的其余部分中將使用的通知內容如下:

  1.  
  2. "aps": { 
  3.  
  4. "alert": { 
  5.  
  6. "title":"Hello! :)"
  7.  
  8. "body":"App closed..." 
  9.  
  10. }, 
  11.  
  12. "badge":1, 
  13.  
  14. "sound":"default" 
  15.  
  16.  

應用程序生命周期

把Xcode控制臺中顯示的設備令牌復制到Pusher。然后,將上一小節中的JSON對象復制到有效載荷文本字段(即下圖最下面的文本框)。

現在,你可以試著推送第一次通知。如果設備的屏幕被鎖定,應當看起來如下面這樣。但是,當用戶選擇視圖時什么也沒有。

為了處理通知,你還需要添加另外幾個新的方法,有關代碼如下:

  1. private func getAlert(notification: [NSObject:AnyObject]) -> (String, String) { 
  2.  
  3. let aps = notification["aps"as? [String:AnyObject] 
  4.  
  5. let alert = aps?["alert"as? [String:AnyObject] 
  6.  
  7. let title = alert?["title"as? String 
  8.  
  9. let body = alert?["body"as? String 
  10.  
  11. return (title ?? "-", body ?? "-"
  12.  

如果結構是相同的,這段代碼將返回收到的通知中的標題和正文內容。

  1. func notificationReceived(notification: [NSObject:AnyObject]) { 
  2.  
  3. let viewController = window?.rootViewController 
  4.  
  5. let view = viewController as? ViewController 
  6.  
  7. view?.addNotification( 
  8.  
  9. title: getAlert(notification: notification).0, 
  10.  
  11. body: getAlert(notification: notification).1) 
  12.  

此方法會將一個新行添加到應用程序主視圖(參見項目完整的ViewController代碼)中的UITableView中。

我通過如下三種情形測試了推送通知的使用情況。

當應用程序關閉時

如果用戶從通知中打開應用程序,那么將調用經修改的如下所示的 didFinishLaunchingWithOptions方法:

  1. func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
  2.  
  3. // Override point for customization after application launch. 
  4.  
  5. application.applicationIconBadgeNumber = 0; // Clear badge when app launches 
  6.  
  7. // Check if launched from notification 
  8.  
  9. if let notification = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? [String: AnyObject] { 
  10.  
  11. window?.rootViewController?.present(ViewController(), animated: true, completion: nil) 
  12.  
  13. notificationReceived(notification: notification) 
  14.  
  15. else { 
  16.  
  17. registerPushNotifications() 
  18.  
  19.  
  20. return true 
  21.  

上面代碼中,在假設用戶已經看到通知的情況下清除徽章。然后,檢查應用程序是通過圖標還是使用通知方式打開的。在第一種情況下,調用registerPushNotifications()方法并繼續遵循以前的流程進行。如果是通過通知方式運行的應用程序,那么將調用自定義的notificationReceived方法并添加一個新行。

當應用程序處于前臺時

如果用戶在使用應用程序,即應用程序正處在前臺,那么可以使用下列方法來處理通知。此方法將把通知添加到tableView視圖中:

  1. func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { 
  2.  
  3. notificationReceived(notification: userInfo) 
  4.  

【注意】在這種情況下,通知是不會播放聲音。

當應用程序處于后臺時

在這種情況下,我添加了一個方法來清除徽章編號。通知的處理方式與應用程序處于前臺時一樣。

  1. func applicationWillEnterForeground(_ application: UIApplication) { 
  2.  
  3. application.applicationIconBadgeNumber = 0; // Clear badge when app is or resumed 
  4.  

最后,表格中將顯示對應于所有通知信息的一共三行內容;請參考下面的圖形。

小結

在iOS 10中,推送通知支持對于程序員們來說又會是一個非常有趣的機會,因為它可以提供在以前版本中根本無法使用的不同級別的交互方式。最后,我希望本文能夠為你在自己的應用程序中使用推送通知提供很好的借鑒作用。

責任編輯:趙立京 來源: 51CTO
相關推薦

2019-08-26 09:20:29

Windows 10虛擬桌面Windows

2018-04-23 10:10:25

Windows 10關閉通知

2020-01-07 09:50:41

Windows 10上帝模式Windows

2019-09-04 19:32:56

HiveFlink大數據

2019-12-06 10:05:28

Windows 10手機應用程序

2022-12-08 08:00:00

.NET?7BitArray數據執行

2016-01-05 09:37:41

遠程桌面連接Windows 10

2024-01-18 08:37:33

socketasyncio線程

2022-06-23 08:00:53

PythonDateTime模塊

2021-06-09 09:36:18

DjangoElasticSearLinux

2021-03-09 07:27:40

Kafka開源分布式

2011-08-10 09:31:41

Hibernateunion

2015-08-27 09:46:09

swiftAFNetworkin

2022-05-17 08:25:10

TypeScript接口前端

2024-09-06 11:34:15

RustAI語言

2019-09-16 19:00:48

Linux變量

2014-07-02 09:47:06

SwiftCocoaPods

2020-11-30 11:55:07

Docker命令Linux

2020-04-09 10:18:51

Bash循環Linux

2019-01-31 10:25:24

Windows 10文本大小
點贊
收藏

51CTO技術棧公眾號

日本激情一区| 123成人网| 91偷拍与自偷拍精品| 日韩av色在线| 国产精品国产三级国产传播| 97se亚洲| 在线观看日韩国产| www.亚洲一区二区| 国产黄a三级三级三级| 欧美人成在线| 亚洲无限av看| 在线观看亚洲免费视频| 国产一区二区色噜噜| 亚洲一区二区三区四区在线免费观看| 欧美在线激情| 黄色av免费观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美日韩第一视频| 一级黄色性视频| 国产精品极品| 日韩亚洲欧美成人一区| 欧美日韩在线成人| 僵尸再翻生在线观看| 国产精品久久久久久久久免费樱桃| 国产午夜精品一区| 国产情侣自拍小视频| 日韩中文字幕亚洲一区二区va在线 | 一区三区在线欧| 欧美一级搡bbbb搡bbbb| 亚洲欧美另类动漫| 欧美伦理91| 亚洲激情自拍视频| 一区二区三区四区欧美| 内衣办公室在线| 国产91在线|亚洲| 成人观看高清在线观看免费| 四虎精品永久在线| 亚洲午夜精品久久久久久app| 日日骚av一区| 91狠狠综合久久久久久| 嫩草影视亚洲| 亚洲精品在线不卡| 韩国无码一区二区三区精品| 亚洲精品a区| 91精品国产麻豆国产自产在线 | 日本丰满少妇做爰爽爽| 亚洲视频播放| 性日韩欧美在线视频| 九九热精品免费视频| 国产精品久久久久久久免费观看 | 四虎4545www精品视频| 高跟丝袜欧美一区| 黄色动漫网站入口| 中文字幕乱码在线播放| 狠狠干狠狠久久| 欧美亚洲国产成人| 色综合亚洲图丝熟| 欧美日韩中文字幕| 116极品美女午夜一级| 中文在线8资源库| 欧美性高潮床叫视频| 欧美三级一级片| xx欧美视频| 色综合久久中文综合久久牛| 女人和拘做爰正片视频| av有声小说一区二区三区| 欧美在线视频日韩| 国内外成人免费在线视频| 日韩成人在线一区| 日韩三级av在线播放| 美女伦理水蜜桃4| 欧美午夜寂寞| 亚洲少妇中文在线| 成年人网站在线观看视频| 久久精品亚洲欧美日韩精品中文字幕| 久久久精品999| 豆国产97在线 | 亚洲| 在线综合视频| 国产精品香蕉在线观看| ,亚洲人成毛片在线播放| 国产美女精品一区二区三区| 444亚洲人体| 天堂中文在线看| 国产欧美视频一区二区| 在线看无码的免费网站| 黄页网站大全在线免费观看| 懂色av一区二区三区| www亚洲成人| 一区二区网站| 亚洲欧美日韩综合| 日韩精品一区二区亚洲av性色| 国产精品二区影院| 国产91露脸中文字幕在线| 91国内精品视频| 成人aaaa免费全部观看| 日韩欧美在线电影| 欧美黑人xx片| 欧美综合久久久| 亚洲成人av免费观看| 亚洲春色h网| 久久夜色精品亚洲噜噜国产mv| 国产一二三四在线| 日本免费在线视频不卡一不卡二| 91福利入口| 黄色网址在线播放| 亚洲综合一区二区精品导航| 亚洲精品中文字幕无码蜜桃| 免费一区二区三区在线视频| 亚洲欧美中文字幕| 国产黄色片在线免费观看| 久久精品女人| av一区观看| 77导航福利在线| 福利二区91精品bt7086| 久久久久亚洲av无码网站| jvid福利在线一区二区| 久久久久久免费精品| 一级黄色短视频| 26uuu另类欧美| 日韩a级黄色片| 日本在线中文字幕一区二区三区| 欧美电影免费提供在线观看| 免费黄色国产视频| 石原莉奈在线亚洲三区| 精品久久蜜桃| 91av久久| 日韩三区在线观看| 全网免费在线播放视频入口 | 在线观看免费看片| 91视频一区| 国产成人精品久久| 日韩一级免费毛片| 一区二区三区国产豹纹内裤在线| 国产九九在线视频| 伊人久久大香线蕉无限次| 欧美黑人性视频| 国产精品羞羞答答在线| 国产精品网站在线| 丁香啪啪综合成人亚洲| 欧美日韩看看2015永久免费 | 国产在视频一区二区三区吞精| 日韩精品视频观看| 99久在线精品99re8热| 国产不卡在线一区| 欧美一区二区三区综合| 一区二区三区无毛| 最近2019年好看中文字幕视频 | 日本精品一区二区| 天堂电影一区| 亚洲免费电影一区| 久久久久在线视频| 国产午夜精品一区二区三区视频 | 国产呦萝稀缺另类资源| 亚洲欧洲精品一区二区| 欧洲精品久久久久毛片完整版| 在线播放日韩av| 最新中文字幕在线观看视频| 国产亚洲精品7777| 91最新在线观看| 久久网站免费观看| 91免费版网站入口| 性欧美高清come| 日韩三区在线观看| 日本系列第一页| av高清久久久| 国产一区亚洲二区三区| 国产一区二区三区天码| 国产精品视频大全| 日本在线免费播放| 日韩一区二区在线播放| 免费看一级一片| 不卡区在线中文字幕| 国产精品97在线| 成人影院天天5g天天爽无毒影院| 国产精品亚洲一区二区三区| 黄视频网站在线| 欧美成人福利视频| 视频一区二区三区四区五区| 日本一二三四高清不卡| www.桃色.com| 伊人天天综合| 欧美综合激情| 国内精品视频| 国色天香2019中文字幕在线观看| 香蕉久久一区二区三区| 欧美亚洲国产bt| 无码人妻精品一区二区三区夜夜嗨| www.欧美色图| 天天影视综合色| 欧美精品91| 欧美国产一二三区| 婷婷丁香久久| 97碰在线观看| 亚洲成人影院麻豆| 亚洲国产精品成人av| 成年人视频免费| 亚洲精品国产成人久久av盗摄| 亚洲精品乱码久久久久久蜜桃图片| 免费日韩一区二区| 日韩中文字幕在线不卡| 国产99久久精品一区二区300| 91久久精品日日躁夜夜躁国产| 老色鬼在线视频| 精品国模在线视频| 黄上黄在线观看| 精品国产电影一区二区| 最新国产中文字幕| 精品国产91久久久久久| 顶级黑人搡bbw搡bbbb搡| 91色乱码一区二区三区| 国产黑丝在线视频| 日本视频中文字幕一区二区三区| 精品一二三四五区| 四季av一区二区凹凸精品| 精品人伦一区二区三区| 亚洲精品一区二区三区在线| 国产欧美亚洲视频| 中文字幕一区久| 久久久久久久久网站| 国产网站在线免费观看| 亚洲人成绝费网站色www| 国产综合在线播放| 91麻豆精品国产91久久久久| 欧美亚洲另类小说| 欧美性xxxxx极品娇小| 久久艹精品视频| 亚洲私人黄色宅男| 亚洲最大成人综合网| 99久久综合国产精品| 亚洲精品久久一区二区三区777 | 免费成人深夜夜行p站| 国产精品99久久久久久久女警| 天堂网在线免费观看| 日韩av不卡在线观看| 激情六月丁香婷婷| 亚洲影视综合| 国产在线精品91| av成人国产| 国产69精品久久久久999小说| 综合国产精品| 久久www视频| 影音先锋中文字幕一区| 欧美日韩激情四射| 好吊日精品视频| 日韩国产一级片| 日韩午夜免费视频| 日本中文字幕网址| 99精品99| aa免费在线观看| 丝袜诱惑制服诱惑色一区在线观看| 大陆极品少妇内射aaaaa| 国产精品亚洲产品| 激情五月开心婷婷| 日韩电影免费在线观看网站| 国产免费视频传媒| 麻豆91小视频| 日韩av加勒比| 国产成人精品综合在线观看| 国产sm在线观看| 国产成人av在线影院| www男人天堂| 久久一区二区视频| 亚洲一级黄色录像| 亚洲色欲色欲www在线观看| www.av视频| 亚洲va国产va欧美va观看| 尤物视频在线观看国产| 色综合久久综合网| 夜夜躁很很躁日日躁麻豆| 91精品国产综合久久精品| 亚洲精品久久久蜜桃动漫| 亚洲国产日韩精品在线| 久草在线网址| 日韩一二三在线视频播| 蜜桃成人365av| 欧美一级电影久久| yy6080久久伦理一区二区| 91精品在线观| 欧美巨大xxxx| 亚洲欧洲一区二区福利| 欧美国产另类| av网站在线观看不卡| 激情亚洲综合在线| 婷婷五月精品中文字幕| 国产亚洲一本大道中文在线| 911国产在线| 亚洲丰满少妇videoshd| 午夜精品免费观看| 欧美一级一级性生活免费录像| 亚洲欧美色视频| 色琪琪综合男人的天堂aⅴ视频| 久久香蕉一区| 国产不卡精品视男人的天堂| 国产精品视频首页| 欧美中日韩免费视频| 欧美色一级片| 一级在线免费视频| 成av人片一区二区| 激情高潮到大叫狂喷水| 午夜激情综合网| 91影院在线播放| 日韩国产欧美精品一区二区三区| 免费黄色在线看| 538国产精品一区二区在线| 国产一区二区视频在线看| 欧美亚洲国产免费| 国模吧视频一区| 色一情一区二区三区| 26uuu另类欧美亚洲曰本| 五月婷婷一区二区| 欧美视频精品在线| 天天影院图片亚洲| 色综合男人天堂| 国产亚洲欧美日韩精品一区二区三区 | 伊人色综合久久天天| 免费在线观看av的网站| 亚洲精美色品网站| 在线播放免费av| 国产主播欧美精品| 国产欧美日韩精品一区二区免费 | 成人精品电影在线| 精品国产日本| 1000部精品久久久久久久久| www.五月天色| 国产精品国产精品国产专区不蜜| 国产精品久久久久久久久久精爆| 欧美va在线播放| caopen在线视频| 成人激情av在线| 久久影院一区| 国产一伦一伦一伦| 亚洲国产精品高清| 久久久黄色大片| 亚洲精品自拍视频| 美女视频在线免费| 精品久久精品久久| 宅男噜噜噜66国产日韩在线观看| 中文字幕99页| 亚洲观看高清完整版在线观看| 国产婷婷一区二区三区久久| 正在播放国产一区| 国产精品亚洲成在人线| 亚洲精品影院| 六月婷婷色综合| 91 在线视频| 91精品久久久久久久91蜜桃| 黄色网页在线看| 91系列在线播放| 希岛爱理一区二区三区| 久久久久久久久久久久久久久国产| 国产精品久久久久国产精品日日 | 国产综合久久久久久久久久久久| 久久久国产一级片| 欧美久久久久久蜜桃| 国产区在线观看| 99视频国产精品免费观看| 狠狠综合久久| 久久中文字幕人妻| 91久久线看在观草草青青| 福利成人在线观看| 国产日韩在线免费| 欧美国产精品| 一起草在线视频| 色网综合在线观看| chinese偷拍一区二区三区| 成人欧美一区二区三区黑人| 欧美成人嫩草网站| 亚洲天堂美女视频| 色综合久久中文字幕综合网| 风间由美一区| 91精品久久久久久蜜桃| 日韩午夜高潮| 黄色免费一级视频| 精品少妇一区二区三区在线视频| 97蜜桃久久| 亚洲激情图片| 国产成人一区在线| 国内精品福利视频| 综合网中文字幕| 影音先锋欧美激情| 久久久免费视频网站| 中文字幕一区二区在线播放| 亚洲精品国产一区二| 国产精品美女av| 国内精品久久久久久久97牛牛| 国产在线观看无码免费视频| 欧美色爱综合网| sis001亚洲原创区| 天天爽天天狠久久久| 高清成人在线观看| 亚洲妇女无套内射精| 四虎影视国产精品| 色999日韩欧美国产| 日本精品视频| av视屏在线播放| 一区二区久久久久| 9i精品一二三区| 久久福利电影| 国产精品一区二区视频| 精品成人无码久久久久久|