ios 跨軟件傳輸數(shù)據(jù)之Share Extension的配置與外部數(shù)據(jù)獲然苹尽(二)

配置Share Extension

設(shè)置允許發(fā)送的數(shù)據(jù)類(lèi)型:text紧帕、url、image桅打、mp3是嗜、mp4、pdf挺尾、word鹅搪、excel、ppt


4193251-10ad4991c8cd0188.png

處理Share Extension中的數(shù)據(jù)遭铺。

Share Extension中默認(rèn)都會(huì)有一個(gè)數(shù)據(jù)展現(xiàn)的UI界面丽柿。該界面繼承SLComposeServiceViewController這個(gè)類(lèi)型,如:(這是系統(tǒng)幫我們生成的)

#import <UIKit/UIKit.h>
#import <Social/Social.h>

@interface ShareViewController : SLComposeServiceViewController

@end

當(dāng)然我們也可以自定義新的控制器魂挂,并在Share Extension的plist里做下對(duì)應(yīng)的匹配


1556184296430.jpg

處理Share Extension中的數(shù)據(jù)

分享界面頂部包括了標(biāo)題甫题、取消(Cancel)按鈕和提交(Post)按鈕。然后下面跟著左邊就是一個(gè)文本編輯框涂召,右邊就是一個(gè)圖片顯示控件坠非。那么,每當(dāng)用戶(hù)點(diǎn)擊取消按鈕或者提交按鈕時(shí)果正,都會(huì)分別觸發(fā)下面的方法:

/**
 *  點(diǎn)擊取消按鈕
 */
- (void)didSelectCancel
{
    [super didSelectCancel];
}

/**
 *  點(diǎn)擊提交按鈕
 */
- (void)didSelectPost
{
    [self.extensionContext completeRequestReturningItems:@[] completionHandler:nil];
}

在這兩個(gè)方法里面可以進(jìn)行一些自定義的操作炎码。一般情況下,當(dāng)用戶(hù)點(diǎn)擊提交按鈕的時(shí)候舱卡,擴(kuò)展要做的事情就是要把數(shù)據(jù)取出來(lái)辅肾,并且放入一個(gè)與Containing App(** 容器程序,盡管蘋(píng)果開(kāi)放了Extension轮锥,但是在iOS中extension并不能單獨(dú)存在,要想提交到AppStore要尔,必須將Extension包含在一個(gè)App中提交舍杜,并且App的實(shí)現(xiàn)部分不能為空,這個(gè)包含Extension的App就叫Containing app新娜。Extension會(huì)隨著Containing App的安裝而安裝,同時(shí)隨著ContainingApp的卸載而卸載既绩。)共享的數(shù)據(jù)介質(zhì)中(包括NSUserDefault概龄、Sqlite、CoreData)饲握,要跟容器程序進(jìn)行數(shù)據(jù)交互需要借助AppGroups服務(wù)私杜,下面先來(lái)看看怎么獲取擴(kuò)展中的數(shù)據(jù)。

在ShareExtension中救欧,UIViewController包含一個(gè)ExtensionContext這樣的上下文對(duì)象衰粹,NSExtensionContext的結(jié)構(gòu)比較簡(jiǎn)單,包含一個(gè)屬性和三個(gè)方法笆怠。其說(shuō)明如下:


1556185400640.jpg

類(lèi)的下面還定義了一些通知铝耻,這些通知都是跟宿主程序的行為相關(guān),在設(shè)計(jì)擴(kuò)展的時(shí)候可以根據(jù)這些通知來(lái)進(jìn)行對(duì)應(yīng)的操作蹬刷。其說(shuō)明如下:


圖片.png

從inputItems中獲取數(shù)據(jù)

inputItems是包含NSExtensionItem類(lèi)型對(duì)象的數(shù)組瓢捉。
NSExtensionItem包含四個(gè)屬性:


企業(yè)微信截圖_d43aa636-5fac-444b-a5df-1e09ac64f9d0.png

對(duì)應(yīng)userInfo結(jié)構(gòu)中的NSExtensionItem屬性的鍵名如下:


企業(yè)微信截圖_0bdebaeb-9603-4223-8e2f-ed410030a770.png

為了要取到宿主程序提供的數(shù)組,那么只要關(guān)注loadItemTypeIdentifier:options:completionHandler方法的使用即可办成。有了上面的了解泡态,那么接下來(lái)就是對(duì)inputItems進(jìn)行數(shù)據(jù)分析并提取了,這里以一個(gè)鏈接的分享為例迂卢,改寫(xiě)視圖控制器中的didSelectPost方法兽赁。看下面的代碼:

- (void)didSelectPost
{
    __block BOOL hasExistsUrl = NO;
    [self.extensionContext.inputItems enumerateObjectsUsingBlock:^(NSExtensionItem * _Nonnull extItem, NSUInteger idx, BOOL * _Nonnull stop) {

        [item.attachments enumerateObjectsUsingBlock:^(NSItemProvider * _Nonnull itemProvider, NSUInteger idx, BOOL * _Nonnull stop) {

            if ([itemProvider hasItemConformingToTypeIdentifier:@"public.url"])
            {
                [itemProvider loadItemForTypeIdentifier:@"public.url"
                                                options:nil
                                      completionHandler:^(id<NSSecureCoding>  _Nullable item, NSError * _Null_unspecified error) {

                                          if ([(NSObject *)item isKindOfClass:[NSURL class]])
                                          {
                                              NSLog(@"分享的URL = %@", item);
                                          }

                                      }];

                hasExistsUrl = YES;
                *stop = YES;
            }

        }];

        if (hasExistsUrl)
        {
            *stop = YES;
        }

    }];

    // This is called after the user selects Post. Do the upload of contentText and/or NSExtensionContext attachments.
    // Inform the host that we're done, so it un-blocks its UI. Note: Alternatively you could call super's -didSelectPost, which will similarly complete the extension context.
//    [self.extensionContext completeRequestReturningItems:@[] completionHandler:nil];
}

上面的例子中遍歷了extensionContext的inputItems數(shù)組中所有NSExtensionItem對(duì)象冷守,然后從這些對(duì)象中遍歷attachments數(shù)組中的所有NSItemProvider對(duì)象刀崖。匹配第一個(gè)包含public.url標(biāo)識(shí)的附件(具體要匹配什么資源,數(shù)量是多少皆有自己的業(yè)務(wù)所決定)拍摇。

  • 注意:在上面代碼中注釋了[self.extensionContext completeRequestReturningItems:@[] completionHandler:nil];這行代碼亮钦,主要是使到視圖控制器不被關(guān)閉,等到實(shí)現(xiàn)相應(yīng)的處理后再進(jìn)行調(diào)用該方法充活,對(duì)分享視圖進(jìn)行關(guān)閉蜂莉。

ios 跨軟件傳輸數(shù)據(jù)之系統(tǒng)Share Extension創(chuàng)建與分享(一)
ios 跨軟件傳輸數(shù)據(jù)之Share Extension的配置與外部數(shù)據(jù)獲取(二)
ios 跨軟件傳輸數(shù)據(jù)之Share Extension將分享數(shù)據(jù)傳遞給容器程序(三)
ios 跨軟件傳輸數(shù)據(jù)之Share Extension容器程序數(shù)據(jù)處理與上線(四)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末混卵,一起剝皮案震驚了整個(gè)濱河市映穗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌幕随,老刑警劉巖蚁滋,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡辕录,警方通過(guò)查閱死者的電腦和手機(jī)睦霎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)走诞,“玉大人副女,你說(shuō)我怎么就攤上這事◎己担” “怎么了碑幅?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)塞绿。 經(jīng)常有香客問(wèn)我沟涨,道長(zhǎng),這世上最難降的妖魔是什么位隶? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任拷窜,我火速辦了婚禮,結(jié)果婚禮上涧黄,老公的妹妹穿的比我還像新娘篮昧。我一直安慰自己,他們只是感情好笋妥,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布懊昨。 她就那樣靜靜地躺著,像睡著了一般春宣。 火紅的嫁衣襯著肌膚如雪酵颁。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天月帝,我揣著相機(jī)與錄音躏惋,去河邊找鬼。 笑死嚷辅,一個(gè)胖子當(dāng)著我的面吹牛簿姨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播簸搞,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼扁位,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了趁俊?” 一聲冷哼從身側(cè)響起域仇,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤迄沫,失蹤者是張志新(化名)和其女友劉穎吁讨,沒(méi)想到半個(gè)月后东跪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體唯笙,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡黔宛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年淤击,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了酿秸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绷雏。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡爽雄,死狀恐怖蝠检,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情挚瘟,我是刑警寧澤叹谁,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站乘盖,受9級(jí)特大地震影響焰檩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜订框,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一析苫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧穿扳,春花似錦衩侥、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至履羞,卻和暖如春峦萎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背忆首。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工爱榔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人糙及。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓详幽,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親丁鹉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子妒潭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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