StarsKit 版本 0.4.1

StarsKit 版本 0.4.1

由以下成员维护:Bill350Guillaume BonninAmaury DavidGuillaume Chieb bouares



 
依赖关系
Cosmos~> 17.0
Extra/UIKit~> 1.2.0
Jelly~> 1.2.5
 


StarsKit 版本 0.4.1

StarsKit

CI Status Version License Platform

看看这个美丽的 MouSTARche!

StarsKit 是一个用于简化、定制和配置您的 iOS 应用评分工作流程的 Swift 库。

它可以根据远程、本地或静态配置数据,使用具有可选属性的配置。

要求

  • iOS 9.0+
  • Swift 4+
  • Xcode 9.2+

示例

要运行示例项目,请克隆代码库,然后首先从示例目录运行 `pod install`。

安装

StarsKit 可通过 CocoaPods 获得。要安装它,请在 Podfile 中添加以下行

pod 'StarsKit'

第三方依赖

现在我们有第三方依赖,但目的尽可能避免使用它们。

我们还想有一个快速可供使用的库和有意义的定制,所以我们使用3个依赖项

  • Extra/UIKit:简化UIKit操作代码的库
  • Jelly:一个简化评分过渡显示的简单UI组件
  • Cosmos:一个强大而灵活的星星滑块UI组件

描述

行为

库的主要功能是使用静态或动态(远程)配置来显示原生或自定义应用评分屏幕。

如果用户选择负面评分,将重定向到反馈屏幕。如果用户选择正面评分,将重定向到Store评论屏幕

只有你可以选择用户选择反馈时的操作,例如

  • 发送电子邮件
  • 启动自己的反馈屏幕

用户选择评分应用时情况相同

  • 将用户重定向到AppStore评论页面
  • 调用自定义分析

原生StoreKit屏幕

您还可以显示原生的StoreKit屏幕而不是自定义屏幕(仅限iOS 10.3及以上)

功能列表

  • 使用可本地化或配置字符串
  • 默认可本地化字符串
    • EN
    • FR
  • 可覆盖的可本地化字符串
  • 静态配置字符串
  • Cocoapods集成
  • 默认的可配置步骤过渡
  • 默认显示算法行为
  • 可定制的显示算法行为
  • 可定制的星星样式
  • 可定制的字体、文本和色彩
  • 评分和屏幕操作回调
  • 采用字典/数据或远程URL配置:您想要的一切!
  • integrates Native iOS 10.3+ StoreKit
  • 可覆写的布局
  • 生命周期显示事件([will/did]出现/消失)
  • 在默认检查上的额外条件检查
  • Carthage集成
  • 可配置的解析键
  • 将远程配置绑定到StarsKit数据的Firebase扩展

配置显示的可选计量指标

您可以指定计量指标以触发默认显示行为或使用自己的。

  • 禁用/启用组件
  • 增加会话计数器
  • 增加崩溃计数器
  • 静态配置字符串
  • 无崩溃天数
  • 再次询问前的天数
  • 提醒数量
  • 会话计数器之间最大天数
  • 电子邮件属性:邮件地址、邮件主题、邮件头部正文
  • 步骤1:评分屏幕属性
  • 步骤2:反馈屏幕属性
  • 步骤3:存储评论屏幕属性

使用说明

显示评分

// Call this, the algorithm will do the rest:
StarsKit.shared.displayRateIfNeeded()

// You can also force the display:
StarsKit.shared.displayRateIfNeeded(forced: true)

更新配置属性

另请参阅:《StarsKitConfigProperties》枚举键。您必须使数据字典与预期的键兼容。

StarsKit为您提供使用任何配置源的可能性:本地JSON文件、静态字典、远程文件(远程JSON或Firebase远程配置文件)。

JSON StarsKit配置示例

{
    "disabled": false,
    "prefersNativeRating": false,
    "displaySessionCount": 3,
    "mainTitle": "Your opinion interests us :)",
    "mainText": "Do you like the app StarsKit?",
    "mainActionButton": "Submit",
    "positiveStarsLimit": 4,
    "dislikeMainTitle": "Your opinion interests us",
    "dislikeMainText": "Help us to improve the app StarsKit",
    "dislikeActionButton": "Make a suggestion",
    "dislikeExitButton": "Later",
    "likeMainTitle": "You like our app! Thanks!",
    "likeMainText": "Let us know on the AppStore in a minute!",
    "likeActionButton": "Let's go!",
    "likeExitButton": "Later 😥",
    "maxNumberOfReminder": 3,
    "maxDaysBetweenSession": 3,
    "emailSupport": "[email protected]",
    "emailObject": "Application StarsKit",
    "daysWithoutCrash": 15,
    "daysBeforeAskingAgain": 3,
    "emailHeaderContent": "Why do you not like the app?"
}

要更新配置,提供字典数据

let data = try Data(contentsOf: URL(fileURLWithPath: path))
let localJSONConfiguration = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as! [String: Any?]
StarsKit.shared.updateConfig(from: localJSONConfiguration)

StarsKit 实例 & 配置

现在 StarsKit 管理默认的单例实例。

您可以为 StarsKit 设置自己的 配置上下文图形上下文

您还可以决定

  • validateRatingButtonEnable:禁用或启用提交步骤评分。如果禁用,用户触碰后将立即提交评分。
  • useDefaultBehavior:禁用 StarsKit 默认显示检查行为,并在 StarsKitDelegate 中实现您自己的。
  • useSessionSpaceChecking:禁用/启用默认的时间间隔检查。如果启用,则在更新会话计数时,仅在会话间隔完全过去后更新会话计数。换句话说,如果用户使用应用时间不足,会话计数不会增加。同样,如果希望在当天与上次会话相同的时段更新会话,也不会设置。
  • localLocalizableStringsEnabled:启用本地化标题,而不是配置的标题。将使用默认 StarKit 字符串。如果您在应用的本地化字符串(使用相同的键)中覆盖了它们,将使用它们😎.

StarsKitContext:更新指标

要触发弹出评分显示,您必须更新指标。

// Increment the number of crash, this will automatically update the last crash date (lastCrashDate)
StarsKit.shared.context.nbCrashes += 1

// Increment the session directly
StarsKit.shared.context.nbSessions += 1
// or
StarsKit.shared.incrementSession(by: 10)

// You can also reset all the app context values
StarsKit.shared.resetContext()

// You can also reset all the configuration properties
// After a new major version update for instance
StarsKit.shared.resetConfig()

您还可以使用 nbCrashes 属性和 Fabric 和 Crashlytics

extension AppDelegate {
  
  func setupFabricSDK(_ application: UIApplication) {
    Fabric.with([Crashlytics.self])
    Crashlytics.sharedInstance().delegate = self
  }
}

// MARK: - CrashlyticsDelegate
extension AppDelegate: CrashlyticsDelegate {
  func crashlyticsDidDetectReport(forLastExecution report: CLSReport) {
    StarsKit.shared.context.nbCrashes += 1
  }
}

有关用户默认值属性,请参阅 StarsKitContextProperties

自定义

使用 StarsKitGraphicContext

可自定义的项目

  • 标题字体
  • 标题颜色
  • 按钮高亮色
  • 按钮背景色
  • header 背景图
  • ViewController 呈现过渡(通过 Jelly)
  • Stars 样式(通过 Cosmos)

过渡与显示(果冻)

StarsKit 使用果冻来实现可定制的过渡。您可以通过在 StarsKitGraphicContext 中设置 jellyCustomTransition 属性来自定义过渡。

前往 Jelly 代码库 获取更多信息。

星星(宇宙)

Cosmos 提供了 CosmosSettings 属性,可以在 StarsKitGraphicContext 中设置。

您指定自己的星星图像(填充/空白)。如果为空,Cosmos 将使用通过 starPoints 指定的星星路径。

前往 Cosmos 代码库 获取更多信息。

步骤屏幕

  • 创建所需的 xib 屏幕,即可与 StarsKit 中的名称相同。
  • 指定自定义类并将模块设置为 "StarsKit"。
  • 取消选中 "从目标继承模块"。

IBOutlets 是可选的,因此您可以决定是否要实现它们。

注意:若要在示例项目中测试,请检查 StarsKit-Example 目标中的 FeedbackViewController.xib

覆盖可本地化字符串

简单地在您的可本地化字符串中添加要覆盖的可本地化键。

查看默认的 StarsKit.strings 键。

"starskit.mainTitle" = "My overrided title";

覆盖步骤控制器

StarsKitDelegate : 监听评分回调

// MARK: - StarsKitDelegate
extension ViewController: StarsKitDelegate {
  func didValidateRating(to rate: Int) {
  	// Why not send an analytic ?
    print("Did validate rating to rate \(rate)")
  }
  
  func didChooseAction(at step: RatingStep) {
    print("Did choose action button at step \(step)")
  }
  
  func didChooseLater(at step: RatingStep) {
    print("Did choose later button at step \(step)")
  }
  
  func needCustomDisplayRateScreen() -> Bool {
    //Implement your own behavior if you want
    return false
  }
  
  func didUpdateRating(from context: StarsKitContext, to rate: Int) {
    print("Did update rating at \(rate)")
  }
  
}

StarsKitUIDelegate : 监听UI周期事件

// MARK: - StarsKitUIDelegate
extension ViewController: StarsKitUIDelegate {
  
  func didRatingScreenWillAppear() {
    print("didRatingScreenWillAppear")
  }
  
  func didRatingScreenDidAppear() {
    print("didRatingScreenDidAppear")
  }
  
  func didRatingScreenWillDisappear() {
    print("didRatingScreenWillDisappear")
  }
  
  func didRatingScreenDidDisappear() {
    print("didRatingScreenDidDisappear")
  }
  
  func presenterController() -> UIViewController {
    // Return the controller where the rate screen will be presented
    // The current, the top most one, anywhere, anyone
    return self
  }
}

贡献者

制作于🇫🇷由Smart&Soft iOS团队制作。

许可证

StarsKit基于MIT许可证提供。有关更多信息,请参阅LICENSE文件。