? Watch開發(fā)學習 (三)

Watch應用的數(shù)據(jù)傳輸-與iPhone以及網(wǎng)絡(luò)(WatchOS 1)

iPhone App、WatchKit Extension和Watch App之間的關(guān)系

自iOS8起Apple推出一個新的概念-App Extension,可以讓開發(fā)者開發(fā)第三方的鍵盤悟泵、通知中心(Today Widget)等弦赖。


WatchKit Extension是iPhone App和Watch App通信的橋梁,下圖展示了三者間的關(guān)系:

  1. WatchKit Extension(Extension)和Watch App(Host App)間的通信
    在Extension中可以獲取到Watch App界面元素的數(shù)據(jù)接口WKInterfaceObject(非控件View本身将谊,更接近于Model),通過修改WKInterfaceObject的數(shù)據(jù),來修改對應Watch App的界面旗笔。另外通過Xcode將Watch App控件的響應事件綁定到Extension中,可以實現(xiàn)Watch操作響應邏輯的處理拄踪。

  2. WatchKit Extension(Extension)和iPhone App(Containing App)的通信

    1. 共享存儲空間

      Extension和iPhone App之間的一種通信方式是讀寫同一塊共享存儲空間蝇恶,達到數(shù)據(jù)交換的目的(見下圖)。需要注意的是Extension和iPhone App屬于不同的進程惶桐,要共享存儲空間撮弧,需要在工程對應的target中同時打開App Groups的權(quán)限,并選擇共享的組名(打開權(quán)限需要在Xcode中配置開發(fā)者賬號和密碼姚糊,同時本地需要有對應的開發(fā)證書贿衍,本文后面有介紹)。![]
      (http://git.devzeng.com/images/apple_watch_dev_glance/share_container.png)

    2. 直接進行通信(在WatchOS2中更加推薦)

      Extension和iPhone App另外一種通信方式是Extension主動向iPhone App發(fā)起請求救恨,進行某種操作贸辈,或者請求數(shù)據(jù)(場景:Watch 收到新郵件通知后,點擊已讀按鈕肠槽,在iPhone App上置已讀)擎淤。

      WatchKit Extension中向iPhone App發(fā)送請求:
      + (BOOL)openParentApplication:(NSDictionary * nonnull)userInfo reply:(void (^ nullable)(NSDictionary * nonnull replyInfo, NSError * nullable error))reply;
      在iPhone App的AppDelegate中實現(xiàn)如下方法響應Watch App的請求:
      - (void)application:(UIApplication * nonnull)application handleWatchKitExtensionRequest:(NSDictionary * nullable)userInfo reply:(void (^ nonnull)(NSDictionary * nullable replyInfo))reply;

      在Github上找到一個叫做MMWormhole的開源庫,它是專門用于Container App與Extension間傳遞消息署浩,整個項目非常簡潔實用揉燃。

      在WatchOS2中,APPLE公司特地做了一個類似于MMWormhole的framework叫做WatchConnectivity其中有一個最為關(guān)鍵的類叫做WCSession:NSObject

      這里貼出WCSession的一些代碼和解釋:(只支持iOS9及更新版本,在ContainerApp和Extension中使用一致)
      @interface WCSession : NSObject

      硬件是否支持:+ (BOOL)isSupported;

      單例對象:+ (WCSession *)defaultSession;

      擁有的Delegate:@property (nonatomic, weak, nullable) id <WCSessionDelegate> delegate;(在這里需要)

      delegate中使用較多的有:(接收信息后的一些處理)
      - (void)session:(WCSession * ) session didReceiveMessage:(NSDictionary<NSString * , id> *)message;
      - (void)session:(WCSession * )session didReceiveMessage:(NSDictionary<NSString * , id> * )message replyHandler:(void(^)(NSDictionary<NSString * , id> *replyMessage))replyHandler;

      激活對象:- (void)activateSession;(在APP生命周期中激活越早越好)

      發(fā)送信息:
      - (void)sendMessage:(NSDictionary<NSString *, id> *)message replyHandler:(nullable void (^)(NSDictionary<NSString *, id> *replyMessage))replyHandler errorHandler:(nullable void (^)(NSError *error))errorHandler;
      - (void)sendMessageData:(NSData *)data replyHandler:(nullable void (^)(NSData *replyMessageData))replyHandler errorHandler:(nullable void (^)(NSError *error))errorHandler;

      一般的使用過程:

      if ([WCSession isSupported]) {
      WCSession *session = [WCSession defaultSession];
      session.delegate = self;
      [session activateSession];
      }
      //接下來開始send或者receive
      

Watch App的啟動過程和生命周期

當用戶在Apple Watch上運行應用時筋栋,用戶的iPhone會自行啟動相應的WatchKit應用擴展炊汤。通過一系列的信號交換,Watch App和WatchKit Extension互相連接弊攘,因此消息能夠在二者之間流通抢腐,直到用戶停止與應用進行交互為止。此時襟交,iOS將暫停應用擴展的運行迈倍。

在啟動的過程中,WatchKit自動為當前界面創(chuàng)建相應的界面控制器捣域。如果用戶正在查看glance啼染,WatchKit創(chuàng)建出來的界面控制器將與glance相連接宴合。如果用戶直接啟動應用,WatchKit將從應用的主故事板文件中加載初始界面控制器迹鹅。無論哪種情況卦洽,WatchKit應用擴展都提供一個名為WKInterfaceController的子類來管理相應的界面。

  1. 啟動Watch App的過程



    當用戶在Apple Watch上與應用進行交互時斜棚,WatchKit應用擴展將保持運行阀蒂。如果用戶明確退出應用或者停止與Apple Watch進行交互,那么iOS將停用當前界面控制器弟蚀,并暫停應用擴展的運行蚤霞。與Apple Watch的互動是非常短暫的,因此這幾個步驟都有可能在數(shù)秒之間發(fā)生义钉。所以昧绣,界面控制器應當盡可能簡單,并且不要運行長時任務捶闸。重點應當放在讀取和顯示用戶想要的信息上來滞乙。

  2. 界面控制器的生命周期
    當應用啟動時,WatchKit框架自行創(chuàng)建了相應的WKInterfaceController對象并調(diào)用initWithContext:方法鉴嗤。使用該方法來初始化界面控制器捕犬,然后加載所需的數(shù)據(jù)艰山,最后設(shè)置所有界面對象的值。


    在應用生命周期的不同階段啊鸭,iOS將會調(diào)用WKInterfaceController對象的相關(guān)方法來讓您做出相應的操作发绢。WKInterfaceController的幾個主要的方法說明如下:

    • initWithContext:這個方法用來準備顯示界面硬耍。借助它來加載數(shù)據(jù),以及更新標簽边酒、圖像和其他在Storyboard場景上的界面對象经柴。
    • willActivate:這個方法可以讓您知道該界面是否對用戶可視。借助它來更新界面對象墩朦,以及完成相應的任務坯认,完成任務只能在界面可視時使用。
    • didDeactivate:使用didDeactivate方法來執(zhí)行所有的清理任務氓涣。例如牛哺,使用此方法來廢止計時器、停止動畫或者停止視頻流內(nèi)容的傳輸劳吠。您不能在這個方法中設(shè)置界面控制器對象的值引润,在本方法被調(diào)用之后到willActivate方法再次被調(diào)用之前,任何更改界面對象的企圖都是被忽略的痒玩。

說明:glances不支持動作方法淳附。單擊應用glance始終會啟動應用议慰。

參考資料初識Apple Watch應用開發(fā)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市奴曙,隨后出現(xiàn)的幾起案子别凹,更是在濱河造成了極大的恐慌,老刑警劉巖缆毁,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件番川,死亡現(xiàn)場離奇詭異,居然都是意外死亡脊框,警方通過查閱死者的電腦和手機颁督,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浇雹,“玉大人沉御,你說我怎么就攤上這事≌蚜椋” “怎么了吠裆?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長烂完。 經(jīng)常有香客問我试疙,道長,這世上最難降的妖魔是什么抠蚣? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任祝旷,我火速辦了婚禮,結(jié)果婚禮上嘶窄,老公的妹妹穿的比我還像新娘怀跛。我一直安慰自己,他們只是感情好柄冲,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布吻谋。 她就那樣靜靜地躺著,像睡著了一般现横。 火紅的嫁衣襯著肌膚如雪漓拾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天戒祠,我揣著相機與錄音晦攒,去河邊找鬼。 笑死得哆,一個胖子當著我的面吹牛脯颜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贩据,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼栋操,長吁一口氣:“原來是場噩夢啊……” “哼闸餐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起矾芙,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤舍沙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后剔宪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拂铡,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年葱绒,在試婚紗的時候發(fā)現(xiàn)自己被綠了感帅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡地淀,死狀恐怖失球,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情帮毁,我是刑警寧澤实苞,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站烈疚,受9級特大地震影響黔牵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜爷肝,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一荧止、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧阶剑,春花似錦、人聲如沸危号。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽外莲。三九已至猪半,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間偷线,已是汗流浹背磨确。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留声邦,地道東北人乏奥。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像亥曹,于是被迫代替她去往敵國和親邓了。 傳聞我的和親對象是個殘疾皇子恨诱,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 目錄 1. 文檔 WatchKit Programming Guide(中譯) Apple Watch Human...
    XLsn0w閱讀 1,946評論 1 5
  • WatchOS App架構(gòu)與更新 (WatchOS 2) 前言 WatchOS2出現(xiàn)后,改變了很多東西: 其中最大...
    BBH_Life閱讀 975評論 0 1
  • 寫在前面 WatchKit Apple提供的開發(fā)專題頁面如下: https://developer.apple.c...
    ch32053閱讀 2,674評論 1 15
  • 許仙才知素貞與小青俱是妖類骗炉,耳邊似起了幾千道霹靂照宝,直炸得自己頭暈目眩,頭昏眼花句葵。他腳步虛浮地踏上家中小道厕鹃,正走到庭...
    也難綰系閱讀 501評論 0 1
  • 嗯,閨女泥丸暑假回來啦乍丈!雖然我還沒見到那真實的男票剂碴。不過,感覺很靠譜噢诗赌。從你的狀態(tài)里就知道了汗茄。擊掌呵呵噠(? ??...
    溫馨Unicorn閱讀 210評論 0 0