iOS 9之Shared Links Extension(Safari Extensibility)

金田 (github示例源码)html

     在以前的Blog中有介绍了关于Safari Extensibility的 Content Blocking部分,详情能够看这里 --- iOS 9之Safari广告拦截器(Content Blocker),今天咱们就来看看关于 Safari的另外一个扩展点(插件)- Shared Links。ios

     好,先来看一下如何使用该功能:git

  1. 打开Safari,点击书签按钮 (像一本打开的书同样的按钮)

图1 书签按钮github

  1. 选择 “@”共享分栏,就能够看到当前设备中的全部Shared Links 啦

图2 Shared Links示例微信

  1. 若是没有看到本身App的共享连接,能够点击右下角的 Subscriptions 按钮,去里面激活本身的App就能够了。

图3 Subscriptions网络

 

4. 选择一个连接就能够直接在Safari中打开了,就是这么简单 Lapp

从以上的操做步骤和截图中能够看出,Shared Links就如它的名字同样,共享连接,像咱们在QQ,微信(崇洋媚外一点儿的Facebook,Twitter)等IM软件中,常常会有朋友,同事发过来的各类网络连接,做为IT民工也常常要看的各类最新技术网页等,过了一段时间以后,若是还想继续查阅,基本就只能去翻找历史记录 or Safari 书签(固然若是当初你有手动加入的话)。如今咱们有了 Shared Links后,就能够不用肿么费体力啦,一切就是这么自动智能~懒人老是有懒人本身的方法~ide

     总结一下,Content Blocking是用来屏蔽内容的,Shared Links则是用来分享内容滴。ui

     进入正题,开始动手!url

    首先须要在工程(扩展不能独立存在,须要一个Containing App,哪怕是空的也能够,只要你不嫌丑)中建立一个扩展,以下图选择Shared Links Extension。

图4 Extension模板

系统将默认生成RequestHandler类文件, 在RequestHandler中添加方法- (void)beginRequestWithExtensionContext:(NSExtensionContext *)context,当在Safari中 打开“@”共享分栏时,iOS 系统就会自动调用此方法来将你须要分享的连接添加进去。

例子以下:

- (void)beginRequestWithExtensionContext:(NSExtensionContext *)context {

    NSExtensionItem *extensionItem = [[NSExtensionItem alloc] init];

    extensionItem.userInfo = @{ @"uniqueIdentifier": @"uniqueIdentifierForSampleItem", @"urlString": @"http://www.kdanmobile.com", @"date": [NSDate date] };

    extensionItem.attributedTitle = [[NSAttributedString alloc] initWithString:@"KdanMobile title"];

    extensionItem.attributedContentText = [[NSAttributedString alloc] initWithString:@"KdanMobile description text"];

    [context completeRequestReturningItems:@[ extensionItem ] completionHandler:nil];

}

    由上能够看出,咱们分享的每一个连接(Link)都对应着一个NSExtensionItem对象,其中 attributedTitle 为Link显示在 Shared Links 列表中的标题,attributedContentText为Link描述内容,userInfo 为须要分享的连接Link,因此若是须要共享多个Link,咱们只须要建立对应的多个NSExtensionItem对象就能够了。

先上一个Demo运行截图:

图5 例子截图

小细节

1. 若是须要修改App扩展名,只须要在Info.plist中修改Bundle display name对应的值,以下图所示:

    <key>CFBundleDisplayName</key>

    <string>Shared Links</string>

2. 若是想把SharedLinks列表左边的空白图标换一种样式,例如公司Logo 之类,只须要添加以下代码:

extensionItem. = @[ [[NSItemProvider alloc] initWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"custormlogo" withExtension:@"png"]] ]; 

3. 扩展和Containing App各自拥有本身的数据容器,虽然扩展内嵌在Containing App的内部,但在默认状况下,他们彼此之间并不能互访数据。为了实现Containing App与扩展的数据共享,咱们须要用到App Group。当开启App Group后,就可使用NSUserDefaults方法访问共享区域,以下述代码,注意不是 [NSUserDefaults standardUserDefaults]:

NSUserDefaults *sharedUserDefault = [[NSUserDefaults alloc]

initWithSuiteName:@"group.com.kdanmobile.ExtensionDemo"];

也可使用NSFileManager的containerURLForSecurityApplicationGroupIdentifier 方法访问共享数据区:

NSURL *containerURL = [[NSFileManager defaultManager]

containerURLForSecurityApplicationGroupIdentifier:@"group.com.kdanmobile.ExtensionDemo"];

 

参考连接

https://developer.apple.com/videos/wwdc/2015/?id=511

https://developer.apple.com/library/prerelease/ios/releasenotes/General/WhatsNewInSafari/Articles/Safari_9.html

 

 

版权全部,转截须注明做者(金田)及原文出处(原文

相关文章
相关标签/搜索