AppleWatch開發入門七——watchOS中通知的應用

AppleWatch開發入門七——watchOS中通知的應用

1、引言

        在iOS系統中,支持的通知有兩種類型:本地通知和遠程通知。本地通知多用於計時類通知,遠程的又稱推送,多用於一些提示動態的提示信息。這裏有相關通知的一些知識總結:json

本地推送:http://my.oschina.net/u/2340880/blog/405491數組

遠程推送:http://my.oschina.net/u/2340880/blog/413584iphone

        在watch中,通知是和iphone同步的,在iphone上的App收到通知的同時,會默認也推送到watch上,基於watch的穿戴性,對用戶來講,它上面的通知信息將比iphone更加及時。ide

2、WatchOS通知概覽

        首先,watch上的通知分爲兩部分:short-look和long-lock。簡而言之,short-look,能夠理解爲一個簡單的通知預覽,它會將通知發起的APP和主要標題等信息展現給你,讓你一目瞭然,當用戶擡起手腕,查看這個通知必定時間,這個短通知就會轉換爲long-look通知。short-look的通知界面咱們不可以自定義,系統爲咱們設計好了模樣,以下:測試

長通知的界面咱們是能夠進行必定程度上的自定義的,而且能夠添加按鈕等邏輯操做。this

        long-look也分爲兩種界面,靜態界面和動態界面。這個也好理解,靜態界面是咱們在寫程序時就定義好的界面,在通知發送到watch上時,界面會自動匹配通知內容進行顯示。動態的界面則是當收到通知時,會先執行咱們相應的配置代碼,以後在進行通知界面的展現。一個long-look界面大體以下:spa

在long-lock中,界面定義爲三個部分,頭部標題欄,自定義視圖欄和按鈕交互區。頭部的標題欄咱們不能自定義,它是一個半透明的上面有App圖標和名字的橫欄。其下面是咱們能夠自定義的區域,咱們能夠在storyBoard中拉入文本和圖片。最下面是一些交互按鈕,其名稱等配置信息在推送的文件中定義。.net

3、如何在模擬器上模擬遠程推送

        在watchOS模擬器上,Xcode爲咱們準備好了一種能夠模擬測試推送的方式。若是咱們建立項目時,選擇了NotifacationScene,則Xcode會默認爲咱們建立一個apns文件:debug

這個文件就是模擬推送的相關配置文件,若是沒有,咱們也能夠手動來建立:設計

文件中的內容格式以下:

{
    "aps": {
        "alert": {
            "body": "通知",
            "title": "通知來了"
        },
        "category": "myCategory"
    },
    
    "WatchKit Simulator Actions": [
        {
            "title": "First Button",
            "identifier": "firstButtonAction"
                                   
        }
    ],
    
    "customKey": "Use this file to define a testing payload for your notifications. The aps dictionary specifies the category, alert text and title. The WatchKit Simulator Actions array can provide info for one or more action buttons in addition to the standard Dismiss button. Any other top level keys are custom payload. If you have multiple such JSON files in your project, you'll be able to select them when choosing to debug the notification interface of your Watch App."
}

這是一些json格式的數據,其中alert是對推送內容的設置,body會顯示在long-look的標題欄,title會顯示在short-look的標題欄,Actions數組中是對按鈕就行配置,每個按鈕能夠設置一個標題和id,標題用於在推送界面顯示,id用於處理點擊按鈕後觸發的邏輯。

建立好這個,咱們能夠來試着測試一下推送的界面,選擇推送工程,運行便可:

4、long-look的靜態界面和動態界面

        上面提到過,long-look分爲靜態界面和動態界面兩種,當咱們在storyBoard中拉入一個Notification Interface Controller的時候,能夠選擇同時建立動態界面,勾選 Has Dynamic Interface:

這時,在storyBoard中是以下模樣:

咱們在建立一個文件,繼承於WKUserNotificationInterfaceController,並將storyBoard中動態的的推送controller的class設置爲咱們建立的類:

注意,這裏設置的是動態的Interface,也就是上面右邊的controller。以後運行,你會發現效果並無什麼改變,那是由於系統默認會從靜態界面加載推送界面,咱們須要在NotifacationController代碼中作一些操做:

//在NotificationController中重寫下面兩個方法
//這個用於本地推送
override func didReceiveLocalNotification(localNotification: UILocalNotification, withCompletion completionHandler: ((WKUserNotificationInterfaceType) -> Void)) {
        //在這裏作一些動態界面的加載操做,好比能夠根據推送的數據 設置圖片 文字等
        
        //下面這個方法決定是加載靜態的界面仍是動態的界面
        //Custom是加載動態界面
        //default是加載靜態界面
        completionHandler(.Custom)
    }
    
    
//設個用於遠程推送    和上面方法相似
override func didReceiveRemoteNotification(remoteNotification: [NSObject : AnyObject], withCompletion completionHandler: ((WKUserNotificationInterfaceType) -> Void)) {
       
        completionHandler(.Custom)
    }

5、觸發推送點擊事件

        首先,咱們多配置幾個點擊按鈕,在apns文件中以下配置:

"WatchKit Simulator Actions": [
                                   {
                                   "title": "第一",
                                   "identifier": "one"
                                   
                                   },
                                   {
                                   "title": "第二",
                                   "identifier": "two"
                                   
                                   },
                                   {
                                   "title": "第三",
                                   "identifier": "three"
                                   
                                   }
                                   ],

在咱們watch App的InterfaceController中實現以下的方法:

//重寫下面兩個方法來響應點擊事件
//遠程推送的方法
override func handleActionWithIdentifier(identifier: String?, forRemoteNotification remoteNotification: [NSObject : AnyObject]) {
        //經過咱們配置的按鈕id來區分點擊的按鈕 處理響應的邏輯
        print(identifier)
    }
//本地推送的方法
override func handleActionWithIdentifier(identifier: String?, forLocalNotification localNotification: UILocalNotification) {
        
    }

 

專一技術,熱愛生活,交流技術,也作朋友。

——琿少 QQ羣:203317592

相關文章
相關標籤/搜索