ADAppRater 1.1.3

ADAppRater 1.1.3

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布上次发布2017年11月

Amir Shavit维护。




ADAppRater-iOS
CocoaPods Version
Build Status

ADAppRater

** 注意!版本 1.1.3 使用了更新到的商店 URL。**
要使用之前的 API,请参见以下开发者工具中的 useOldApiFlow

ADAppRater 是一个组件,旨在通过针对满意的用户并询问他们评分您的应用程序来帮助您在 App Store 中推广您的应用。

通过定位经常与您的应用程序互动并给予高度评价的用户,这种方法是获得正面应用评论的最好方法之一。经过简单的安装过程,您可以在几周内看到您在应用到店中的评分有显著提高。

支持

  • 适用于 iOS 8
  • ADAppRater 使用 ARC

评分流程

  • 首先检查用户满意度
  • 将满意的用户引导到应用商店中公开反馈
  • 将不满意的用户引导到私下发送直接反馈给您

特性

  • 只针对满意的用户以获得更高的应用商店评分
  • 收集来自不满意用户的宝贵反馈和投诉
  • 易于定义使用参数以针对有经验的用户
  • 支持多个重大事件的场景,以便针对已完成流程的用户
  • 基于 UIAlertController 类(iOS 8 及更高版本)
  • 自定义视图代理来创建您自己的自定义 UI

安装

Cocoa pod

pod 'ADAppRater', '~> 1.1.3'

标准安装

  1. 将项目下载到桌面
  2. 将 'ADAppRater' 文件夹拖放到您的项目中
  3. 当提示时 - 标记为‘需要时复制项目’

不要忘记在需要的地方加入 #import "ADAppRater.h"

配置

ADAppRater 不需要配置且可以直接执行,只需使用默认配置和当前应用程序的当前 Plist 详情。

如果您确实希望配置 ADAppRater,建议在应用程序完成启动之前进行,即在 AppDelegate 的 application: didFinishLaunchingWithOptions: 方法中,如下所示

#import "ADAppRater.h"

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
  // Override point for customization after application launch.
  [ADAppRater sharedInstance].currentVersionDaysUntilPrompt = 1;
  [ADAppRater sharedInstance].currentVersionLaunchesUntilPrompt = 3;
  [ADAppRater sharedInstance].remindWaitPeriod = 5;
  [ADAppRater sharedInstance].promptForNewVersionIfUserRated = NO;
  [ADAppRater sharedInstance].limitPromptFrequency = 30;
  
  return YES;
}
  • currentVersionDaysUntilPrompt 是自当前应用程序版本首次启动以来等待提示用户评分应用程序的天数。默认为 1。
  • currentVersionLaunchesUntilPrompt 表示等待在提示用户评分当前应用程序版本之前需要启动的次数。默认为3次。
  • remindWaitPeriod 是等待的天数,以便在用户请求提醒的情况下重新提示用户评分应用程序。
  • promptForNewVersionIfUserRated 如果用户应该被提示为新版本评分,即使他已经评过旧版本,请设置为YES。默认设置为NO。
  • limitPromptFrequency 是提示之间的最小天数(不包括由用户请求的提醒)。默认为30天(每月一次)。
  • invalidateLastResponsePeriod 是两次提示之间的最大天数,允许在一段时间后重新提示满意的用户。默认为180天(约6个月)。设置为0则禁用此功能。

高级配置

ADAppRater支持多个重要事件场景,以针对达到一定目标的用户。

如果用户完成了以下任何场景之一,通常会提示用户评分应用程序,包括基本配置。

// First Scenario: At least 3 events of Type A
ADEventCriteria* criteria1 = [[ADEventCriteria alloc] initWithEventName:@”TypeA” eventCount:3];
ADEventScenario* scenario1 = [[ADEventScenario alloc] initWithEventCriterias:@[criteria1]];

// Second Scenario: At least 5 events of Type B
ADEventCriteria* criteria2 = [[ADEventCriteria alloc] initWithEventName:@”TypeB” eventCount:5];
ADEventScenario* scenario2 = [[ADEventScenario alloc] initWithEventCriterias:@[criteria2]];

// Third Scenario: At least 1 event of each type
ADEventCriteria* criteria3 = [[ADEventCriteria alloc] initWithEventName:@”TypeA” eventCount:1];
ADEventCriteria* criteria4 = [[ADEventCriteria alloc] initWithEventName:@”TypeB” eventCount:1];
ADEventScenario* scenario3 = [[ADEventScenario alloc] initWithEventCriterias:@[criteria3, criteria4]];

[ADAppRater sharedInstance].eventScenariosUntilPrompt = @[scenario1, scenario2, scenario3];

如何使用

- (void)startRaterFlowFromViewController:(__weak UIViewController*)viewController;

立即启动评分流程,首先是检查用户满意度。
唯一检查的条件是确认设备是否在线。

- (void)startRaterFlowIfCriteriaMetFromViewController:(__weak UIViewController*)viewController;

只有当满足所有可配置的标准,至少完成一个事件场景(如果定义过任何),以及应用商店连接可用时,才调用评分流程。

- (BOOL)shouldPromptForRating;

如果所有可配置的标准都满足并至少完成一个事件场景(如果定义过任何),则返回YES
否则返回NO

- (void)registerEvent:(NSString*)eventName withViewController:(__weak UIViewController*)viewController;

调用此方法以通知ADAppRater已发生重要事件。此方法可以在您的应用程序的任何地方调用,并增加事件计数。

此方法还调用startRaterFlowIfCriteriaMetFromViewController:以检查是否已完成任何场景,并且会根据情况提出现有的评分流程。

- (void)promptDirectRatingFromViewController:(__weak UIViewController*)viewController;

立即提示用户评分应用程序,跳过首先检查用户满意度的流程。
唯一检查的条件是设备是否在线。

文本与本地化

ADAppRater基于设备设置和可用翻译进行本地化。本地化基础设施与默认文本有关,但可以进行自定义(见下文)。
如果您想使用默认文本,而您的首选语言不可用,您可以通过复制并翻译'Localizable.strings'文件并提交拉取请求来向项目做出贡献(见下面的“贡献”)。

可用翻译

  • 英语
  • 俄语
  • 德语
  • 西班牙语
  • 法语
  • 意大利语
  • 葡萄牙语
  • 日语
  • 韩语
  • 中文

文本自定义

用于默认UI流程的所有字符串都包含在ADAppRaterTexts类中。您可以选择访问默认实例或创建一个新的实例并覆盖新的实例
[ADAppRater sharedInstance].localStrings
或者

ADAppRaterTexts* newStrings = [[ADAppRaterTexts alloc] initWithApplicationName:@"App Name" feedbackRecipientEmail:@"[email protected]"];
[ADAppRater sharedInstance].localStrings = newStrings;

要自定义ADAppRater将显示的文本,将您自定义的字符串插入到适当的ADAppRaterTexts属性中

@property (nonatomic, strong) NSString* userSatisfactionAlertTitle;
@property (nonatomic, strong) NSString* userSatisfactionAlertMessage;
@property (nonatomic, strong) NSString* userSatisfactionAlertAnswerYes;
@property (nonatomic, strong) NSString* userSatisfactionAlertAnswerNo;

@property (nonatomic, strong) NSString* appRatingAlertTitle;
@property (nonatomic, strong) NSString* appRatingAlertMessage;
@property (nonatomic, strong) NSString* appRatingAlertAnswerRate;
@property (nonatomic, strong) NSString* appRatingAlertAnswerRemindMe;
@property (nonatomic, strong) NSString* appRatingAlertAnswerDontRate;

@property (nonatomic, strong) NSString* userFeedbackAlertTitle;
@property (nonatomic, strong) NSString* userFeedbackAlertMessage;
@property (nonatomic, strong) NSString* userFeedbackAlertAnswerYes;
@property (nonatomic, strong) NSString* userFeedbackAlertAnswerNo;

@property (nonatomic, strong) NSString* thankUserAlertTitle;
@property (nonatomic, strong) NSString* thankUserAlertMessage;
@property (nonatomic, strong) NSString* thankUserAlertDismiss;

@property (nonatomic, strong) NSString* feedbackFormRecipient;
@property (nonatomic, strong) NSString* feedbackFormSubject;
@property (nonatomic, strong) NSString* feedbackFormBody;

反馈表单的电子邮件接收者

要将电子邮件地址设置为默认反馈表单中的收件人,将邮箱地址插入到ADAppRaterTexts属性中

@property (nonatomic, strong) NSString* feedbackFormRecipient;

代理方法

ADAppRater有两种不同类型的协议可以实施。

  • 实现ADARDelegate以通知评分流程的每个步骤。
  • 实现ADARCustomViewsDelegate以在评分流程的每个步骤中使用您自己的自定义视图。

ADARDelegate 协议

所有代理方法都是可选的

- (void)appRaterWillPromptUserSatisfaction;
- (void)appRaterWillPromptUserRating;
- (void)appRaterWillPromptFeedbackRequest;
- (void)appRaterWillDisplayThankYouAlert;

- (void)appRaterUserDidAgreeToRateApp;
- (void)appRaterUserDidDeclineToRateApp;
- (void)appRaterUserDidRequestReminderToRateApp;

- (void)appRaterUserDidAgreeToSendFeedback;
- (void)appRaterUserDidDeclineToSendFeedback;

- (void)appRaterAppStoreDidOpen;
- (void)appRaterAppStoreCouldNotConnect:(NSError*)error;

ADARCustomViewsDelegate 协议

所有代理方法都是可选的

- (void)promptUserSatisfationAlertFromViewController:(UIViewController*)viewController
                                  userSatisfiedBlock:(ADAppRaterCustomViewBlock)userSatisfiedBlock
                               userNotSatisfiedBlock:(ADAppRaterCustomViewBlock)userNotSatisfiedBlock;

实现此方法以在应用程序内提供自定义视图或自定义文本来检查用户满意度。
这是评分流程的第一步。此方法被调用以首先检查用户是否喜欢该应用程序。
如果您不实现此方法,则将使用默认UI和文本。

- (void)promptAppRatingAlertFromViewController:(UIViewController*)viewController
                          userWillRateAppBlock:(ADAppRaterCustomViewBlock)userWillRateAppBlock
                          remindUserLaterBlock:(ADAppRaterCustomViewBlock)remindUserLaterBlock
                              userRefusedBlock:(ADAppRaterCustomViewBlock)userRefusedBlock;

实现此方法,以提供自定义视图或自定义文本来询问用户对应用的评分。
如果用户表示对应用满意,将调用此方法。
如果您不实现此方法,则将使用默认UI和文本。

- (void)promptFeedbackRequestAlertFromViewController:(UIViewController*)viewController
                           userWillSendFeedbackBlock:(ADAppRaterCustomViewBlock)userWillSendFeedbackBlock
                        userWillNotSendFeedbackBlock:(ADAppRaterCustomViewBlock)userWillNotSendFeedbackBlock;

实现此方法,以提供自定义视图或自定义文本来请求用户发送反馈。
如果用户表示对应用不满意,将调用此方法。
如果您不实现此方法,则将使用默认UI和文本。

- (void)displayThankYouAlertFromViewController:(UIViewController*)viewController
                               completionBlock:(ADAppRaterCustomViewBlock)completion;

实现此方法,以提供自定义视图或自定义文本来感谢用户提供的反馈。
如果用户成功发送了反馈,将调用此方法。
如果您不实现此方法,则将使用默认UI和文本。

- (void)presentFeedbackFormFromViewController:(UIViewController*)viewController
                        userSentFeedbackBlock:(ADAppRaterCustomViewBlock)userSentFeedbackBlock
                  userDidNotSendFeedbackBlock:(ADAppRaterCustomViewBlock)userDidNotSendFeedbackBlock;

实现此方法,以提供建议的表单或自定义文本提供反馈的电子邮件/表单。
如果用户在表示对应用不满意之后同意发送反馈,将调用此方法。
如果您未实现此方法,则将使用默认电子邮件应用。

开发者工具配置

ADAppRater支持几个属性,以帮助开发者调试。

@property (nonatomic) BOOL enableLog;

ADAppRater有许多日志消息以跟踪流程和状态。禁用日志消息将停止将这些日志输出到控制台。
默认为NO(用于生产环境)。设置为YES以开始打印日志消息。

@property (nonatomic) BOOL previewMode;

如果设置为YES,无论配置如何或记录的事件的重要性如何,ADAppRater都将始终启动提示流程。使用此功能在测试期间校对文本。
此属性通过DEBUG编译标志进行包装,因此它不会出现在发行编译中。
确保您的应用对属性的任何调用也用编译标志包装或删除,然后再提交。

- (void)useOldApiFlow;

一个开发者方法,将工作流程重置为使用旧URL。
仅用作切换。 旧URL将很快被删除,此功能也将被删除。

- (void)resetUsageHistory;

一个开发者方法,将保存的重要事件的已使用情况重置为从头开始。

此方法通过DEBUG编译标志进行包装,因此它不会出现在发行编译中。
确保您的应用对此方法的任何调用也用编译标志包装或删除,然后再提交。

- (void)appRaterLogToConsole:(NSString*)message;

ADARDelegate协议的一部分。实现此方法以提供自定义日志组件(而不是NSLog)。可选

示例项目

  1. 将项目下载到桌面
  2. 打开‘ADAppRater演示’App
  3. 此演示应用展示了4种使用组件的方法
  4. 无场景的默认UI流程
  5. 具有自定义字符串的默认UI流程
  6. 无场景的自定义视图委托实现
  7. 带有重要事件多个场景的默认UI流程
  • 注意日志控制台以跟踪流程
  • 要使流程工作,您必须记得在每个UIViewController中插入一个真实的bundle ID,否则演示将作为离线操作

变更日志

参见变更日志页面。

贡献

参见贡献页面。

使用ADAppRater的应用程序

AutoCAD Mobile

是否使用ADAppRater?告诉我。

特别感谢

  • 如果您发现此功能有用,我会很感激在Github上给它加星。
  • 特别感谢Nick Lockwood和iRate,它是本项目的灵感和例子。

联系方式

Amir Shavit

Twitter

LinkedIn