如果你的 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。
當(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 界面是一個能滾動并且顯示通知內(nèi)容以及相關(guān)活動按鈕的屏幕。如果你沒有提供一個自定義的通知界面,Apple Watch 會顯示一個默認(rèn)的界面,包含你應(yīng)用程序的圖標(biāo),通知的標(biāo)題以及提示消息。如果你提供了自定義的通知界面,Apple Watch 則會顯示你自定義的界面。
long-look通知界面由三塊區(qū)域組成:
圖 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
當(dāng)用戶點(diǎn)擊活動按鈕時,系統(tǒng)使用注冊 UIUserNotification 對象中的消息來決定如何處理這個動作。動作能在前端和后臺經(jīng)過或者不經(jīng)過驗證被執(zhí)行。不管怎樣,前端和后臺動作的處理是不同的:
對于前臺按鈕動作來說,WKUserNotificationInterfaceController 子類并不處理這個按鈕動作。選中一個前臺按鈕動作將啟動你的應(yīng)用,并為你應(yīng)用的主入口點(diǎn)載入界面控制器。該初始界面控制器負(fù)責(zé)處理所有按鈕動作。這個界面控制器必須實現(xiàn) handleActionWithIderntifier:forRemoteNotification 和 handleActionWithIdentifier:forLocalNotification 方法(如果適用的話)來處理按鈕動作。