LaunchGate 2.0.0

LaunchGate 2.0.0

测试已测试
Lang语言 SwiftSwift
许可证 NOASSERTION
发布最后发布2020年4月
SPM支持SPM

Dan Trenz维护。



LaunchGate

CI Status Version License Platform codecov.io Sponsored by Detroit Labs

LaunchGate可以让用户知道您的应用的更新何时可用。

您还可以阻止旧版本的用户访问应用,这在严重错误或需要用户更新应用的安全问题出现时非常有用。

此外,您可以使用LaunchGate在启动时显示远程配置的消息给用户,这也可以用于暂时阻止用户访问应用(例如在后台维护期间)。

需要Android版本吗?

运气不错!LaunchGate是与它的Android对应版本并行开发的,即Gandalf

安装

LaunchGate可通过CocoaPods获取。要安装它,只需将以下行添加到Podfile中

pod "LaunchGate"

使用方法

LaunchGate在启动时下载并解析部署在服务器上的JSON配置文件,然后执行相应的操作。

默认情况下,LaunchGate期望一个类似以下的配置文件:

{
  "ios": {
    "requiredUpdate": {
      "minimumVersion": "1.1",
      "message": "An update is required to continue using this app."
    }
  }
}

如果您想使用不同于默认的配置结构,您完全可以使用!下面有说明,如何提供自定义解析器

启用LaunchGate

  1. 将其导入到您的AppDelegate
  2. 实例化它,传递配置文件的位置和您的应用的App Store URI。
  3. 最后,在applicationDidBecomeActivesceneDidBecomeActive中调用launchGate?.check(),如果您使用基于场景的窗口。
import LaunchGate

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

  var window: UIWindow?

  lazy var launchGate = LaunchGate(
    configURI: "https://www.example.com/config.json",
    appStoreURI: "itms-apps://itunes.apple.com/us/app/yourapp/id123456789"
  )

  func applicationDidBecomeActive(application: UIApplication) {
    launchGate?.check()
  }

}

或者您已经设置好应用程序场景Manifest

import LaunchGate

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

  var window: UIWindow?

  func sceneDidBecomeActive(_ scene: UIScene) {
    launchGate?.check()
  }

}

配置文件

当调用check()时,LaunchGate加载JSON配置文件。使用此文件,您可以在您的应用程序中触发几种不同的行为。

"为什么JSON中的顶层有ios对象?为什么有必要?"

顶层"ios"对象的存在是因为LaunchGate是与Gandalf并行创建的,它是其Android的对应项目。作为跨平台移动开发者,我们理解得到两个完全独立的iOS & Android库满足相同的功能要求是多么令人烦恼。通过同时开发LaunchGate(iOS)和Gandalf(Android),我们能够为构建和维护跨平台应用的团队提供一个在iOS和Android上都应具有相似功能的解决方案。

跨平台配置示例

{
  "android": {
    "requiredUpdate": {
      "minimumVersion": "1.1",
      "message": "An update is required to continue using this app."
    }
  },
  "ios": {
    "requiredUpdate": {
      "minimumVersion": "1.1",
      "message": "An update is required to continue using this app."
    }
  }
}

必需更新

通过包含一个requiredUpdate对象,您可以指定一个最小应用程序版本以及将显示给那些安装版本过旧的用户的消息。带有旧版本的用户在更新之前将无法使用应用程序。

场景:您先前版本的应用程序存在严重错误或安全漏洞,您已在当前版本中修复了这些问题,但仍需要阻止用户继续使用较旧的受损害版本。

在本例中,当打开应用程序时,应用版本低于“1.1”的用户将看到一个带有“更新”按钮的警告对话框,该按钮将带他们进入App Store下载最新版本。

Required Update Screenshot

可选更新

通过包含一个optionalUpdate对象,您可以指定App Store中应用的当前版本以及显示给用户的消息,以鼓励他们更新应用程序。

用户可以忽略可选更新,并且可选更新不会阻止用户使用应用程序。此外,每个版本只会向用户显示一次可选更新对话框。这样用户就不会每次打开应用程序时都不断地受到打扰。

场景:您已发布对应用程序的重大更新,并希望鼓励那些未启用自动更新的用户进行升级。

{
  "ios": {
    "optionalUpdate": {
      "optionalVersion": "1.2",
      "message": "A new version of the app is available."
    }
  }
}

Optional Update Screenshot

警告消息

最后,除了提供与特定应用程序版本和更新相关的功能外,您还可以在用户打开应用程序时使用LaunchGate向用户显示一条信息性消息。

阻止性警告

“阻止”警告("blocking": true)是一种在用户打开应用程序时显示给用户的通知,不会给用户任何进入应用程序的选项。

重要→只要将blocking设置为true,用户将无法使用您的应用程序,所以请尽快删除或禁用阻止性警告。

场景:您的应用程序依赖于一个暂时因维护而关闭的后端网络服务,您不希望应用程序用户受到影响。

{
  "ios": {
    "alert": {
      "message": "We are currently performing server maintenance. Please try again later.",
      "blocking": true
    }
  }
}

Blocking Alert Screenshot

非阻塞警报

与非阻塞更新对话框类似,非阻塞警报信息每条只显示一次。

场景:您的应用程序依赖一个后端Web服务,该服务出现间歇性连接问题,您需要提醒用户应用程序体验可能降低。

{
  "ios": {
    "alert": {
      "message": "We are currently working to resolve intermittent web service issues. We apologize if your app experience is affected.",
      "blocking": false
    }
  }
}

Non-Blocking Alert Screenshot

自定义配置解析器

如果需要使用与默认配置JSON对象不同的内容,可以编写自己的解析器,使其符合LaunchGateParser协议,并在调用check()前将其设置为启动门实例。

请参阅示例项目

作者

Dan Trenz (@dtrenz),由Detroit Labs提供

许可证

LaunchGate 在Apache License,Version 2.0许可下可用。更多详细信息请参阅LICENSE文件。