鍍金池/ 教程/ iOS/ 通知要點(diǎn)
上下文菜單
更新記錄
文本與標(biāo)簽
使用 iOS 技術(shù)
開發(fā)您的 Watch 應(yīng)用
Watch 應(yīng)用結(jié)構(gòu)
預(yù)覽概要
界面對象
UI 概要
Tables
配置 Xcode 項目
圖片
通知要點(diǎn)
設(shè)置
界面導(dǎo)航
管理你的預(yù)覽界面
管理自定義 Long Look 界面

通知要點(diǎn)

如果你的 iOS 應(yīng)用程序支持本地或者遠(yuǎn)程通知,Apple Watch 會在合適的時候顯示這些通知。當(dāng)一個應(yīng)用程序的本地或者遠(yuǎn)程通知被用戶的 iPhone 收到后,iOS 會決定是否將該通知顯示在 iPhone 或者 Apple Watch 上。對于發(fā)送到 Apple Watch 的通知,系統(tǒng)會隱約的告訴用戶有一個通知了。如果用戶選擇查看通知,系統(tǒng)會先顯示該通知的一個簡短版本,之后才是一個更詳細(xì)的版本。用戶可以選擇忽略該通知,也可以啟動你的 WatchKit 程序,或者通過通知上的有效活動按鈕來觸發(fā)其他操作。

應(yīng)用程序不需要做任何事情來支持通知。系統(tǒng)提供了一個默認(rèn)的通知顯示界面來顯示提醒信息,不過,應(yīng)用程序也能自定義通知界面,包括自定義圖形,內(nèi)容和品牌。

注意:
只有在 iOS 支持它們的情況下,Apple Watch 才能顯示本地或者遠(yuǎn)程通知,有關(guān)如何支持本地和遠(yuǎn)程通知你的 iOS 應(yīng)用程序信息,請查看Local and Remote Notification Programming Guide。

Short-Look 界面

當(dāng)用戶第一次看到通知的時候,系統(tǒng)會顯示一個 short-look 界面,圖 15-1 展示的就是樣子示例。short-look 界面是非自定義并且不能滾動的。系統(tǒng)會使用一個模板來顯示應(yīng)用程序的名字,圖標(biāo)以及存儲在本地通知或者遠(yuǎn)程通知中得標(biāo)題字符。如果用戶繼續(xù)查看通知,系統(tǒng)將會快速的從 short-look 界面轉(zhuǎn)換到 long-look 界面。

圖 15-1 一個 short-Look 界面

http://wiki.jikexueyuan.com/project/apple-watch-programming-guide/images/shortlook_calendar_2x.png" alt="" />

在 short-look 使用的標(biāo)題字符串提供了該通知的一個簡短的意圖指示。對于本地通知,使用 UILocalNotification 對象的 alertTitle 屬性指定該字符串。對于遠(yuǎn)程通知,則在負(fù)載數(shù)據(jù)中的 dictionary(字典)里添加一個 title 的 key。獲取更多關(guān)于添加一個標(biāo)題字符串到你的通知中,請查看 Local and Remote Notification Programming Guide

Long-Look 界面

Long-look 界面是一個能滾動并且顯示通知內(nèi)容以及相關(guān)活動按鈕的屏幕。如果你沒有提供一個自定義的通知界面,Apple Watch 會顯示一個默認(rèn)的界面,包含你應(yīng)用程序的圖標(biāo),通知的標(biāo)題以及提示消息。如果你提供了自定義的通知界面,Apple Watch 則會顯示你自定義的界面。

long-look通知界面由三塊區(qū)域組成:

  • sash(腰帶)區(qū)域是一個包含了應(yīng)用程序圖標(biāo)和名稱的浮層。sash 區(qū)域在默認(rèn)情況下是透明的,但是你也能在你自定義的通知界面修改它的顏色。
  • 內(nèi)容區(qū)域包含了通知的具體信息。對于自定義的界面,你可以配置該區(qū)域位于sash開始位置或者在它的下方。獲取更多關(guān)于如何自定義內(nèi)容區(qū)域,請查看 Custom Notification
  • 按鈕區(qū)域包含了“忽略”按鈕以及其他 iOS 程序注冊的活動按鈕。

圖 15-2 展示了一個包含了兩個活動按鈕的 long-look 通知示例。

圖 15-2 一個 long-look 通知界面

http://wiki.jikexueyuan.com/project/apple-watch-programming-guide/images/longlook_calendar_2x.png" alt="一個 long-look 通知界面" />

點(diǎn)擊應(yīng)用程序圖標(biāo)啟動 WatchKit 程序。點(diǎn)擊程序自定義的活動按鈕則會將選擇的活動發(fā)送到 iOS 應(yīng)用程序或者你得 WatchKit 應(yīng)用程序。前臺活動被發(fā)送到你的 WatchKit 程序和拓展,后臺活動則發(fā)送到你的 iOS 程序。點(diǎn)擊“忽略”按鈕則啥都不做,直接關(guān)閉當(dāng)前通知界面。點(diǎn)擊其他地方則什么效果也沒有。

更多關(guān)于如何為你的應(yīng)用提供自定義 long-look 界面,請見 Custom Notification Interfaces

為通知添加活動按鈕

活動按鈕通過為通知提供封裝響應(yīng)為用戶節(jié)省時間。Apple Watch 借用 iOS 程序注冊的交互通知來顯示活動按鈕,在 iOS 8 以及更高的版本中,應(yīng)用都需要使用 UIUserNotificationSetting 對象來注冊通知的類型。當(dāng)注冊信息的時候,應(yīng)用程序同樣可以注冊一系列自定義通知目錄,Apple Watch 使用這些目錄信息將對應(yīng)的活動按鈕添加到 long-look 界面上。

代碼 15-1 片段展示了如何為一個示例 iOS 程序注冊設(shè)置和目錄。這個方法是被包含 iOS 程序?qū)崿F(xiàn)的,而不是 WatchKit 拓展,并且是在 iOS 程序啟動時委托調(diào)用的。這個方法的是使用 swift 語言寫的,還展示了 “invitation” 目錄的創(chuàng)建和注冊,“invitation” 目錄包含了接受和拒絕會議邀請的活動動作。

代碼 15-1 在包含的 iOS app 中注冊 Actions

func registerSettingsAndCategories() {
    var categories = NSMutableSet()

    var acceptAction = UIMutableUserNotificationAction()
    acceptAction.title = NSLocalizedString("Accept", comment: "Accept invitation")
    acceptAction.identifier = "accept"
    acceptAction.activationMode = UIUserNotificationActivationMode.Background
    acceptAction.authenticationRequired = false

    var declineAction = UIMutableUserNotificationAction()
    declineAction.title = NSLocalizedString("Decline", comment: "Decline invitation")
    declineAction.identifier = "decline"
    declineAction.activationMode = UIUserNotificationActivationMode.Background
    declineAction.authenticationRequired = false  

    var inviteCategory = UIMutableUserNotificationCategory()
    inviteCategory.setActions([acceptAction, declineAction],
        forContext: UIUserNotificationActionContext.Default)
    inviteCategory.identifier = "invitation" 

    categories.addObject(inviteCategory) 

    // Configure other actions and categories and add them to the set...
var settings = UIUserNotificationSettings(forTypes: (.Alert | .Badge | .Sound),
categories: categories)

    UIApplication.sharedApplication().registerUserNotificationSettings(settings)
}

注意:
更多關(guān)于如何在你的 iOS 應(yīng)用程序中配置目錄和活動,請見 Local and Remote Notification Programming Guide

響應(yīng)活動按鈕點(diǎn)擊

當(dāng)用戶點(diǎn)擊活動按鈕時,系統(tǒng)使用注冊 UIUserNotification 對象中的消息來決定如何處理這個動作。動作能在前端和后臺經(jīng)過或者不經(jīng)過驗證被執(zhí)行。不管怎樣,前端和后臺動作的處理是不同的:

對于前臺按鈕動作來說,WKUserNotificationInterfaceController 子類并不處理這個按鈕動作。選中一個前臺按鈕動作將啟動你的應(yīng)用,并為你應(yīng)用的主入口點(diǎn)載入界面控制器。該初始界面控制器負(fù)責(zé)處理所有按鈕動作。這個界面控制器必須實現(xiàn) handleActionWithIderntifier:forRemoteNotificationhandleActionWithIdentifier:forLocalNotification 方法(如果適用的話)來處理按鈕動作。