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

來源:互聯網
上載者:User

標籤:

AppleWatch開發入門七——watchOS中通知的應用一、引言

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

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

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

        在watch中,通知是和iphone同步的,在iphone上的App收到通知的同時,會預設也推送到watch上,基於watch的穿戴性,對使用者來說,它上面的通知資訊將比iphone更加及時。

二、WatchOS通知概覽

        首先,watch上的通知分為兩部分:short-look和long-lock。簡而言之,short-look,可以理解為一個簡單的通知預覽,它會將通知發起的APP和主要標題等資訊展示給你,讓你一目瞭然,當使用者抬起手腕,查看這個通知一定時間,這個短通知就會轉換為long-look通知。short-look的通知介面我們不能夠自訂,系統為我們設計好了模樣,如下:

長通知的介面我們是可以進行一定程度上的自訂的,並且可以添加按鈕等邏輯操作。

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

在long-lock中,介面定義為三個部分,頭部標題列,自訂檢視列和按鈕互動區。頭部的標題列我們不能自訂,它是一個半透明的上面有App表徵圖和名字的橫欄。其下面是我們可以自訂的地區,我們可以在storyBoard中拉入文本和圖片。最下面是一些互動按鈕,其名稱等配置資訊在推送的檔案中定義。

三、如何在模擬器上類比遠程推送

        在watchOS模擬器上,Xcode為我們準備好了一種可以類比測試推送的方式。如果我們建立項目時,選擇了NotifacationScene,則Xcode會預設為我們建立一個apns檔案:

這個檔案就是類比推送的相關設定檔,如果沒有,我們也可以手動來建立:

檔案中的內容格式如下:

{    "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用於處理點擊按鈕後觸發的邏輯。

建立好這個,我們可以來試著測試一下推送的介面,選擇推送工程,運行即可:

四、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)    }
五、觸發推送點擊事件

        首先,我們多配置幾個點擊按鈕,在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) {            }



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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.