iOS8中添加的extensions總結(二)——分享擴展


  • 分享擴展

注:此教程來源於http://www.raywenderlich.com的《iOS8 by Tutorials》

1.准備

這次例子來源於國外的圖片分享網站Imgur.com 

首先現在Imgur上注冊你的帳號,之后按下面的步驟來,點擊settings
選擇applications中新建app,即下面的create your own,這里上面的App是我得Demo
之后點擊register注冊你的應用
輸入你App的名字后選擇第二項,后面輸入你的郵箱與面述,點擊submit
這里請記好App的Client ID和Client secret
到此,即注冊App成功,可以在你的App中調用Imgur的API

 

2.設置分享擴展前

首先打開源碼JMImgure_original,這是我還未設置分享擴展的源碼,你可以自己將下面過程全部演練一遍,但前提是你需要將警告處的Group ID與Client ID更改為你自己的, 否則會報錯!!!
你需要新建你自己的Group ID需要注意的地方如下:
以及下面的源碼部分:
 1 //AppDelegate.m
 2 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 3   // Override point for customization after application launch.
 4 #warning 在這里設置成你的CLIENT ID
 5   [RWTImgurService setClientId:@"CLIENT ID"];
 6   
 7   [[UITabBar appearance] setTintColor:[UIColor imgvueGreen]];
 8   [[UINavigationBar appearance] setTintColor:[UIColor imgvueGreen]];
 9   [[UIProgressView appearance] setTintColor:[UIColor imgvueGreen]];
10   
11   return YES;
12 }
13 
14 //RWTSavedImageService.m
15 - (NSURL *)URLForDirectoryWithName:(NSString *)name {
16 #warning 在這里設置你的APP GROUP ID
17   NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.qq100858433.JMImgvue"];
18   containerURL = [containerURL URLByAppendingPathComponent:name];
19   
20   if (![[NSFileManager defaultManager] fileExistsAtPath:containerURL.path]) {
21     [[NSFileManager defaultManager] createDirectoryAtURL:containerURL withIntermediateDirectories:NO attributes:nil error:nil];
22   }
23   
24   return containerURL;
25 }

 

3.正文

如果已經可以正常運行,那么就可以進行分享擴展的設置
首先依然是添加Share Extension
 
接下來輸入App分享的名字后點擊Finish,點擊Activate,之后為分享擴展也設置App Groups
下面我們來看share文件夾下面的Info文件中的NSExtension項,系統默認如下
需要關心的是NSExtensionActivationRule,Apple默認設置為TRUEPREDICATE,意思就是這個擴展將一直有效,這方便與開發,但是實際中Apple不允許這個值默認如此,App擴展最基本的要求就是輕量,因此如果你直接默認的話,提交到App Store是不會過審的,在這里我們做這樣的修改
意思是每次選擇的附件只能選一個,這里就設置一處即可,更多關於NSExtension請點擊此處: App Extension Keys
 
接下來進行擴展的實現,Apple默認提供的類為SLComposeServiceViewController,它做出來與Sina微博類似

直接使用即可,在對SharViewController編程前,由於我們要使用原有的頭文件和第三方庫,所以將cocoapods的Podfile文件做如下更改,增加你建的擴展項目

 

 1 # Uncomment this line to define a global platform for your project
 2 # platform :ios, '6.0'
 3 inhibit_all_warnings!
 4 
 5 target 'JMImgure' do
 6 
 7 pod 'SDWebImage'
 8 pod 'AFNetworking'
 9 
10 end
11 
12 target 'JMImgure Share' do
13 
14 pod 'SDWebImage'
15 pod 'AFNetworking'
16 
17 end

 

之后在命令行重新運行pod install即可,下面是更改后的ShareViewController.m,有注釋說明

 

 1 //
 2 //  ShareViewController.m
 3 //  JMImgure Share
 4 //
 5 //  Created by JackMa on 15/11/29.
 6 //  Copyright © 2015年 JackMa. All rights reserved.
 7 //
 8 
 9 #import <MobileCoreServices/MobileCoreServices.h>
10 #import "ShareViewController.h"
11 
12 @interface ShareViewController ()
13 
14 @property (nonatomic, strong) UIImage *image;
15 
16 @end
17 
18 @implementation ShareViewController
19 
20 - (void)viewDidLoad {
21   //獲取inputItems,在這里itemProvider是你要分享的圖片
22   NSExtensionItem *firstItem = self.extensionContext.inputItems.firstObject;
23   NSItemProvider *itemProvider;
24   if (firstItem) {
25     itemProvider = firstItem.attachments.firstObject;
26   }
27 
28   //這里的kUTTypeImage代指@"public.image",也就是從相冊獲取的圖片類型
29   //這里的kUTTypeURL代指網站鏈接,如在Safari中打開,則應該拷貝保存當前網頁的鏈接
30   if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeURL]) {
31     [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeURL options:nil completionHandler:^(id<NSSecureCoding>  _Nullable item, NSError * _Null_unspecified error) {
32       if (!error) {
33         //對itemProvider夾帶着的URL進行解析
34         NSURL *url = (NSURL *)item;
35         [UIPasteboard generalPasteboard].URL = url;
36       }
37     }];
38   }
39   if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeImage]) {
40     [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeImage options:nil completionHandler:^(id<NSSecureCoding>  _Nullable item, NSError * _Null_unspecified error) {
41       if (!error) {
42         //對itemProvider夾帶着的圖片進行解析
43         NSURL *url = (NSURL *)item;
44         NSData *imageData = [NSData dataWithContentsOfURL:url];
45         self.image = [UIImage imageWithData:imageData];
46       }
47     }];
48   }
49 }
50 
51 //設置Post是否有效,當你每次輸入內容的時候,都會調用此方法
52 - (BOOL)isContentValid {
53   if (self.image) {
54     return YES;
55   } else {
56     return NO;
57   }
58 }
59 
60 //設置點擊Post后的動作
61 - (void)didSelectPost {
62   [self shareImage];
63 }
64 
65 //在這里設置彈出sheet的底部,要求用SLComposeSheetConfigurationItem的對象
66 - (NSArray *)configurationItems {
67   SLComposeSheetConfigurationItem *configItem = [[SLComposeSheetConfigurationItem alloc] init];
68   configItem.title = @"鏈接將被拷貝到剪貼板";
69   return @[configItem];
70 }
71 
72 - (void)shareImage {
73   //在這里寫圖片上傳的代碼
74 }

 

在運行時選擇Photos后Run

至此,完成了分享擴展最基本的設置。
源碼有原始版本(original)和設置好的share版本供參考

 源碼點擊這里

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM