MWOpenInKit 0.1.1

MWOpenInKit 0.1.1

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布最近发布2014年12月

未认领维护。



  • Mike Walker

MWOpenInKit是处理iOS应用中第三方URL方案的一种简单方法。

Example animation

iOS平台上链接到第三方应用基本上是无效的。假设您作为开发者,希望允许用户在Google Maps中打开地图链接,而不是使用内置的Maps.app。现在您需要编写一大堆自定义代码,以确定Google Maps是否已安装,并询问用户他们的偏好,并理想地记住这个偏好。

如果我们用一个更复杂的例子来说明,比如Twitter客户端,您现在可能要管理几十个不同的第三方URL方案,它们都截然不同,且可能没有很好地记录。

因此,很少有应用会链接到AppleEasy-to-link-to应用程序处理的外部第三方应用程序,即使用户更喜欢第三方应用程序。

MWOpenInKit试图解决这个问题。

对于用户:

它提供了一个精美的选择界面,让用户选择在哪个第三方应用中执行操作。

  • 对于开发者:

  • 它提供了一个基于语义动作的优雅、一致的API。您不需要手动构造URL,只需告诉它您试图做什么即可。您不需要手动检查哪些应用程序安装了,只需让MWOpenInKit自动查询设备以确定哪些应用程序可以执行指定的操作。

一个统一的、易读的第三方URL方案仓库。每个应用程序的URL方案只是一个纯文本plist文件。您不需要编写任何代码即可支持您的应用程序的MWOpenInKit。

安装

运行pod install后,您应该在您的应用程序代码中使用#import <MWOpenInKit/MWOpenInKit.h>并开始使用它。

用法

NSURL *url = [NSURL URLWithString:@"http://google.com"]
MWBrowserHandler *browserHandler = [[MWBrowserHandler alloc] init];
MWActivityPresenter *presenter = [browserHandler openURL:url];
[presenter presentModalActivitySheetFromViewController:self];

以最简单的方式使用MWOpenInKit,您只需要实例化一个处理器对象,给它一个要执行的操作,然后告诉结果的展示对象展示自己。下面是如何在iPhone上使用外部网络浏览器打开URL的示例

如果用户仅安装了MobileSafari,这将从Safari打开,就像您调用[[UIApplication sharedApplication] openURL:url]一样。

这总会在模态表单中显示,但如果您的应用是通用型或仅适用于iPad,您可能希望将应用表单显示为弹出视图。以下代码将在iPhone上以模态方式自动显示,并在iPad上使用UIPopoverController显示。

NSURL *url = [NSURL URLWithString:@"http://google.com"]
MWBrowserHandler *browserHandler = [[MWBrowserHandler alloc] init];
MWActivityPresenter *presenter = [browserHandler openURL:url];
[presenter presentActivitySheetFromViewController:self
                                  popoverFromRect:someRect
                                           inView:self.view
                         permittedArrowDirections:UIPopoverArrowDirectionAny
                                         animated:YES];

所有这些选项都将直接传递到UIPopoverController中。类似地,存在一个presentActivitySheetFromViewController:popoverFromBarButtonItem:permittedArrowDirections:animated:,如果适当的话,它会调用等效的UIPopoverController方法。

不同的处理器

存在许多不同的处理器对象,它们按应用程序类型分组。例如,MWBrowserHandlerMWMapsHandlerMWTwitterHandler分别处理在网页浏览器中打开链接、地图应用程序和Twitter客户端。

一些处理器有可选的配置参数。例如,当链接到地图应用程序时,您可以指定地图应中心在哪里以及缩放程度;这些选项将在您搜索位置、获取路线指示或执行处理器支持的其他任何动作时生效。

MWMapsHandler *mapsHandler = [[MWMapsHandler alloc] init];
mapsHandler.center = CLLocationCoordinate2DMake(42.523, -73.544);
mapsHandler.zoom = 14;
[mapsHandler directionsFrom:@"Washington Square Park" to:@"Lincoln Center"];

这是MWOpenInKit真正强大的地方。这为您提供了一个干净、语义化的API来构建链接,而不是手动拼接URL,无论您的用户是想使用Apple Maps还是第三方应用程序。

有关可用处理器及其方法和配置选项的详细列表,请参阅项目的文档。

文档

详尽的文档(使用appledoc生成)可以在运行script/generate-docs.sh的根目录下的docs目录中找到。或通过CocoaDocs查看。

示例项目

提供了一个演示应用程序,您可以查看MWOpenInKit的功能。

  1. 克隆此存储库。
  2. 在项目目录内运行pod install
  3. 打开MWOpenInKitDemo.xcworkspace
  4. 编译并运行应用程序。

该演示允许您执行MWOpenInKit支持的所有操作。

如果您安装的应用程序能够执行任务,并有且仅有一个这样的应用程序,MWOpenInKit将默认直接打开该应用程序,而不是提示用户选择。在演示应用程序中,有一个切换始终显示选择用户界面。建议您在实际的iOS设备上运行该演示,该设备已安装第三方应用程序。如果您必须在没有第三方应用程序的模拟器上运行它,则该切换将允许您看到选择用户界面的外观。

添加新的URL方案

扩展MWOpenInKit以包含您的应用程序的URL方案非常简单。

  1. /MWOpenKit/Apps/目录内,创建一个以您的应用程序命名的新的目录。

  2. 在该目录中,创建一个plist文件。其名称应该是您想要显示的名称,并且它应包含一个字典。每个键是适当MWHandler对象中方法的签名,键是用于生成该方法的模板字符串,其中{handlebars}包裹的变量将在运行时进行插值。

    尽可能多的情况下,模板变量键的名称与相应Objective-C方法的参数名称相同,但这并不是强制性的。我建议查看目录中的其他plist文件,以了解正确的方法键和模板键。

  3. 您的应用图标应放在同一目录下。您需要四个图标副本,所有这些图标的根名称都应与您的 plist 文件相同。

    这些图标将按原样显示,因此应该预先渲染。根文件名(例如示例中的“AppName”)必须与 plist 文件名完全匹配。

  4. 在 Xcode 中打开示例项目并运行测试(Cmd+U)。这将运行一个 linter,它会告诉您如果您的 plist 中定义的任何操作没有对应实际 Objective-C 处理器方法,这有助于确保您没有出现任何拼写错误。

    请注意,您不需要手动将任何文件添加到 Xcode 中;它们将被自动识别。如果在 Xcode 中看到意外的行为并且怀疑您的更改没有生效,请清除项目,删除衍生数据文件夹,并重置模拟器。

    您还可能在实际的 iOS 设备上运行示例应用,以确保您的链接按预期工作。

  5. 提交 pull request!

如果您的应用程序支持当前处理器中没有表示的操作,或者属于目前没有处理器的应用程序类别,那么您必须编写代码以添加支持。现有的处理器代码易于阅读;请参考现有的处理器子类以创建自己的处理器方法或 MWHandler 子类。

贡献

在这种情况下,您对 `MWOpenInKit` 的最佳贡献方式是将其用于您的应用程序并提交您应用程序 URL 方案的 pull request。但话虽如此,任何其他形式的贡献都是受欢迎的!对于新代码,强烈建议进行测试和通过 appledocs 提供文档。

路线图

MWOpenInKit 初始版本的目标是提供一种简单的方式来集成第三方应用链接,而不需要大量样板代码。以下是非详尽的未来扩展列表。

  • 保存用户应用首选项,包括每个应用单独的和(理想情况下)使用 MWOpenInKit 的单个设备上所有应用。
  • 支持应用名称的本地化。
  • 处理器执行自定义代码的能力,而不仅仅是始终打开一个 URL(例如显示 MFMailComposeViewController 或内嵌网页视图)。
  • 运行时下载和缓存 plist,允许应用程序拉取最新的 URL 方案,而无需通过 App Store 进行更新。
  • 基于 Web 的内容管理系统,可以添加和管理 URL 方案,无需手动编辑 plist 或提交 pull request。
  • 可选地从 Apple 在运行时下载数字图标,而不是要求开发者上传它们。

联系

Mike Walker

最初版本的 MWOpenInKit 是在 Hacker School 上构建的。

许可证

MWOpenInKit 可在 MIT 许可证下获得。有关更多信息,请参阅 LICENSE 文件。