它将不会收到任何以后的更新或错误修复。如果您正在使用它,请迁移到另一个解决方案。
Irate是一个库,可通过提示用户在使用该应用程序几天后对用户进行评分来帮助您推广iPhone和Mac App Store应用程序。这种方法是通过仅针对普通用户(大概喜欢该应用程序,或者他们不会继续使用它)来获得正面应用程序评论的最佳方法之一。
注意:“支持”意味着该库已通过此版本进行了测试。 “兼容”意味着该库应在此OS版本上使用(即它不依赖于任何不可用的SDK功能),但不再对兼容性进行测试,并且可能需要调整或错误修复才能正确运行。
从1.7版开始,愤怒需要弧线。如果您想在非ARC项目中使用IRATE,只需将-FOBJC-ARC编译器标志添加到Irate.m类。为此,请转到目标设置中的“构建阶段”选项卡,打开编译源组,双击列表中的iRate.m,然后输入-fobjc-arc中的copover。
如果您希望将整个项目转换为ARC,请在iRate.m中注释#Error行,然后运行编辑>重构>转换为Xcode中的objection-c arc ...检查(包括iRate.m)的使用弧。
愤怒使用内部使用线程来避免阻止UI,但是愤怒的外部接口都不是线程安全,除了主线程外,您不应调用任何方法或设置Irate上的任何属性。
要将iRate安装到您的应用中,请将iRate.h,.m和.bundle Files拖到项目中。如果您对本地化文本不感兴趣,则可以省略.Bundle。
Irate通常根本不需要配置,并且只需使用应用程序的捆绑包ID即可自动运行。
注意:如果您在Mac和iOS App商店上都有具有匹配捆绑ID的应用程序(即使它们使用不同的资本化),查找机制将无法正常工作,因此您需要手动设置AppStoreID属性,这是一个设置应用程序后,可以在iTunes Connect中找到的数字ID。另外,如果要创建一个沙盒Mac应用程序,并且您的应用程序不请求网络访问权限,则需要设置AppStoreID,因为它无法从iTunes服务中检索。
如果您确实想自定义愤怒,那么最好的时间是在您的AppDelegate的-[application:didFinishLaunchingWithOptions:]
方法中。以后应用配置可能不起作用,因为该提示可能已经显示了这一点:
#import "iRate.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//configure iRate
[iRate sharedInstance].daysUntilPrompt = 5;
[iRate sharedInstance].usesUntilPrompt = 15;
return YES;
}
为了配置愤怒,愤怒类的许多属性可以改变愤怒的行为和外观。这些应该主要是自我解释的,但是它们在下面记录在下面:
@property (nonatomic, assign) NSUInteger appStoreID;
这应该匹配应用程序的iTunes应用ID,设置应用程序后可以从iTunes连接中获得。此值通常不是必需的,通常只有在您在Mac和iOS应用程序的捆绑ID之间或SandBoxed Mac应用程序之间存在上述冲突,如果您的应用程序没有网络许可,则需要此值。能够使用iTunes服务自动获取AppStoreID。
@property (nonatomic, assign) NSUInteger appStoreGenreID;
这是用于确定评级对话框的默认文本的应用类型。这是通过调用iTunes服务自动设置的,因此您无需为大多数目的手动设置它。如果您确实希望覆盖此值,则将其设置为iRateAppStoreGameGenreID
常数将导致Irate使用评级对话框的“游戏”版本,并将其设置为任何其他值,将使用评级对话框的“应用程序”版本。
@property (nonatomic, copy) NSString *appStoreCountry;
这是用于指定要检查哪个iTunes存储的两个字母的国家代码。它是从设备语言环境首选项中自动设置的,因此在大多数情况下不需要更改。如果您愿意,您可以将其覆盖以指向美国商店或其他特定商店,如果您的应用仅在某些国家 /地区可用,这可能是一个好主意。
@property (nonatomic, copy) NSString *applicationName;
这是Irate警报中显示的应用程序的名称。它是从应用程序的信息中自动设置的。
@property (nonatomic, copy) NSString *applicationBundleID;
这是应用程序包ID,用于从iTunes检索appStoreID
和appStoreGenreID
。这是从应用程序的info.plist自动设置的,因此除了测试目的外,您不需要更改它。
@property (nonatomic, assign) float daysUntilPrompt;
这是用户在提示将应用程序对其进行评级之前必须安装的天数的数量。时间是从应用程序启动的第一次来衡量。这是一个浮点值,因此可以用来指定分数的天数(例如0.5)。默认值为10天。
@property (nonatomic, assign) NSUInteger usesUntilPrompt;
这是用户在提示对其进行评级之前必须启动该应用程序的最小次数。这样可以避免用户一次运行该应用程序的情况,而不会在数周内查看它,然后再启动它,只是要立即提示它进行评分。最小使用计数可确保仅提示频繁的用户。该提示只有在指定的天数之后才会出现并已达到用途。此默认为10使用。
@property (nonatomic, assign) NSUInteger eventsUntilPrompt;
对于某些应用程序,启动并不是使用的好指标。例如,该应用程序可能是一个持续运行的守护程序,或者在用户达到特定级别之前不能编写知情评论的游戏。在这种情况下,您可以手动记录重要事件,并在预定数量的这些事件中出现提示。像使用UnuntilPrompt设置一样,该提示只有在指定的天数和事件数之后出现,但是一旦达到一天的阈值,如果达到事件阈值或使用阈值,则会出现提示。这默认为10个事件。
@property (nonatomic, assign) float usesPerWeekForPrompt;
如果您不太关心使用该应用程序的总数,但希望使用应用程序使用的频率,则可以使用usesPerWeekForPrompt
属性来设置用户必须启动的次数的最小阈值每周(平均)显示提示的应用程序。请注意,这是自应用程序安装以来的平均值,因此,如果用户长时间不运行应用程序,则可能会丢掉平均值。默认值为零。
@property (nonatomic, assign) float remindPeriod;
应用程序在选择“稍后提醒我”选项(以几天的测量)之后,该应用程序应等待多长时间。零值意味着该应用将提醒用户下一个启动。请注意,此值取代了其他条件,因此即使在此期间发布了新版本,该应用程序也不会在提醒期间提示评级。这默认为1天。
@property (nonatomic, copy) NSString *messageTitle;
标题显示为评级提示。如果您不想显示标题,请将其设置为@""
;
@property (nonatomic, copy) NSString *message;
评级提示消息。这应该是有礼貌和礼貌的,但不太言行。如果您不想显示消息,请将其设置为@""
;
@property (nonatomic, copy) NSString *updateMessage;
这是一条消息,适用于以前对应用程序进行评分的用户,并鼓励他们重新速率。这使您可以自定义这些用户的消息。如果您不为此情况提供自定义消息,则将使用标准消息。
@property (nonatomic, copy) NSString *cancelButtonLabel;
按钮标签的按钮可删除评级提示,而无需对应用程序进行评级。
@property (nonatomic, copy) NSString *rateButtonLabel;
如果用户想对应用程序进行评分,则按下按钮的按钮标签。
@property (nonatomic, copy) NSString *remindButtonLabel;
如果用户不想立即对应用程序进行评分,则按下按钮的按钮标签,但希望将来提醒它。将其设置为@""
如果您不想显示提醒我按钮 - 例如,如果您没有屏幕上的空间。
@property (nonatomic, assign) BOOL useAllAvailableLanguages;
默认情况下,即使在不支持本地化的应用程序中使用,irate也会使用iRate.bundle中的所有可用语言。如果您宁愿限制Irate仅使用应用程序已经支持的相同语言集,请将此属性设置为否。 (默认为是)。
@property (nonatomic, assign) BOOL promptForNewVersionIfUserRated;
由于iTunes评分是特定于版本的,因此您理想地希望用户对应用程序的每个新版本进行评分。真正喜欢您的应用程序的用户可能愿意更新其新版本的评论。 SET PINST promptForNewVersionIfUserRated
to YES
,IRATE每次安装更新时都会再次提示用户拒绝对应用程序进行评分。如果他们拒绝,他们将不会再次被要求。
@property (nonatomic, assign) BOOL onlyPromptIfLatestVersion;
即使用户未运行该应用程序的最新版本,也将其设置为“否”启用额定提示。这默认为“是”,因为那种用户不会因您已经修复的错误而不会留下不良评论。
@property (nonatomic, assign) BOOL onlyPromptIfMainWindowIsAvailable;
此设置仅适用于Mac OS。默认情况下,在Mac OS上,Irate警报显示为主窗口上的表格。某些应用程序没有主窗口,因此此方法不起作用。对于此类应用程序,将此属性设置为no,以允许将愤怒的警报显示为常规模态窗口。
@property (nonatomic, assign) BOOL promptAtLaunch;
将其设置为否,以便在应用程序启动或从后台返回时自动出现评级提示。评级标准将继续进行跟踪,但是在此设置有效时,提示将不会自动显示。如果您想手动控制评级提示符的显示,则可以使用此选项。
@property (nonatomic, assign) BOOL verboseLogging;
此选项将导致Irate将详细日志发送到有关及时决策过程的控制台。如果您的应用程序未正确提示您期望的评级,这将帮助您弄清楚原因。默认情况下,在调试构建上启用了详细的记录,并在发布和部署构建中禁用。
@property (nonatomic, assign) BOOL previewMode;
如果设置为“是”,Irate将始终在启动时显示评级提示,无论应用程序已经使用了多长时间还是最新版本(除非您已明确禁用了promptAtLaunch
选项)。使用此操作来校对您的消息,并在测试过程中检查您的配置是否正确,但将其禁用以获取最终版本(默认为no)。
@property (nonatomic, assign) BOOL useUIAlertControllerIfAvailable;
默认情况下,iRate将在iOS上使用uialertview来显示评级提示。 UialertView在ios8中被弃用,并由UialertController取代。不幸的是,与UialerTview不同,使用UialertController表示警报会干扰该应用程序显示其他控制器的能力,并且由于The Orate可以在应用程序一生中的任何时刻在任何时刻显示警报,因此它可能与应用程序试图呈现另一个视图控制器的应用程序发生冲突。因此,默认情况下禁用了UialertController的使用。如果您确定它不会与您的应用程序逻辑发生冲突(例如,如果您已禁用自动评级提示,或者您的应用不使用任何模态视图控制器),则应将此属性设置为YES。
@property (nonatomic, assign) BOOL useSKStoreReviewControllerIfAvailable;
默认情况下,Irate将使用SkstoreReViewController在iOS 10.3及以上请求评论。为了禁用此功能,SET seet useSKStoreReviewControllerIfAvailable
为NO
。
如果默认的愤怒行为不符合您的要求,则可以使用高级属性,方法和委托来实现自己的要求。下面的属性使您访问内部状态并覆盖它:
@property (nonatomic, strong) NSURL *ratingsURL;
该应用程序将引导用户到达应用程序的URL,以便他们为应用程序编写评级。这是为给定平台自动设置为正确的值。在iOS 6及以下上方,将用户直接进入评级页面,但是在iOS 7和Mac OS上,它将用户带到主应用程序页面(如果有一种直接链接到这些平台上的评分页面的方法,那么我尚未找到它)。如果您要实现自己的评级提示,则可能应该使用openRatingsPageInAppStore
方法,尤其是在Mac OS上,因为打开Mac App Store的过程比仅打开URL更为复杂。
@property (nonatomic, strong) NSDate *firstUsed;
用户启动该应用程序当前版本的第一个日期。这用于计算是否满足DaysuntilPrompt标准。
@property (nonatomic, strong) NSDate *lastReminded;
用户上次要求提醒的日期稍后对应用程序进行评分。
@property (nonatomic, assign) NSUInteger usesCount;
当前版本的应用程序已使用(启动)的次数。
@property (nonatomic, assign) NSUInteger eventCount;
自当前版本安装以来已记录的重要应用程序事件的数量。这是通过logevent方法递增的,但也可以直接操纵。查看事件演示,以了解该操作系统的使用方式。
@property (nonatomic, readonly) float usesPerWeek;
该应用程序当前版本的平均次数已被使用(启动)。
@property (nonatomic, assign) BOOL declinedThisVersion;
此标志指示用户是否拒绝对当前版本(是)(否)进行评分。愤怒提示逻辑当前尚未使用此功能,但可能对实现自己的逻辑有用。
@property (nonatomic, assign) BOOL declinedAnyVersion;
此标志指示用户是否已拒绝对应用程序的任何先前版本(是)(否)进行评分。如果将其设置为“是”,IRATE不会自动提示用户。
@property (nonatomic, assign) BOOL ratedThisVersion;
此标志指示用户是否已经对当前版本(是)(否)进行了评分。
@property (nonatomic, readonly) BOOL ratedAnyVersion;
此(ROADONLY)标志指示用户以前是否已对应用程序的任何版本(是)(否)进行了评级。
@property (nonatomic, assign) id<iRateDelegate> delegate;
您提供的对象实现了下面记录的iRateDelegate
协议。使用此操作来检测和/或覆盖Irate的默认行为。这将默认为应用程序委托,因此,如果您将应用程序委派作为愤怒委托,则无需设置此属性。
除了配置外,Irate还具有以下方法:
- (BOOL)shouldPromptForRating;
返回是,如果达到及时标准,则否,如果没有返回。如果您在应用程序启动时禁用了自动显示,则可以使用它来决定何时显示评级提示。调用此方法不会呼叫iRateShouldPromptForRating
代表方法。
- (void)promptForRating;
此方法将立即触发评级提示,而无需检查App Store是否可用,并且无需调用IrateshouldShouldFormptForrated委托法。请注意,此方法取决于appStoreID
和applicationGenre
属性,这些属性仅在轮询iTunes服务器后才检索,因此,如果您打算直接调用此方法,则需要事先设置这些属性,或者使用promptIfNetworkAvailable
方法。
- (void)promptIfNetworkAvailable;
此方法将检查App Store是否可用,如果是,则将向用户显示评级提示。在显示警报之前,将调用Irateshould -hould授予授权的委托方法,以便您可以拦截它。请注意,如果您的应用程序是沙盒,并且没有网络访问权限,则此方法将忽略网络可用性状态,但是在这种情况下,您需要手动设置appStoreID
或IRATE无法运行。
- (void)promptIfAllCriteriaMet;
此方法将检查是否满足了所有提示条件,以及App Store是否可用,如果是,则将向用户显示评级提示。在显示警报之前,将调用Irateshould -hould授予授权的委托方法,以便您可以拦截它。
- (void)openRatingsPageInAppStore;
此方法会跳过用户警报,并在Mac或iPhone应用程序商店中打开应用评级页面,具体取决于Irate正在运行的平台。此方法没有执行任何检查以验证机器具有网络访问或应用程序存储是否可用。它也不称为-iRateShouldOpenAppStore
委托法。您应该使用此方法打开评级页面,而不是评级属性,因为在许多情况下,启动App Store的过程比仅打开URL更为复杂。请注意,此方法取决于appStoreID
仅在轮询iTunes服务器后才检索。如果您在不先进行更新检查的情况下调用此方法,则需要事先设置appStoreID
属性,或者风险该方法可能需要一些时间进行网络调用,或者完全失败。关于成功,此方法将调用-iRateDidOpenAppStore
委托方法。在失败时,它将调用-iRateCouldNotConnectToAppStore:
委托方法。
- (void)logEvent:(BOOL)deferPrompt;
该方法可以从应用程序中的任何地方(在配置了愤怒之后)调用,并增加了愤怒的事件计数。当达到预定义的事件数量时,将显示评级提示。可选的延迟参数用于确定是否会立即显示提示(否)或应用程序将等到下一个启动(是)。
- (void)remindLater;
此方法重置提醒期。
Indedelegate协议提供了以下方法,这些方法可以使用,这些方法可以使用截取的生气事件并覆盖默认行为。所有方法都是可选的。
- (void)iRateCouldNotConnectToAppStore:(NSError *)error;
如果iRate无法连接到App Store,则通常是因为网络连接关闭。如果您的应用程序由于沙盒权限而无法访问网络,则可能会触发,在这种情况下,您需要手动设置AppStoreId,以使Irate仍然可以运行。
- (void)iRateDidDetectAppUpdate;
如果iRate检测到该应用程序自上次启动以来已经更新了该应用程序,则调用此方法。
- (BOOL)iRateShouldPromptForRating;
在将评级提示显示给用户之前,该方法立即调用。除了标准规则外,您还可以使用此方法来实现自定义提示逻辑。您还可以使用此方法阻止标准提示警报并以不同的方式显示评级提示,或者完全绕过它。
- (void)iRateDidPromptForRating;
在显示额定提示之前,该方法立即调用。如果您使用分析来跟踪哪些用户查看提示,然后转到App Store,这将很有用。这可以帮助您微调何时/如何显示提示的情况。
- (void)iRateUserDidAttemptToRateApp;
当用户按评级提示符中的速率按钮时,这就是调用。如果您想记录用户与愤怒的互动,这将很有用。仅当您使用标准的iRate警报视图提示符时,才调用此方法,并且如果您提供自定义评级实现或直接调用openRatingsPageInAppStore
方法,则不会自动调用此方法。
- (void)iRateUserDidDeclineToRateApp;
当用户拒绝评级应用程序时,这就是调用。如果您想记录用户与愤怒的互动,这将很有用。仅当您使用标准iRate警报视图提示符时,此方法才会调用,并且在提供自定义评级实现时不会自动调用。
- (void)iRateUserDidRequestReminderToRateApp;
当用户要求提醒用户对应用程序进行评分时,这就是调用。如果您想记录用户与愤怒的互动,这将很有用。仅当您使用标准iRate警报视图提示符时,此方法才会调用,并且在提供自定义评级实现时不会自动调用。
- (BOOL)iRateShouldOpenAppStore;
在愤怒尝试打开App Store之前,该方法立即调用。如果您想实现自己的评分页面显示逻辑,请返回否。
- (void)iRateDidOpenAppStore;
愤怒打开App Store之后,此方法立即被调用。
愤怒的默认字符串已经针对多种语言进行了本地化。默认情况下,愤怒将使用愤怒中的所有本地化。即使在不是本地化的应用程序中,或者仅本地化与愤怒支持的语言的子集。愤怒的字符串键是:
static NSString *const iRateMessageTitleKey = @"iRateMessageTitle";
static NSString *const iRateAppMessageKey = @"iRateAppMessage";
static NSString *const iRateGameMessageKey = @"iRateGameMessage";
static NSString *const iRateUpdateMessageKey = @"iRateUpdateMessage";
static NSString *const iRateCancelButtonKey = @"iRateCancelButton";
static NSString *const iRateRemindButtonKey = @"iRateRemindButton";
static NSString *const iRateRateButtonKey = @"iRateRateButton";
如果您希望Irate仅使用应用程序中启用的本地化(因此,如果您的应用仅支持英语,法语和西班牙语,那么即使irate包括德语,也将自动对这些语言进行本地化,但不适合德语语言文件),将useAllAvailableLanguages
选项设置为NO。
不建议您修改iRate.bundle中的字符串文件,因为它会使更新到较新版本的irate更加复杂。这个例外是,如果您想向Github上的Irate项目中的本地化提交其他语言,改进或更正(非常感谢)。
如果您想在应用程序中添加irate的其他语言而不将其提交给GitHub项目,则可以将这些字符串直接添加到项目文件夹中的适当的lotizable.strings文件中。如果您想替换某些或全部默认的愤怒字符串,最简单的选项是将这些字符串仅复制到您自己的interizable.strings.strings文件中,然后对其进行修改。愤怒将自动使用主应用程序捆绑包中的字符串,而不是愤怒束中的字符串,因此您可以以这种方式覆盖任何字符串。
如果您不想使用任何默认的本地化,则可以完全忽略irate.bundle。请注意,如果您只想支持愤怒支持的一部分语言,则无需从iRate.bundle中删除其他字符串文件 - 只需将useAllAvailableLanguages
设置为否,而Irate只会使用您的应用程序已经支持的语言。
仍然支持通过使用单个设置器方法(请参见下文)覆盖Irate的默认字符串的旧方法,但是推荐的方法现在是将这些字符串添加到您的项目的Lentizable.strings.strings.strings文件中,该文件将自动检测到Irate。
+ (void)initialize
{
//overriding the default iRate strings
[iRate sharedInstance].messageTitle = NSLocalizedString(@"Rate MyApp", @"iRate message title");
[iRate sharedInstance].message = NSLocalizedString(@"If you like MyApp, please take the time, etc", @"iRate message");
[iRate sharedInstance].cancelButtonLabel = NSLocalizedString(@"No, Thanks", @"iRate decline button");
[iRate sharedInstance].remindButtonLabel = NSLocalizedString(@"Remind Me Later", @"iRate remind button");
[iRate sharedInstance].rateButtonLabel = NSLocalizedString(@"Rate It Now", @"iRate accept button");
}
首次构建并运行基本的Mac或iPhone示例项目时,它将显示一个警报,要求您对应用程序进行评分。这是因为设置了PreviewMode选项。
禁用PreviewMode选项并使用其他设置播放,以查看应用程序在实践中的行为。
高级示例演示了您如何使用IratedElegate方法实现完全定制的愤怒界面。自动提示被禁用,而用户可以选择通过按“评分此应用程序”按钮来评估应用程序。
按下时,该应用首先检查App Store是否可用(如果计算机没有Internet Connection或Apple.com关闭),然后启动Mac App Store。
该示例是用于MAC OS的,但是可以在iOS上应用相同的原理。
版本1.12.2
版本1.12.1
版本1.12
版本1.11.7
版本1.11.6
版本1.11.5
版本1.11.4
canOpenURL:
版本1.11.3
版本1.11.2
版本1.11.1
版本1.11
promptIfCriteriaMet
便利方法NSNotificationCenter
通知作为代表的替代UIAlertController
而不是UIAlertView
如果有)版本1.10.3
版本1.10.2
版本1.10.1
版本1.10
daysUntilPrompt
期间的评级弹出窗口promptForNewVersionIfUserRated
选项,以重新提交以前额定的用户(默认为OFF)updateMessage
属性,以与promptForNewVersionIfUserRated
选项一起使用1.9.3版
版本1.9.2
版本1.9.1
版本1.9
promptAgainEachVersion
选择选项版本1.8.3
版本1.8.2
版本1.8.1
版本1.8
版本1.7.5
版本1.7.4
版本1.7.3
版本1.7.2
版本1.7.1
版本1.7
版本1.6.2
版本1.6.1
版本1.6
版本1.5.3
版本1.5.2
版本1.5.1
1.5版
版本1.4.9
版本1.4.8
版本1.4.7
版本1.4.6
版本1.4.5
版本1.4.4
版本1.4.3
版本1.4.2
版本1.4.1
版本1.4
版本1.3.5
版本1.3.4
iRateDidDetectAppUpdate
代表方法版本1.3.3
版本1.3.2
版本1.3.1
版本1.3
版本1.2.3
版本1.2.2
版本1.2.1
MAC_APP_STORE_REFRESH_DELAY
升至5秒,以支持旧机器版本1.2
版本1.1
1.0版