利用iOS 10的Today小工具

CIZO是一个很棒的应用程序。 它是由粉丝们为粉丝创建的,它为您的基于iOS的设备(包括电影,游戏,时尚,音乐会,技术等)提供了精选的“最佳内容”,从而节省了用户在互联网上搜索最新视频预告片的麻烦。 , 和更多。

我们喜欢它的内容,设计和动画。 但是CIZO存在内容交付问题。 还没有实现现有的机制(例如“推送通知”)来提醒用户新视频的到来。 因此,如果用户每天不检查CIZO,可能会错过新的预告片。

因此,我们不禁要问,是否有另一种方法可以让用户在不打开应用程序的情况下了解新内容?

iOS 10提供了解决方案

在安装iOS 10之后,首先要注意的是Apple从锁定屏幕上删除了“滑动解锁”功能。 现在,如果您尝试按照习惯的方式滑动屏幕,则会看到一个锁屏,其中充满了今日小部件。 当您要查看天气,标题或公交信息时,这非常方便,因为您无需解锁手机即可看到。 只需快速滑动即可。

当我们看到iOS预览时,CIZO问题的解决方案就变得清晰了:如果我们添加一个CIZO Today小部件,该小部件可以显示和启动该小部件的视频播放,那该怎么办?

实施CIZO Today小部件

现在,让我们引导您完成在“今日”屏幕上创建和展示窗口小部件的过程。

添加目标

第一步,我们需要向CIZO应用程序本身添加一个新目标。

为此,请在Xcode中打开CIZO项目,然后选择“文件”>“新建”>“目标”。 然后选择今天扩展。

如果在添加了“今日扩展”目标之后重建了CIZO应用,则可以看到它已被列为可添加到屏幕的小部件:

如果此时我们将CIZO小部件添加到锁定屏幕,则外观如下所示:

那很容易。 我们现在需要的只是呈现内容。

决定显示什么

第一个想法是重用包含应用程序本身使用的Carousel View。 这将使用户能够以精美的动画方式在精选视频之间滚动。 但是,Apple指出,开发人员应避免将滚动视图放在“今日”窗口小部件中,因为用户难以在不无意间滚动到“今日”视图的情况下在窗口小部件中滚动。

因此,我们决定接受Apple的推荐,并决定仅在小部件中显示最后三个精选视频。

初始视图控制器

在为CIZO创建Today扩展时,Xcode创建了一个初始视图控制器(现在符合NCWidgetProviding) 。 如果在目标内打开MainInterface.storybord,则可以看到带有“ Hello World”标签的视图。 我们用包含三个图像视图的“水平堆栈视图”替换了该视图:

- ( void )openURL:(NSURL *)URL completionHandler:( void (^)(BOOL success))completionHandler; 

在此方法的实现中,我们调用精选视频API。 如果响应与之前调用时的响应不同,则该小部件将提取有关前三个新视频的信息,并将缩略图放入图像视图中。 结果显示如下:

外观不错,但为使其看起来更像CIZO应用本身,并让用户知道他们正在观看精选视频,我们决定合并与应用本身相同的标签。

结果:

添加详细信息

这是朝着一个好的方向发展的,但是我们需要诸如标题和描述之类的细节。 不幸的是,这些细节没有空间。 如果我们在图像下方放置一个标签,我们将在其上放置过多的信息,因为我们已经在其顶部放置了“精选”标签。

我们认为更好的方法是响应图像上的轻拍来显示其他信息。 因此,我们进入情节提要,为每个图像添加一个Tap Gesture Recognizer和一个Present Detail View Controller作为与识别器关联的动作:

启用播放

细节视图控制器在视频缩略图的顶部包括一个“播放”图标。 我们可以将此图标连接到视频API返回的视频链接,从而使用户可以通过点击图像来打开此URL。 编码很简单:

 -( void )openURL:(NSURL *)URL completionHandler:( void  (^)(BOOL success))completionHandler; 

这部分很有趣,因为通常这样的消息将发送到sharedApplication对象。 但是,扩展不能访问sharedApplication对象,并且不能使用openURL方法打开链接。 我们可以通过将openURL:completionHandler:消息发送到NSExtensionContext实例来解决此限制,该实例可以作为UIViewControllerextensionContext属性访问。

通过采用这种方法,点击“播放”图标会使CIZO Web应用程序在Safari中启动并播放预告片:

管理URL方案

但是,这给开发人员提出了一个有趣的问题。 如果CIZO是没有 Web应用程序组件的独立应用程序怎么办? 我们仍然可以使用Today小部件,但是我们想在CIZO应用本身中打开视频播放。 为此,我们所需要做的就是实现自定义URL方案。

这是创建自定义URL方案的两种方法:

从“项目和目标”列表中自动选择包含应用程序的目标,然后转到“信息”页面并展开“ URL类型”设置组。 在这里,您将在URL方案字段中输入“ cizo”,然后选择“ editor”作为角色:

手动地,您还可以通过修改应用程序的Info.plist来添加URL方案。 要为“ cizo”添加URL方案,您需要添加以下键和数组:

在包含的应用程序委托中,实现:

 - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *, id > *)options; 

这样,当调用它时,您将能够解析url以获取适当的视频ID来播放此视频。

另外,从扩展名中调用[self.extensionContext openURL:videoUrl completeHandler:…]时 ,请确保在调用videoUrl时使用“ cizo”方案而不是“ https”

您可以在此处阅读有关应用程序间通信的更多信息:应用程序间通信

最后,在考虑创建新的url方案时,请牢记Apple API参考指南中的以下警告:

摘要

Apple使以非常简单的方式实现扩展成为可能。 似乎扩展将在很长一段时间内成为我们开发生命的一部分。 在这种情况下,我们建议您在应用程序开发之初就考虑扩展。 当您设计一个新应用程序时,请考虑使用嵌入式框架(Building Modern Frameworks)。 当您开始实施扩展时,它可能会有所帮助,并且必须处理共享代码。

下一步是什么?

无论是下一个超级英雄大片的最新预告片,下一个VR游戏机,下一个大型运动鞋的发布,还是夏季最热的音乐节,CIZO都将它们聚集在一个地方,因此您将始终知道购买什么,观看什么,以及去哪里。 那么,CIZO路线图的下一步是什么?

支持通用链接

当前,当用户点击CIZO小部件中的视频缩略图时,CIZO Web应用程序将在Safari中打开以播放视频。 我们计划在将来实现通用链接,以便轻按缩略图将导致视频打开CIZO应用。 有人可能会争辩说,自定义URL方案已经足以将视频推送到CIZO应用,在这种用例中,我们会同意。 如果您的设备上具有“今日”窗口小部件,则表明已安装CIZO应用。 但是通用链接提供了其他好处。 它们依赖于到您网站的标准HTTP或HTTPS链接,与自定义URL方案不同,其他应用程序不能声明通用链接。

欲了解更多信息

  • CIZO —预览您的未来
  • 今天扩展
  • 支持通用链接
  • CIZO网络应用
  • 建立现代框架
  • 应用间通讯