StarsKit
看看这个美丽的 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
}
}
贡献者
制作于
许可证
StarsKit基于MIT许可证提供。有关更多信息,请参阅LICENSE文件。