試圖在Watch上加入合適的功能項目,為此尋找了些相關Apple Watch的資料,大致上寫個筆記心得讓自己Review一下.
首先Apple Watch在UI上分為三個部分:
1. Interface - WatchKit Apps
2. Notification - Receive APNS
3. Glance - Something like Newstand
1. Interface
由App icon點擊後所呈現的畫面,基本上可以與使用者進行一些互動,例如收件/ 回覆簡易訊息, 都可以透過Watch做到, 但原則是不要在 Watch上做複雜的事情,不僅自己寫Code寫得很累, 使用者也會沒有那個耐性去使用.
在WatchKit當中並不能直接存取原本存在於iOS App的class,因此如果想要透過原本在App的Class去進行一些事情的話有兩種方式: (1). WKInterfaceController.openParentApplication
- 採用這個方式他會呼叫AppDelegate的handleWatchKitExtensionRequest
如此就可以在AppDelegate當中進行操做.
PS. 記得要將Code寫在beginBackgroundTaskWithName & endBackgroundTask之間, 不然會發現當App進入Background就不能正確Working了,別將想要做的事情寫在beginBackgroundTaskWithName的block裡面,那是例外區... 當初單字沒看清楚被騙了一陣子 哭哭.
(2). 將原本的Class在拉入WatchKit Extension當中
- 這個作法呢, 我除了將JSON/ XML Parser弄進來之外, 其他的我都透過第一個辦法跟App做溝通,不過基於Code的乾淨與維護的方便性來想,我認為還是第一個辦法比較好. 純粹個人認為.
在Interface Controller上還有一點應該是比較重要的, 就是語音的部分.
首先在 Watch上是沒有鍵盤輸入這回事情的,因此想要做回覆的話Apple提供大約三種類型
- icon image
- animate image
- text
原則上, 其實在三個都是 text, icon / animate image都是UTF-8特殊字元,text的來源分為預設字串以及語音辨識,而要使用這些東西都非常的簡單,WatchKit已經幫你把東西包好了,你只要presentController就好,以下Code部分:
let defaultMessage = [
"已收到,將會為您處理",
"感謝您的提問,將會盡快回覆您",
"已收到您的請求"
]
self.presentTextInputControllerWithSuggestions(defaultMessage, allowedInputMode: WKTextInputMode.AllowAnimatedEmoji) { (result) -> Void in
}
我覺得在Interface上要注意的大約就是這樣, 其他的其實稍微看些Controller的method or Delegate大致上就可以知道怎麼去操作了.
2. Notification
在這部分其實也沒有太困難的地方, 比較有需要注意的地方在於Long look interface怎麼加入UIButton,這並不是像模擬機那樣寫在APNS上就有了, 在實機上如果要在Notification中加入Button必須要在Application當中註冊Notfication Action,並且對應好category這樣才可以,以下是官方範例Code:
var categories = NSMutableSet()
var acceptAction = UIMutableUserNotificationAction()
acceptAction.title = NSLocalizedString("Accept", comment: "Accept invitation")
acceptAction.identifier = "accept"
acceptAction.activationMode = UIUserNotificationActivationMode.Foreground
acceptAction.authenticationRequired = false
- // part 2
- var inviteCategory = UIMutableUserNotificationCategory()
inviteCategory.setActions([acceptAction],
forContext: UIUserNotificationActionContext.Default)
inviteCategory.identifier = "invitation"
categories.addObject(inviteCategory)
// Configure other actions and categories and add them to the set...
// part 3
var settings = UIUserNotificationSettings(forTypes: (.Alert | .Badge | .Sound),
categories: categories)
UIApplication.sharedApplication().registerUserNotificationSettings(settings)
稍微解釋一下上面的程式碼到底在做什麼,
part 1的部分在建立宣告Button, activationMode記得要設為Foreground,因為background的handle是在AppDelegate,foreground的handle則是在WatchKit的InterfaceController.
part2的地方則是宣告這個Action是屬於哪個Category, Category是透過APNS再傳送的時候加入一個Category : "category name"來做定義,如果有定義就會呼叫相對應的Action,所以這個要設好,不然Button會跑不出來.用上述的Code來做說明,如果APNS過來的資料是:
[aps: {
alert = "Push test.",
badge = 1,
category = "invitation",
}]
那就會看到Watch上出現Button,而如果APNS的資料為:
[aps: {
alert = "Push test.",
badge = 1,
}]
那你就算AppDelegate當中有寫以上的Code也是不會在Watch上看到Button的,因為category沒有對應到.
part 3則是完成這個設定,基本上就是那樣子不會變
以上做完就可以再WatchKit的Notification上加入Button囉!
3. Glance
誒都.... 這個沒有研究到, 基本上他算是Today Extension的延伸吧,個人感覺.
相關資料:
沒有留言:
張貼留言