天天看點

iOS10中Messages獨立應用與擴充插件詳析

        messages是ios系統中原生的資訊應用,其既可以通過營運商網絡發送短資訊,也可以通過網際網路進行類似微信類社交軟體的即時聊天。但是由于其封閉性與功能的單一,使用其進行即時聊天的使用者并不多。随着ios10系統的推出,或許可以改變這一現狀。在ios10中,messages的功能被擴充的十分強大,通過messages,使用者可以分享圖檔,音樂,視訊,可以随手塗鴉,使用自定義的表情包,可以進行apple pay支付,購物,甚至可以在messages中玩遊戲。并且,上面所提到的這些功能都全面開發出了接口供開發者進行開發與擴充。

        在ios10中,開發者可以進行與messages相關的開發有兩類:獨立的messages應用與messages應用擴充。其中,messages應用擴充需要依附一個宿主app而存在。無論哪種類型的messages應用,其都又分為兩類,stickerpicks(表情包)與imessage apps(messages應用)。

        sticker picks可謂是ios10中一個十分強大的新功能。在ios10系統的iphone上,messages應用中會内嵌一個message app store,使用者可以直接從裡面下載下傳針對于messages的獨立表情包和獨立第三方應用。開發者也可以獨立開發表情包釋出到這個message app store中。

        開發sticker picks表情包十分簡單,開發者可以不用寫一句代碼,将整理好的表情進行打包送出即可完成。使用xcode8建立一個新的工程,選擇sticker pack application模闆,如下圖所示:

iOS10中Messages獨立應用與擴充插件詳析

建立出工程後,可以發現模闆中沒有任何代碼檔案,隻有一個stickers.xcstickers包。将準備好的表情包圖檔導入這個stickers中,其中支援靜态圖檔,也支援動态表情gif圖檔。關于導入的圖檔,有如下幾條規則:

1.圖檔檔案的格式必須是png、apng、gif或者jpeg。

2.單個檔案的大小不能超過500kb。

3.最優的效果是當圖檔尺寸在100*100到206*206之間。

注意:在提供圖檔的時候,開發者隻需要提供@3倍圖即可,即最優尺寸在300*300到618*618之間的圖檔。系統會自動生成@2與@1倍圖。

        開發的表情包會顯示在messages應用的工具中,需要注意,在表情清單的排版中,每個表情縮略圖隻支援3種尺寸的排版,對應的尺寸分别如下:

small類型:100*100

medium類型:136*136

large類型:206*206

在xcode中,可以對要使用的模闆進行選擇,如下圖:

iOS10中Messages獨立應用與擴充插件詳析

在模拟器中運作工程,messages中效果如下圖:

iOS10中Messages獨立應用與擴充插件詳析
iOS10中Messages獨立應用與擴充插件詳析

和普通ios應用程式一樣,将裝置選擇為generic ios device後直接archives即可将表情包送出到appstore,稽核通過後,即可在message app store中進行下載下傳。

小提示:其實stickerpicks翻譯成表情包并不合适,其更有一層貼紙的概念。實際上其也确實有貼紙的功能,在messages應用中,使用者可以通過長按移動手勢,來将某個sticker添加在另一個sticker上面。如下圖:

iOS10中Messages獨立應用與擴充插件詳析

        擴充表情包與獨立表情包最大的不同在于擴充需要寄宿于某個宿主app中,建立擴充target,選擇sticker pick extension,如下圖,之後和獨立表情包開發過程一緻。

iOS10中Messages獨立應用與擴充插件詳析

        stickerpicks的圖示和宿主app并不共用,其需要一套獨特尺寸的icon,尺寸如下:

iOS10中Messages獨立應用與擴充插件詳析

效果如下圖所示:

iOS10中Messages獨立應用與擴充插件詳析

        和stickerpicks表情包一樣,messages app也分為獨立應用與擴充兩種。其實它們的開發思路和方法完全一緻,隻是有無宿主app的差別。

        開發messages app需要使用到ios中引入的一個新的開發架構messages。messages比較簡單,其中涉及到的類并不十分多,下圖中概述了其中重要的類和之間的關系:

iOS10中Messages獨立應用與擴充插件詳析

msmessageappviewcontroller:這個類messages app的基礎視圖控制器類,其繼承自uiviewcontroller,但其中添加了許多messages app相關的聲明周期方法。

msconversation:描述一個會話執行個體。

mssticker:表情貼圖執行個體。

msmessage:在messages app之間進行傳遞的消息實體。

msmessagelayout:抽象類,其并沒有實作任何方法,有子類實作。

msmessagetemplatelayout:用于對消息實體msmessage進行布局排版。

msstickerborwserviewcontroller:用于建立表情包視圖控制器。

msstickerborwserview:表情包視圖容器,類似collectionview。

msstickerview:表情承載視圖。

        使用xcode建立一個messages app工程如下:

iOS10中Messages獨立應用與擴充插件詳析

其會自動生成一個messagesviewcontroller類,這個類就是此messages app的主界面視圖控制器。需要注意,messages app的視圖控制器都分為兩種狀态,分别為compact(緊湊的)和expanded(擴寬的)。并且在這兩種狀态進行切換時,視圖的底部的工具欄和頭部的導航欄也會交替出現,這導緻了即使是使用自動布局,依然無法完美的解決messages app布局的統一性,需要手動進行調整處理,後面會介紹到。

        在messagesviewcontroller類中添加其他視圖控件,大部分ios app開發中可以使用的ui控件這裡都可以使用,但是有一點需要注意,對于可以彈出鍵盤的ui控件,例如uitextview與uitextfield,當messages app界面處理compact模式時,鍵盤是不能彈出的,隻有當界面處于expanded模式時,鍵盤才被允許彈出。

        為了使messages app的界面在任何模式下都能保持統一,需要手動對其中視圖限制進行修改,示例代碼如下:

iOS10中Messages獨立應用與擴充插件詳析
iOS10中Messages獨立應用與擴充插件詳析

        由于msmessagesappviewcontroller類是繼承于uiviewcontroller類的,是以uiviewcontroller中的視圖控制器切換方法這裡都可以直接使用,msmessagesappviewcontroller中供開發者進行調用的屬性和方法如下:

msmessagesappviewcontroller中新增加的聲明周期方法如下:

        msconversation類用來描述會話,msmessagesappviewcontroller中内置msconversation對象,開發者可以用它來進行消息傳遞,示例代碼如下:

msconversation支援發送的消息分為4中,分别為文本消息,表情貼圖消息,檔案消息和message實體消息,上面代碼都做了示範。msconversation中重要屬性和方法解析如下:

效果圖如下:

iOS10中Messages獨立應用與擴充插件詳析
iOS10中Messages獨立應用與擴充插件詳析
iOS10中Messages獨立應用與擴充插件詳析

        msmessage是messages app定義的一種消息實體,其可以用來在messages app間傳遞資訊,因為它的存在,通過messages用用實作休閑對戰遊戲,棋牌遊戲變得十分容易,開發者不需要在寫即時通信連結,隻需設計遊戲邏輯即可。msmessage不能夠完全自定義ui,但是messages架構中的msmessagetemplatelayout類可以對其ui進行簡單的配置。

        msmessage類中常用的屬性和方法如下:

        前面介紹,msmessage類中并沒有定義ui,ui部分需要配合msmessagelayout類來配置。需要注意,msmessagelayout類是一個抽象類,apple設計的目的可能是為了以後便于擴充多個消息布局模闆。目前,開發者隻需要使用msmessagetemplatelayout類來對消息實體進行布局。

        msmessagetemplatelayout類中可以配置的屬性如下:

        在制作表情包sticker picks的時候,開發者不需要編寫一行代碼,實際上如果要通過代碼來開發表情包也是沒有問題的,這裡需要用到的一個類就是mssticker類,簡單了解,mssticker類對象就是一個表情貼圖,但是它不是一個view視圖,若想在messages app中看到這個表情貼圖,還需要借助一個類msstickerview,msstickerview是用于承載表情貼圖的視圖類,使用者選中它後,可以在messages應用中進行發送。

        首先,mssticker類建立方法如下:

msstickerview類解析如下:

需要注意,msstickerview如果加載的是gif類型的表情貼圖,預設不會播放動畫,開發者可以調用開始動畫的方法來進行gif動畫的播放。

        其實通過前面的内容,已經可以自定義開發一個表情包messages app了,但是還有一個視圖控制器類msstickerbrowserviewcontroller,這個類可以更加簡單方面的建立表情包視圖控制器。要了解msstickerbrowserviewcontroller類,首先應該先了解msstickerbrowserview類,這兩個類的關系十分類似于uitableviewcontroller與uitableview類的關系。msstickerbrowserview是用于展示表情視圖的容器,其繼承自uiview,但卻和uicollectionview十分類似,其中方法解析如下:

msstickerbrowserview的資料填充需要在代理方法中實作,如下:

再看msstickerbrowserviewcontroller就十分容易了,它隻是将msstickerbrowserview封裝在了一個uiviewcontroller中,并且這個uiviewcontroller遵守了msstickerbrowserviewdatasource協定,開發者直接實作協定方法即可。

        下面是apple對messages app的定位和一些建議,還有我的一些了解:

1.確定應用是有用的并且易于了解。

2.功能要聚焦單一,不要組合多種功能在一起。

3.messages通常用在雙人非正式的交談中,應從這裡入手,讓交流更加有趣。

4.messages的最大兩點是分享,利用這一點出發開發messages app。

5.插圖内容布局要注意,系統會自動将内容變為圓角,不要把重要的資訊放在角落。

6.注意,在緊湊模式下,messages app的界面是不允許水準滾動的。

7.同樣,在緊湊模式下,messages app不允許鍵盤輸入。

專注技術,熱愛生活,交流技術,也做朋友。 ——珲少 qq群:203317592

繼續閱讀