SiriusRating iOS

参见:https://github.com/theappcapital/SiriusRating-Android,适用于 Android。

CocoaPods Compatible Carthage Compatible Swift Package Manager

github-banner

一种非侵入式且友好的方式,提醒用户评价和评分 iOS 应用程序。

功能特性

要求

设置

配置一个 SiriusRating 共享实例,通常在您的 AppDelegate 或应用程序的初始化器中。

简单的一行代码设置

在 AppDelegate 中的 application(_:didFinishLaunchingWithOptions:) 函数中

SiriusRating.setup()

例如

//...
func application(_: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    //...
    SiriusRating.setup()

    return true
}

默认情况下,当满足以下条件时,将提示用户评价应用程序

如果用户选择“稍后提醒我”,他们将在 7 天后再次收到提示。如果用户拒绝提示,他们将在 30 天后再次收到提示,退避因子为 2。这意味着如果用户第二次拒绝,他们将在 60 天后再次收到提示,第三次在 120 天后,依此类推。

安装

CocoaPods

要使用 CocoaPods 将 SiriusRating 集成到您的 Xcode 项目中,请在您的 Podfile 中指定它

pod 'SiriusRating'

Carthage

要使用 Carthage 将 SiriusRating 集成到您的 Xcode 项目中,请在您的 Cartfile 中指定它

github "theappcapital/SiriusRating-iOS"

Swift Package Manager

dependencies: [
    .package(url: "https://github.com/theappcapital/SiriusRating-iOS.git", .upToNextMajor(from: "1.0.8"))
]

用法

重要事件

重要事件定义了您的应用程序中发生的重要操作。在时间跟踪应用程序中,可能是用户记录了一个时间条目。在游戏中,可能是完成了一个关卡。

SiriusRating.shared.userDidSignificantEvent()

SiriusRating 将在每次重要事件后验证条件,并在所有条件都满足时提示用户。

测试请求提示

要查看请求提示在您的应用程序中的外观,只需使用以下代码。

// For test purposes only.
SiriusRating.shared.showRequestPrompt()

样式

StyleOneRequestPromptPresenter(浅色,默认) StyleOneRequestPromptPresenter(深色,默认)
Style One (light) Style One (dark)
StyleTwoRequestPromptPresenter(浅色) StyleTwoRequestPromptPresenter(深色)
Style Two (light) Style Two (dark)

评分条件

评分条件用于验证是否可以提示用户为应用程序评分。验证过程在用户执行重要事件 (userDidSignificantEvent()) 后或在应用程序打开时配置后发生。如果所有评分条件都满足(返回 true),则将提示用户为应用程序评分。

评分条件 描述
EnoughAppSessionsRatingCondition 验证应用程序是否已启动或进入前台足够的次数。
EnoughDaysUsedRatingCondition 验证应用程序已使用了足够的时间(以天为单位)。
EnoughSignificantEventsRatingCondition 验证用户是否已完成足够的重要事件。
NotDeclinedToRateAnyVersionRatingCondition 验证用户是否没有拒绝评价应用程序的任何版本。如果拒绝过,它会检查自最初拒绝以来是否已过去足够的时间才再次提示。
NotPostponedDueToReminderRatingCondition 验证用户是否选择稍后提醒。如果是,则检查是否已过去要求的天数以再次提示。
NotRatedCurrentVersionRatingCondition 验证用户是否已评价过当前版本的应用程序。如果用户已经评价过此版本,则不会再次提示。
NotRatedAnyVersionRatingCondition 验证用户是否没有评价过应用程序的任何版本。如果用户之前评价过该应用程序,它会检查自上次评分以来是否已过去足够的时间才再次提示。

自定义

自定义配置

SiriusRating.setup(
    requestPromptPresenter: StyleTwoRequestPromptPresenter(),
    debugEnabled: true,
    ratingConditions: [
        EnoughDaysUsedRatingCondition(totalDaysRequired = 0),
        EnoughAppSessionsRatingCondition(totalAppSessionsRequired = 0),
        EnoughSignificantEventsRatingCondition(significantEventsRequired = 5),
        // Essential rating conditions below: Ensure these are included to prevent the prompt from appearing continuously.
        NotPostponedDueToReminderRatingCondition(totalDaysBeforeReminding: 14),
        NotDeclinedToRateAnyVersionRatingCondition(daysAfterDecliningToPromptUserAgain: 30, backOffFactor: 2.0, maxRecurringPromptsAfterDeclining: 2),
        NotRatedCurrentVersionRatingCondition(),
        NotRatedAnyVersionRatingCondition(daysAfterRatingToPromptUserAgain: 240, maxRecurringPromptsAfterRating: UInt.max)
    ],
    canPromptUserToRateOnLaunch: true,
    didOptInForReminderHandler: {
        //...
    },
    didDeclineToRateHandler: {
        //...
    },
    didRateHandler: {
        //...
    }
)

自定义评分条件

除了当前的评分条件之外,您还可以编写自己的评分条件,以进一步鼓励正面评价。

class GoodWeatherRatingCondition: RatingCondition {

    private let weatherRepository: WeatherRepository
    
    init(weatherRepository: WeatherRepository) {
        self.weatherRepository = weatherRepository
    }
    
    func isSatisfied(dataStore: DataStore) -> Bool {
        // Only show the rating prompt when it's sunny outside.
        return self.weatherRepository.getWeather().isSunny
    }
    
}

要使用新的评分条件,只需将其添加到列表中。

SiriusRating.setup(
    ratingConditions: [
        //...,
        GoodWeatherRatingCondition(weatherRepository: WeatherDataRepository())
    ]
)

您可以将 presenter 更改为您希望的样式。

SiriusRating.setup(
    requestPromptPresenter: StyleTwoRequestPromptPresenter()
)

更改文本

您可以通过为 presenter 提供一个包含您的自定义本地化字符串的 bundle 来更改文本。

SiriusRating.setup(
    requestPromptPresenter: StyleOneRequestPromptPresenter(localizationsBundle: Bundle.main)
)

然后您可以在您的本地化字符串文件中更改文本,例如在:Localizable.strings 中。

// ...
"request_prompt_title" = "Rate %@";
"request_prompt_duration" = "(duration: less than 10 seconds)";
"request_prompt_description" = "If you enjoy using %@, would you mind taking a moment to rate it? Thanks for your support!";
"request_prompt_rate_button_text" = "Rate %@";
"request_prompt_dont_rate_button_text" = "No, thanks";
"request_prompt_opt_in_for_reminder_button_text" = "Remind me later";

更改 tint color

SiriusRating 将自动使用全局 tint color。

UIView.appearance().tintColor = .red

或者您可以手动设置它。

SiriusRating.setup(
    requestPromptPresenter: StyleOneRequestPromptPresenter(tintColor: .red)
)

更改应用程序名称

SiriusRating 将自动在本地化文本中使用应用程序的显示名称。如果您不想使用此名称,可以手动设置它。

SiriusRating.setup(
    requestPromptPresenter: StyleOneRequestPromptPresenter(appName: "App Name")
)

许可证

SiriusRating 在 MIT 许可证下发布。查看 LICENSE 了解详情。