iOS 9之Shared Links Extension(Safari Extensibility)

金田 (github示例源码)

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

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

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

iOS 9之Shared Links Extension(Safari Extensibility)

图1 书签按钮

  1. 选择 “@”共享分栏,就可以看到当前设备中的所有Shared Links 啦

iOS 9之Shared Links Extension(Safari Extensibility)

图2 Shared Links示例

  1. 如果没有看到自己App的共享链接,可以点击右下角的 Subscriptions 按钮,去里面激活自己的App就可以了。

iOS 9之Shared Links Extension(Safari Extensibility)

图3 Subscriptions

4. 选择一个链接就可以直接在Safari中打开了,就是这么简单 L

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

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

进入正题,开始动手!

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

iOS 9之Shared Links Extension(Safari Extensibility)

图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运行截图:

iOS 9之Shared Links Extension(Safari Extensibility)

图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

版权所有,转截须注明作者(金田)及原文出处(原文

上一篇:AJAX原理及优缺点


下一篇:无插件Vim编程技巧