SwiftyiRate 使在 Swift 中处理评分应用变得容易。
在 AppDelegate.swift 中添加代码
import SwiftyiRate
override class func initialize () {
//configure iRate
SwiftyiRate.sharedInstance.daysUntilPrompt = 5
SwiftyiRate.sharedInstance.usesUntilPrompt = 15
}
要配置 SwiftyiRate,有多个 SwiftyiRate 类属性可以改变其行为和外观。这些属性大多容易理解,但以下将进行文档说明。
var appStoreID: Int?
这应该与您应用程序的 iTunes 应用 ID 匹配,您可以在设置应用程序后在 iTunes connect 中获取它。通常不需要这个值,除非您在您的 Mac 和 iOS 应用 bundle ID 存在前述冲突,或者在 Mac 应用软件沙盒的情况下,如果您的应用程序没有网络权限,因为它将无法使用 iTunes 服务自动获取 appStoreID。
var appStoreGenreID: Int?
这是应用程序的类型,用于确定评分对话框的默认文本。这将通过调用 iTunes 服务自动设置,因此大多数情况下不需要手动设置。如果您确实想覆盖此值,将 iRateAppStoreGameGenreID
常量设置为它将使得 SwiftyiRate 使用“游戏”版本的评分对话框,将任何其他值设置为它将使用“应用”版本的评分对话框。
var appStoreCountry: Int?
这是用于指定要检查哪个iTunes商店的两字母国家代码。它将自动从设备的区域位置偏好设置中设置,因此在大多数情况下不需要更改。您可以将其覆盖为指向美国商店或您偏好的其他特定商店,如果您的应用程序只在某些国家可用,这可能是个好主意。
var applicationName: String
这是在SwiftyiRate警报中显示的应用程序名称。它将自动从应用程序的info.plist中设置,但您可能希望用更短或更长的版本覆盖它。
var applicationBundleID: String?
这是应用程序包ID,用于从iTunes检索appStoreID
和appStoreGenreID
。它将自动从应用程序的info.plist中设置,所以您通常不需要更改它(除非是为了测试目的)。
var daysUntilPrompt: Float
用户在收到评分提示之前,必须安装应用程序的天数。时间从应用程序首次启动开始计算。这是一个浮点值,因此可以用来指定小数天数(例如,0.5)。默认值是10天。
var usesUntilPrompt: Int
用户在收到评分提示之前必须启动应用程序的最小次数。这样可以避免用户仅运行应用程序一次,几周后再次查看并立即收到评分提示的场景。最小使用计数确保只有经常使用的人才收到提示。只有在达到指定的天数和使用的次数之后,提示才会出现。默认为10次使用。
var eventsUntilPrompt: Int
对于某些应用程序,启动次数不是一个很好的使用指标。例如,应用程序可能是一个持续运行的后台程序,或者是一个用户需要达到一定等级后才能写有见地的评论的游戏。在这种情况下,您可以手动记录重大事件,在这些事件达到预定的次数后显示提示。就像usesUntilPrompt设置一样,提示仅在工作指定天数和事件之后出现,但是一旦达到天数阈值,如果事件阈值或使用阈值达到任意一个,提示就会出现。默认为10个事件。
var usesPerWeekForPrompt: Float
如果您不太关注应用程序使用的总次数,但希望使用应用程序被使用的频率,您可以使用usesPerWeekForPrompt
属性来设置一个最低阈值,指示用户每周必须启动应用程序的次数以显示提示(平均)。请注意,这是从应用程序安装以来的平均值,因此,如果用户有一段时间没有运行应用程序,可能会打乱平均数。默认值是零。
var remindPeriod: Float
在用户选择“稍后提醒”选项后,应用程序应等待多长时间提醒用户评分(以天为单位)。零值表示应用程序将在下次启动时提醒用户。请注意,此值将覆盖其他标准,所以即使在提醒期间发布了新版本,应用程序在提醒期限内也不会要求评分。默认为1天。
var messageTitle: String
评分提示显示的标题。如果您不想显示标题,将其设置为@""
;
var message: String
评分提示消息。这应该是礼貌和有礼貌的,但不要过于啰嗦。如果您不想显示消息,将其设置为@""
;
var updateMessage: String
这是用于之前已评分的用户的信息,鼓励他们再次评分的消息。这允许您为这些用户定制消息。如果您不为这种情况提供自定义消息,将使用标准消息。
var cancelButtonLabel: String
用于关闭评分提示而无需评分应用程序的按钮标签。
var rateButtonLabel: String
用户如果希望评分应用程序时按下的按钮标签。
var remindButtonLabel: String
用户如果希望稍后提醒他们评分时按下的按钮标签。如果您不想显示提醒按钮,比如屏幕上没有足够空间,将其设置为@""
。
var useAllAvailableLanguages: Bool
默认情况下,SwiftyiRate将使用在SwiftyiRate.bundle中可用的所有语言,即使在不支持本地的应用程序中使用。如果您希望限制SwiftyiRate仅使用与您的应用程序已支持相同的语言集,请将此属性设置为NO。(默认为YES)
var promptForNewVersionIfUserRated: Bool
由于iTunes评分是针对特定版本的,理想情况下您希望用户为您的每个新版本的应用程序进行评分。真正喜欢您的应用程序的用户可能愿意为新的发布更新他们的评论。将promptForNewVersionIfUserRated
设置为YES
,SwiftyiRate将在用户每次安装更新时再次提示他们,直到他们拒绝评分为止。如果他们拒绝,将不会再次询问。
var onlyPromptIfLatestVersion: Bool
将此设置为NO,即使在用户不是在运行应用程序的最新版本的情况下,也会启用评分提示显示。默认为YES,这样用户就不会因为您已修复的错误等原因而留下差的评论。
var onlyPromptIfMainWindowIsAvailable: Bool
此设置仅适用于Mac OS。默认情况下,在Mac OS上,SwiftyiRate警告作为工作表显示在主窗口上。某些应用程序没有主窗口,因此这种方法不可行。对于此类应用程序,将此属性设置为NO以允许SwiftyiRate警告作为一个常规模态窗口显示。
var promptAtLaunch: Bool
将此设置为NO以禁用应用启动或从后台返回时自动显示评分提示。在有效时,将继续跟踪评分标准,但不会自动显示提示。如果您希望手动控制评分提示的显示,则可以使用此选项。
var verboseLogging: Bool
此选项将导致SwiftyiRate将有关提示决策过程的详细日志发送到控制台。如果您的应用程序在您期望时没有正确提示评分,这将帮助您找出原因。默认情况下,在调试构建上启用详细日志记录,在发布和部署构建上禁用。
var previewMode: Bool
如果设置为YES,则在启动时,SwiftyiRate将始终显示评分提示,而不管应用程序已经使用多长时间或是否是最新版本(除非您明确禁用了promptAtLaunch
选项)。在测试期间,用于校对您的消息并检查配置是否正确,但在最终发布时禁用此选项(默认为NO)。
如果默认的SwiftyiRate行为不能满足您的要求,您可以通过使用高级属性、方法和委托来实现自己的功能。以下属性允许您访问内部状态并覆盖它
var ratingsURL: NSURL?
应用程序将引导用户写入评分的应用程序URL。此值会自动设置为给定平台的正确值。在iOS 6及以下版本中,它将直接带用户到评分页面,但在iOS 7和Mac OS中,它将带用户到主要的应用页面(如果在这两个平台上可以直接链接到评分页面,我还没有找到它)。如果您正在实现自己的评分提示,则应使用openRatingsPageInAppStore
方法,尤其是在Mac OS上,因为打开Mac应用商店的过程比仅仅打开URL复杂。
var firstUsed: NSDate?
用户启动当前版本应用程序的第一日期。这用于计算是否达到了daysUntilPrompt标准。
var lastReminded: NSDate?
用户上次请求稍后提醒评分的日期。
var usesCount: Int
当前版本应用程序被使用的次数(启动)。
var eventCount: Int
自当前版本安装以来记录的显著应用程序事件数。此值由logEvent方法递增,但也可以直接操作。查看事件演示了解如何使用此功能。
var usesPerWeek: Float
当前版本应用程序每周被使用(启动)的平均次数。
var declinedThisVersion: Bool
此标志指示用户是否拒绝评分当前版本(是)或否(否)。这目前在SwiftyiRate提示逻辑中未使用,但可能有助于实现您自己的逻辑。
var declinedAnyVersion: Bool
此标志指示用户是否拒绝评分任何以前的版本(是)或否(否)。当设置为是时,SwiftyiRate不会自动提示用户。
var ratedThisVersion: Bool
此标志指示用户是否已经评分了当前版本(是)或否(否)。
var ratedAnyVersion: Bool
此(只读)标志指示用户是否已经评分过任何版本的app(是)或否(否)。
weak var delegate: SwiftyiRateDelegate?
您提供的实现了下面的 SwiftyiRateDelegate
协议的对象。使用此对象来检测和/或覆盖SwiftyiRate的默认行为。默认为App Delegate,所以如果您正在使用您的App Delegate作为SwiftyiRate代理,则不需要设置此属性。
除了配置之外,SwiftyiRate还有以下方法:
func logEvent(deferPrompt: Bool)
此方法可以从您的应用程序中的任何地方(SwiftyiRate配置之后)调用,并增加SwiftyiRate重大事件计数。当达到预定义的事件数时,将显示评分提示。可选的deferPrompt参数用于确定提示是否会立即显示(否)或在应用程序下一次启动时显示(是)。
func shouldPromptForRating() -> Bool
返回YES,如果已满足提示条件,否则返回NO。您可以使用此方法决定何时显示评分提示,如果您已禁用应用程序启动时的自动显示。调用此方法不会调用 iRateShouldPromptForRating
代理方法。
func promptForRating()
此方法将立即触发评分提示,而无需检查应用程序商店是否可用,也不会调用SwiftyiRateShouldPromptForRating代理方法。请注意,此方法依赖于 appStoreID
和 applicationGenre
属性,这些属性仅在轮询iTunes服务器后检索,因此如果您打算直接调用此方法,则需要自己设置这些属性,或者使用 promptIfNetworkAvailable
方法。
func promptIfNetworkAvailable()
此方法将检查是否可用应用程序商店,如果可用,将向用户显示评分提示。在显示警报之前,将调用SwiftyiRateShouldPromptForRating代理方法,所以您可以拦截它。注意,如果您的应用程序是在沙箱中且没有网络访问权限,则此方法将忽略网络可用性状态,然而在这种情况下,您需要手动设置 appStoreID
,否则SwiftyiRate无法工作。
func promptIfAllCriteriaMet()
此方法将检查是否满足所有提示条件,以及应用程序商店是否可用。如果可用,将向用户显示评分提示。在显示警报之前,将调用SwiftyiRateShouldPromptForRating代理方法,所以您可以拦截它。
func openRatingsPageInAppStore()
此方法跳过用户提示,根据SwiftyiRate在哪个平台上运行,在Mac或iPhone应用商店中打开应用程序评分页面。此方法不会执行任何检查以验证机器具有网络访问权限或应用商店是否可用。它也不会调用-iRateShouldOpenAppStore
代理方法。您应使用此方法打开评分页面,而不是使用ratingsURL属性,因为在许多情况下,启动应用商店的过程比仅仅打开URL复杂得多。请注意,此方法依赖于appStoreID
,只有在使用iTunes服务器轮询后才能检索。如果您在调用此方法之前未先执行更新检查,则您将需要事先自己设置appStoreID
属性,或者承担此方法可能需要一段时间进行网络调用或完全失败的风险。在成功时,此方法将调用-iRateDidOpenAppStore
代理方法。在失败时,它将调用-iRateCouldNotConnectToAppStore:
代理方法。
SwiftyiRateDelegate协议提供了以下方法,可用于截获SwiftyiRate事件并覆盖默认行为。所有方法都是可选的。
optional func iRateCouldNotConnectToAppStore(error: NSError)
当SwiftyiRate无法连接到应用商店时,将调用此方法,通常是因为网络连接中断。如果由于沙箱权限,您的应用程序无法访问网络,这也可能触发,在这种情况下,您需要手动设置appStoreID,以便SwiftyiRate仍然能够运行。
optional func iRateDidDetectAppUpdate()
如果SwiftyiRate检测到自上次启动以来应用程序已经更新,将调用此方法。
optional func iRateShouldPromptForRating() -> Bool
在向用户显示评分提示之前立即调用此方法。您可以使用此方法在标准规则之外实现自定义提示逻辑。您还可以使用此方法阻止标准提示弹窗,以不同方式显示评分提示,或完全跳过。
optional func iRateDidPromptForRating()
在向用户显示评分提示之前立即调用此方法。这对于使用分析跟踪看到提示后前往应用商店的用户比例很有用。这可以帮助您调整何时以及如何显示提示的环境。
optional func iRateUserDidAttemptToRateApp()
当用户在评分提示中点击评分按钮时调用。如果您想记录用户与SwiftyiRate的交互,这很有用。此方法只有在您使用标准的SwiftyiRate提醒视图提示时才会调用,如果您提供了自定义评分实现或直接调用openRatingsPageInAppStore
方法,则不会自动调用。
optional func iRateUserDidDeclineToRateApp()
当用户拒绝评分应用程序时调用。如果您想记录用户与SwiftyiRate的交互,这很有用。此方法只有在您使用标准的SwiftyiRate提醒视图提示时才会调用,如果您提供了自定义评分实现,则不会自动调用。
optional func iRateUserDidRequestReminderToRateApp()
当用户请求提醒评分应用程序时调用。如果您想记录用户与SwiftyiRate的交互,这很有用。此方法只有在您使用标准的SwiftyiRate提醒视图提示时才会调用,如果您提供了自定义评分实现,则不会自动调用。
optional func iRateShouldOpenAppStore() -> Bool
在SwiftyiRate尝试打开应用商店之前立即调用。如果您希望实现自己的评分页面显示逻辑,则返回NO。
optional func iRateDidOpenAppStore()
SwiftyiRate打开应用商店后立即调用。
SwiftyiRate 默认字符串已针对许多语言进行了本地化。默认情况下,即使在没有本地化的应用程序中,或者在只有SwiftyiRate支持的语言子集中进行本地化的应用程序中,SwiftyiRate也将使用SwiftyiRate.bundle中的所有本地化字符串。SwiftyiRate字符串的键是
private static let SwiftyiRateMessageTitleKey = "iRateMessageTitle"
private static let SwiftyiRateAppMessageKey = "iRateAppMessage"
private static let SwiftyiRateGameMessageKey = "iRateGameMessage"
private static let SwiftyiRateUpdateMessageKey = "iRateUpdateMessage"
private static let SwiftyiRateCancelButtonKey = "iRateCancelButton"
private static let SwiftyiRateRemindButtonKey = "iRateRemindButton"
private static let SwiftyiRateRateButtonKey = "iRateRateButton"
如果您希望SwiftyiRate只使用您的应用程序中启用的本地化字符串(因此如果您的应用程序只支持英语、法语和西班牙语,SwiftyiRate将自动为这些语言进行本地化,但不会为德语进行本地化,即使SwiftyiRate包含一个德语文件),请将useAllAvailableLanguages
选项设置为NO。
不推荐您修改SwiftyiRate.bundle中的字符串文件,因为这会使 SwiftyiRate的更新复杂化。唯一的例外是,如果您想向SwiftyiRate项目在github上的本地化添加额外的语言或改进或修正(这些贡献将非常受欢迎)。
如果您想在您的应用程序中为SwiftyiRate添加额外的语言而无需将其提交回github项目,您可以直接将这些字符串添加到您的项目文件夹中适当的Localizable.strings文件中。如果您想替换一些或所有默认的SwiftyiRate字符串,最简单的方法是将这些字符串复制到您自己的Localizable.strings文件中,然后进行修改。SwiftyiRate将自动优先使用主应用程序包中的字符串而不是SwiftyiRate包中的字符串,因此您可以使用这种方法覆盖任何字符串。
如果您不希望使用任何默认的本地化字符串,您可以完全省略SwiftyiRate.bundle。请注意,如果您只想支持SwiftyiRate支持的语言子集,您没有必要从SwiftyiRate.bundle中删除其他字符串文件 - 只需将useAllAvailableLanguages
设置为NO,SwiftyiRate将仅使用您的应用程序已经支持的语言。
虽然仍支持使用单个setter方法覆盖SwiftyiRate的默认字符串(见下文)的旧方法,但现在推荐的方案是将这些字符串添加到您项目中的Localizable.strings文件,这将自动由SwiftyiRate检测到。
override class func initialize () {
// overriding the default SwiftyiRate strings
SwiftyiRate.sharedInstance.messageTitle = NSLocalizedString("kMessageTitle", comment: "iRate message title")
SwiftyiRate.sharedInstance.message = NSLocalizedString("kMessage", comment: "iRate message")
SwiftyiRate.sharedInstance.cancelButtonLabel = NSLocalizedString("kCancelButtonLabel", comment: "Decline Button")
SwiftyiRate.sharedInstance.remindButtonLabel = NSLocalizedString("kRemindButtonLabel", comment: "Remind Button")
SwiftyiRate.sharedInstance.rateButtonLabel = NSLocalizedString("kRateButtonLabel", comment: "Rate Button")
}
首次构建和运行基本的Mac或iPhone示例项目时,它将显示一个提示弹窗,要求您对应用进行评分。这是因为已经设置了previewMode选项。
禁用previewMode选项,并尝试其他设置,以了解应用程序在实际使用中的表现。
高级示例演示了您如何使用SwiftyiRateDelegate方法实现一个完全定制的SwiftyiRate界面。自动提示已关闭,用户可以选择点击“评分该应用”按钮来评分应用程序。
点击该按钮后,应用程序首先检查应用商店是否可用(如果电脑没有互联网连接或者apple.com宕机,则可能不可用),然后启动Mac App Store。
此示例针对Mac OS,但相同的原理也可以应用于iOS。
版本 1.0