国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

如何在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大數據

2022-12-08 08:00:00

.NET?7BitArray數據執行

2019-12-06 10:05:28

Windows 10手機應用程序

2016-01-05 09:37:41

遠程桌面連接Windows 10

2022-06-23 08:00:53

PythonDateTime模塊

2011-08-10 09:31:41

Hibernateunion

2021-03-09 07:27:40

Kafka開源分布式

2022-05-17 08:25:10

TypeScript接口前端

2021-06-09 09:36:18

DjangoElasticSearLinux

2015-08-27 09:46:09

swiftAFNetworkin

2024-01-18 08:37:33

socketasyncio線程

2019-09-16 19:00:48

Linux變量

2014-07-02 09:47:06

SwiftCocoaPods

2024-09-06 11:34:15

RustAI語言

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技術棧公眾號

中文字幕第一区综合| 蜜桃精品一区二区三区| 国产激情二区| 天海翼精品一区二区三区| 日韩精品在线网站| 啦啦啦在线视频免费观看高清中文 | 处破女av一区二区| 91久久国产精品| 国内精品视频在线观看| 国产一区二三区| a级黄色片网站| 精品亚洲国产成人av制服丝袜| 俺也去精品视频在线观看| 亚洲美女主播视频免费观看| 欧美日一区二区三区在线观看国产免| 日韩欧美国产高清| 在线观看视频污| 国产白丝精品91爽爽久久| 久久国产加勒比精品无码| 中文字幕在线综合| 一本一本久久| 精品视频1区2区| 自由色视频.| 九九九久久久精品| 欧美成人aa大片| 国产精品日韩电影| 日韩精品一区第一页| 欧美高清精品3d| 男人日女人下面视频| 蜜桃精品视频在线观看| 国产在线一区二区三区播放| av高清一区| 亚洲人成网站精品片在线观看| 97精品久久久| 成人高潮视频| 日韩成人中文字幕在线观看| 黄色免费看网站| 久久久精品国产99久久精品芒果| 精品日本一区二区三区在线观看| 亚洲1区在线观看| 亚洲午夜精品视频| 小早川怜子影音先锋在线观看| 成人黄色大片在线观看| 久久久久久久97| 人成在线视频| 蜜桃一区二区三区四区| 亚洲第一区第一页| 欧美13一14另类| 日本欧美一区二区三区| 欧美精品久久久| 亚洲人成精品久久久| 精品激情国产视频| 亚洲另类一区二区| 麻豆影视在线观看| 国产精品99久久久久久似苏梦涵 | 欧美成人精品h版在线观看| 超碰资源在线| 最近免费中文字幕视频2019| 黑人精品视频| 日韩大片在线观看视频| 成人午夜在线| 尤物tv国产一区| а√在线中文网新版地址在线| 欧美日韩一区二区三区在线| 婷婷视频在线| 亚洲色图五月天| 欧美日韩卡一| 97在线免费视频| 99九九热只有国产精品| 性视频1819p久久| vam成人资源在线观看| 亚洲成av人综合在线观看| 伊人久久大香线蕉成人综合网| 每日更新成人在线视频| 亚洲高清免费在线观看| 国产+人+亚洲| 亚洲国产精品久久久男人的天堂| 麻豆视频在线观看免费| 不卡中文字幕av| 国内精品美女在线观看| 国产亚洲欧美在线视频| 91麻豆精品国产91久久久更新资源速度超快| 91av在线播放视频| 亚洲人精品午夜在线观看| 国产粉嫩在线观看| 国产精品黄视频| 国产亚洲成人一区| 69精品丰满人妻无码视频a片| 色综合一个色综合| 小早川怜子影音先锋在线观看| 成人高清视频观看www| 影音先锋欧美资源| 亚洲另类一区二区| 国产自产自拍视频在线观看| 午夜精品www| 日韩va欧美va亚洲va久久| 亚洲最大成人在线观看| 亚洲国产精品字幕| 一区二区中文字| 亚洲 高清 成人 动漫| 欧美一区二区啪啪| 亚洲制服欧美另类| 97国产精东麻豆人妻电影 | 日韩国产网站| 99re视频在线| 17c精品麻豆一区二区免费| 日韩伦理在线一区| 日韩精品一区二区三区四区视频| 操欧美老女人| 欧美人与禽性xxxxx杂性| 国产精品视频xxx| 国产午夜三级一区二区三| 欧美家庭影院| 国产麻豆午夜三级精品| 成人亚洲视频在线观看| 亚洲男人av电影| 久久99久久精品| 成人做爰66片免费看网站| 亚洲欧洲成人自拍| 国产成人免费| 手机在线视频你懂的| 欧美日韩一卡二卡三卡| 人人超碰91尤物精品国产| yjizz视频网站在线播放| 国产精品成人久久久久| 亚洲日本中文字幕区| 国产精品videossex| 男女性激情视频在线观看| 日本高清视频一区| 最新国产精品久久精品| 欧洲三级视频| 色开心亚洲综合| 日本亚洲欧洲精品| 欧美插天视频在线播放| 94色蜜桃网一区二区三区| 国产激情视频在线看| 欧美日韩成人在线播放| 韩国自拍一区| 色av一区二区| 欧美天天综合| 99精品女人在线观看免费视频| 999久久精品| 成人教育av在线| 免费成人高清在线视频| 亚洲影视一区| 欧美在线影院在线视频| 国产女人18水真多18精品一级做| 国产一区 二区| 国产精品久久久久一区二区| 亚洲精品不卡在线| 国产精品不卡在线观看| 亚洲午夜av| 免费毛片在线| 精品999在线观看| 精品国产一区二区三区四区在线观看 | 伊人青青综合网| 最新在线你懂的| 96精品久久久久中文字幕| 欧美综合天天夜夜久久| 日韩电影免费在线观看网站| 中文字幕 在线观看| 国产男女激情视频| 国产精品久久97| 欧美色图在线观看| 日韩电影在线免费观看| 成人久久网站| 色偷偷福利视频| 国产成人精品日本亚洲11| 日韩网站在线看片你懂的| 国v精品久久久网| 成人p站proumb入口| 538任你躁精品视频网免费| 欧美丝袜足交| 欧美老女人另类| 第四色在线一区二区| 久久99久久人婷婷精品综合 | 国产精品女同互慰在线看| 亚洲国产三级在线| 亚洲免费小视频| 高清一区二区三区日本久| 成人网在线观看| 中文字幕综合在线观看| 久草在线资源视频| 2021av在线| 欧美韩一区二区| 亚洲a一区二区三区| 欧美特黄一级大片| 午夜综合激情| 成人av在线资源网| 久久精品欧美日韩精品 | 欧美伦理在线视频| 日韩母乳在线| 久久精品高清| 亚洲精品护士| 蜜臀av性久久久久蜜臀aⅴ| 欧美精品首页| 国产+成+人+亚洲欧洲自线| 精品福利在线导航| 国产午夜精品一区二区三区| 亚洲精品成人网|