转载

iRate快速绕坑使用

目的

iRate库通过激励用户去AppStore打分,来帮助你提升iPhone和Mac App的质量。这是取得经常使用的目标用户的意见的最好的方式之一。

方案(小弟想说的重点)

以前,App中都是显示的添加“去打分”功能项。但是由于苹果审核人员工作的时候会根据心情,判断是否有“引导用户打分行为”而Reject咱辛苦搞好的App,所以建议把“去打分”功能项隐藏。

用别人的库还是得看懂源码,要不真不放心,对吧?!

别的地方都可以不看,唯独 shouldPromptForRating 这个方法必须看,用于判断是否满足提醒条件。

有两套方案可以玩:

方案1:

通过配置iRate,在App启动的时候检查配置和AppStore,来进行判断是否需要弹出打分提醒。采用此方案,无需对iRate源码进行剪裁,但是每次启动都要检查AppStore,自定义能力较差。

方案2:

通过配置iRate,去掉检查AppStore的部分,根据自己服务端提供的信息,来判断是否需要弹出打分提醒。采用此方案,灵活性较高,App在审核中可以通过服务端关掉提醒,待通过审核后放开提醒。

支持的 OS & SDK 版本

支持环境- iOS 8.3 / Mac OS 10.10 (Xcode 6.1, Apple LLVM compiler 6.1)

ARC 支持

从1.7开始,iRate需要使用ARC。如果你在使用非ARC项目,只需要在iRate.m上添加“-fobjc-arc”编译标志(Build Phases->Compile Sources->双击iRate.m->添加-fobjc-arc)

安装

集成iRate时,只需要添加iRate.h,.m,.bundle三个文件到项目中,如果不在乎本地化也可以忽略.bundle文件。

iRate是典型的安全不用配置,就可以简单的运行起来,内部是通过应用的bundle ID到AppStore中查找AppID。

如果想自定义iRate,最好在App完成启动之前,最简单的方式是添加配置代码到AppDelegate的initialize方法中: (本人不推荐放在这里,建议放到完全启动完App后进行)

Objective-C

#import "iRate.h"  + (void)initialize {     //configure iRate     [iRate sharedInstance].daysUntilPrompt = 5;     [iRate sharedInstance].usesUntilPrompt = 15; }
#import "iRate.h"   +(void)initialize {     //configure iRate     [iRatesharedInstance].daysUntilPrompt=5;     [iRatesharedInstance].usesUntilPrompt=15; }  

配置项

可以通过配置iRate中的相关属性,来影响提醒弹出的行为,主要是

Objective-C

@property (nonatomic, assign) float daysUntilPrompt;//启动几次后开始弹出,默认10次  @property (nonatomic, assign) NSUInteger usesUntilPrompt;//使用几次后开始弹出,默认10次  @property (nonatomic, assign) NSUInteger eventsUntilPrompt;//发生几次事件后弹出,默认是10次,不是启动事件,相当于自定义事件  @property (nonatomic, assign) float usesPerWeekForPrompt;//每周最多弹出几次  @property (nonatomic, assign) float remindPeriod;//选择“稍后提醒我”后的再提醒时间间隔,默认是1天  @property (nonatomic, copy) NSString *messageTitle;//提醒框的title  @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;//是否支持本地化  @property (nonatomic, assign) BOOL promptForNewVersionIfUserRated;//每个版本都弹出提醒  @property (nonatomic, assign) BOOL onlyPromptIfLatestVersion;//只是最新版提醒  @property (nonatomic, assign) BOOL promptAtLaunch;//启动或者回到前台就尝试提醒  @property (nonatomic, assign) BOOL verboseLogging;//控制台输出log  @property (nonatomic, assign) BOOL useUIAlertControllerIfAvailable;//使用UIAlertController
@property(nonatomic,assign)floatdaysUntilPrompt;//启动几次后开始弹出,默认10次   @property(nonatomic,assign)NSUIntegerusesUntilPrompt;//使用几次后开始弹出,默认10次   @property(nonatomic,assign)NSUIntegereventsUntilPrompt;//发生几次事件后弹出,默认是10次,不是启动事件,相当于自定义事件   @property(nonatomic,assign)floatusesPerWeekForPrompt;//每周最多弹出几次   @property(nonatomic,assign)floatremindPeriod;//选择“稍后提醒我”后的再提醒时间间隔,默认是1天   @property(nonatomic,copy)NSString*messageTitle;//提醒框的title   @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)BOOLuseAllAvailableLanguages;//是否支持本地化   @property(nonatomic,assign)BOOLpromptForNewVersionIfUserRated;//每个版本都弹出提醒   @property(nonatomic,assign)BOOLonlyPromptIfLatestVersion;//只是最新版提醒   @property(nonatomic,assign)BOOLpromptAtLaunch;//启动或者回到前台就尝试提醒   @property(nonatomic,assign)BOOLverboseLogging;//控制台输出log   @property(nonatomic,assign)BOOLuseUIAlertControllerIfAvailable;//使用UIAlertController  

高级特性

Objective-C

@property (nonatomic, strong) NSURL *ratingsURL;//打分页面的URL  @property (nonatomic, strong) NSDate *firstUsed;//第一次弹出时间,参考daysUntilPrompt设置  @property (nonatomic, strong) NSDate *lastReminded;//最后一次弹出提醒时间  @property (nonatomic, assign) NSUInteger usesCount;//当前版本弹出次数  @property (nonatomic, assign) NSUInteger eventCount;//当前版本事件次数  @property (nonatomic, readonly) float usesPerWeek;//当前版本每周弹出次数  @property (nonatomic, assign) BOOL declinedThisVersion;//用户是否拒绝当前版本打分请求  @property (nonatomic, assign) BOOL declinedAnyVersion;//用户是否拒绝所有版本打分请求,设置YES不提醒  @property (nonatomic, assign) BOOL ratedThisVersion;//当前版本是否已经打过分  @property (nonatomic, readonly) BOOL ratedAnyVersion;//之前版本都打过分  @property (nonatomic, assign) id<iRateDelegate> delegate;
@property(nonatomic,strong)NSURL*ratingsURL;//打分页面的URL   @property(nonatomic,strong)NSDate*firstUsed;//第一次弹出时间,参考daysUntilPrompt设置   @property(nonatomic,strong)NSDate*lastReminded;//最后一次弹出提醒时间   @property(nonatomic,assign)NSUIntegerusesCount;//当前版本弹出次数   @property(nonatomic,assign)NSUIntegereventCount;//当前版本事件次数   @property(nonatomic,readonly)floatusesPerWeek;//当前版本每周弹出次数   @property(nonatomic,assign)BOOLdeclinedThisVersion;//用户是否拒绝当前版本打分请求   @property(nonatomic,assign)BOOLdeclinedAnyVersion;//用户是否拒绝所有版本打分请求,设置YES不提醒   @property(nonatomic,assign)BOOLratedThisVersion;//当前版本是否已经打过分   @property(nonatomic,readonly)BOOLratedAnyVersion;//之前版本都打过分   @property(nonatomic,assign)id<iRateDelegate>delegate;  

方法接口

Objective-C

- (void)logEvent:(BOOL)deferPrompt;//发生事件进行添加  - (BOOL)shouldPromptForRating;//通过对上面各个配置参数的检查,返回YES可以提醒,NO不满足提醒条件  - (void)promptForRating;//弹出提醒  - (void)promptIfNetworkAvailable;//如果网络有效将检查AppStore的App信息  - (void)promptIfAllCriteriaMet;//检查shouldPromptForRating和promptIfNetworkAvailable方法是否满足  - (void)openRatingsPageInAppStore;//打开打分提醒AppStore页面
-(void)logEvent:(BOOL)deferPrompt;//发生事件进行添加   -(BOOL)shouldPromptForRating;//通过对上面各个配置参数的检查,返回YES可以提醒,NO不满足提醒条件   -(void)promptForRating;//弹出提醒   -(void)promptIfNetworkAvailable;//如果网络有效将检查AppStore的App信息   -(void)promptIfAllCriteriaMet;//检查shouldPromptForRating和promptIfNetworkAvailable方法是否满足   -(void)openRatingsPageInAppStore;//打开打分提醒AppStore页面  

代理方法

iRateDelegate代理提供下面一些方法,通过这些方法,可以打断或重写相关方法来影响默认行为。所有方法都是可选的。这些方法跟上面的iRate方法有些关联,使用时注意。具体含义参考命名就可以了。

Objective-C

- (void)iRateCouldNotConnectToAppStore:(NSError *)error;  - (void)iRateDidDetectAppUpdate;  - (BOOL)iRateShouldPromptForRating;  - (void)iRateDidPromptForRating;  - (void)iRateUserDidAttemptToRateApp;  - (void)iRateUserDidDeclineToRateApp;  - (void)iRateUserDidRequestReminderToRateApp;  - (BOOL)iRateShouldOpenAppStore;  - (void)iRateDidOpenAppStore;
-(void)iRateCouldNotConnectToAppStore:(NSError*)error;   -(void)iRateDidDetectAppUpdate;   -(BOOL)iRateShouldPromptForRating;   -(void)iRateDidPromptForRating;   -(void)iRateUserDidAttemptToRateApp;   -(void)iRateUserDidDeclineToRateApp;   -(void)iRateUserDidRequestReminderToRateApp;   -(BOOL)iRateShouldOpenAppStore;   -(void)iRateDidOpenAppStore;  

本地化

iRate支持很多语言的本地化,参见bundle,一些常用key:

Objective-C

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";
staticNSString*constiRateMessageTitleKey=@"iRateMessageTitle"; staticNSString*constiRateAppMessageKey=@"iRateAppMessage"; staticNSString*constiRateGameMessageKey=@"iRateGameMessage"; staticNSString*constiRateUpdateMessageKey=@"iRateUpdateMessage"; staticNSString*constiRateCancelButtonKey=@"iRateCancelButton"; staticNSString*constiRateRemindButtonKey=@"iRateRemindButton"; staticNSString*constiRateRateButtonKey=@"iRateRateButton";  

注: 文章由我们iOS122的小伙伴 @笨儿高兴~ 整理,喜欢就一起参与:iOS122 任务池

正文到此结束
Loading...