|
|
|
//
|
|
|
|
// iRate.h
|
|
|
|
//
|
|
|
|
// Version 1.11.4
|
|
|
|
//
|
|
|
|
// Created by Nick Lockwood on 26/01/2011.
|
|
|
|
// Copyright 2011 Charcoal Design
|
|
|
|
//
|
|
|
|
// Distributed under the permissive zlib license
|
|
|
|
// Get the latest version from here:
|
|
|
|
//
|
|
|
|
// https://github.com/nicklockwood/iRate
|
|
|
|
//
|
|
|
|
// This software is provided 'as-is', without any express or implied
|
|
|
|
// warranty. In no event will the authors be held liable for any damages
|
|
|
|
// arising from the use of this software.
|
|
|
|
//
|
|
|
|
// Permission is granted to anyone to use this software for any purpose,
|
|
|
|
// including commercial applications, and to alter it and redistribute it
|
|
|
|
// freely, subject to the following restrictions:
|
|
|
|
//
|
|
|
|
// 1. The origin of this software must not be misrepresented; you must not
|
|
|
|
// claim that you wrote the original software. If you use this software
|
|
|
|
// in a product, an acknowledgment in the product documentation would be
|
|
|
|
// appreciated but is not required.
|
|
|
|
//
|
|
|
|
// 2. Altered source versions must be plainly marked as such, and must not be
|
|
|
|
// misrepresented as being the original software.
|
|
|
|
//
|
|
|
|
// 3. This notice may not be removed or altered from any source distribution.
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
|
|
#pragma clang diagnostic push
|
|
|
|
#pragma clang diagnostic ignored "-Wobjc-missing-property-synthesis"
|
|
|
|
|
|
|
|
|
|
|
|
#import <Availability.h>
|
|
|
|
#undef weak_delegate
|
|
|
|
#if __has_feature(objc_arc_weak) && \
|
|
|
|
(TARGET_OS_IPHONE || __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_8)
|
|
|
|
#define weak_delegate weak
|
|
|
|
#else
|
|
|
|
#define weak_delegate unsafe_unretained
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#import <TargetConditionals.h>
|
|
|
|
#if TARGET_OS_IPHONE
|
|
|
|
#import <UIKit/UIKit.h>
|
|
|
|
#define IRATE_EXTERN UIKIT_EXTERN
|
|
|
|
#else
|
|
|
|
#import <Cocoa/Cocoa.h>
|
|
|
|
#define IRATE_EXTERN APPKIT_EXTERN
|
|
|
|
#endif
|
|
|
|
|
|
|
|
//! Project version number for iRate.
|
|
|
|
FOUNDATION_EXPORT double iRateVersionNumber;
|
|
|
|
|
|
|
|
//! Project version string for iRate.
|
|
|
|
FOUNDATION_EXPORT const unsigned char iRateVersionString[];
|
|
|
|
|
|
|
|
IRATE_EXTERN NSUInteger const iRateAppStoreGameGenreID;
|
|
|
|
IRATE_EXTERN NSString *const iRateErrorDomain;
|
|
|
|
|
|
|
|
//localisation string keys
|
|
|
|
IRATE_EXTERN NSString *const iRateMessageTitleKey; //iRateMessageTitle
|
|
|
|
IRATE_EXTERN NSString *const iRateAppMessageKey; //iRateAppMessage
|
|
|
|
IRATE_EXTERN NSString *const iRateGameMessageKey; //iRateGameMessage
|
|
|
|
IRATE_EXTERN NSString *const iRateUpdateMessageKey; //iRateUpdateMessage
|
|
|
|
IRATE_EXTERN NSString *const iRateCancelButtonKey; //iRateCancelButton
|
|
|
|
IRATE_EXTERN NSString *const iRateRemindButtonKey; //iRateRemindButton
|
|
|
|
IRATE_EXTERN NSString *const iRateRateButtonKey; //iRateRateButton
|
|
|
|
|
|
|
|
//notification keys
|
|
|
|
IRATE_EXTERN NSString *const iRateCouldNotConnectToAppStore;
|
|
|
|
IRATE_EXTERN NSString *const iRateDidDetectAppUpdate;
|
|
|
|
IRATE_EXTERN NSString *const iRateDidPromptForRating;
|
|
|
|
IRATE_EXTERN NSString *const iRateUserDidAttemptToRateApp;
|
|
|
|
IRATE_EXTERN NSString *const iRateUserDidDeclineToRateApp;
|
|
|
|
IRATE_EXTERN NSString *const iRateUserDidRequestReminderToRateApp;
|
|
|
|
IRATE_EXTERN NSString *const iRateDidOpenAppStore;
|
|
|
|
|
|
|
|
|
|
|
|
typedef NS_ENUM(NSUInteger, iRateErrorCode)
|
|
|
|
{
|
|
|
|
iRateErrorBundleIdDoesNotMatchAppStore = 1,
|
|
|
|
iRateErrorApplicationNotFoundOnAppStore,
|
|
|
|
iRateErrorApplicationIsNotLatestVersion,
|
|
|
|
iRateErrorCouldNotOpenRatingPageURL
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
@protocol iRateDelegate <NSObject>
|
|
|
|
@optional
|
|
|
|
|
|
|
|
- (void)iRateCouldNotConnectToAppStore:(NSError *)error;
|
|
|
|
- (void)iRateDidDetectAppUpdate;
|
|
|
|
@property (NS_NONATOMIC_IOSONLY, readonly) BOOL iRateShouldPromptForRating;
|
|
|
|
- (void)iRateDidPromptForRating;
|
|
|
|
- (void)iRateUserDidAttemptToRateApp;
|
|
|
|
- (void)iRateUserDidDeclineToRateApp;
|
|
|
|
- (void)iRateUserDidRequestReminderToRateApp;
|
|
|
|
@property (NS_NONATOMIC_IOSONLY, readonly) BOOL iRateShouldOpenAppStore;
|
|
|
|
- (void)iRateDidOpenAppStore;
|
|
|
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
|
|
@interface iRate : NSObject
|
|
|
|
|
|
|
|
+ (instancetype)sharedInstance;
|
|
|
|
|
|
|
|
//app store ID - this is only needed if your
|
|
|
|
//bundle ID is not unique between iOS and Mac app stores
|
|
|
|
@property (nonatomic, assign) NSUInteger appStoreID;
|
|
|
|
|
|
|
|
//application details - these are set automatically
|
|
|
|
@property (nonatomic, assign) NSUInteger appStoreGenreID;
|
|
|
|
@property (nonatomic, copy) NSString *appStoreCountry;
|
|
|
|
@property (nonatomic, copy) NSString *applicationName;
|
|
|
|
@property (nonatomic, copy) NSString *applicationVersion;
|
|
|
|
@property (nonatomic, copy) NSString *applicationBundleID;
|
|
|
|
|
|
|
|
//usage settings - these have sensible defaults
|
|
|
|
@property (nonatomic, assign) NSUInteger usesUntilPrompt;
|
|
|
|
@property (nonatomic, assign) NSUInteger eventsUntilPrompt;
|
|
|
|
@property (nonatomic, assign) float daysUntilPrompt;
|
|
|
|
@property (nonatomic, assign) float usesPerWeekForPrompt;
|
|
|
|
@property (nonatomic, assign) float remindPeriod;
|
|
|
|
|
|
|
|
//message text, you may wish to customise these
|
|
|
|
@property (nonatomic, copy) NSString *messageTitle;
|
|
|
|
@property (nonatomic, copy) NSString *message;
|
|
|
|
@property (nonatomic, copy) NSString *updateMessage;
|
|
|
|
@property (nonatomic, copy) NSString *cancelButtonLabel;
|
|
|
|
@property (nonatomic, copy) NSString *remindButtonLabel;
|
|
|
|
@property (nonatomic, copy) NSString *rateButtonLabel;
|
|
|
|
|
|
|
|
//debugging and prompt overrides
|
|
|
|
@property (nonatomic, assign) BOOL useUIAlertControllerIfAvailable;
|
|
|
|
@property (nonatomic, assign) BOOL useAllAvailableLanguages;
|
|
|
|
@property (nonatomic, assign) BOOL promptForNewVersionIfUserRated;
|
|
|
|
@property (nonatomic, assign) BOOL onlyPromptIfLatestVersion;
|
|
|
|
@property (nonatomic, assign) BOOL onlyPromptIfMainWindowIsAvailable;
|
|
|
|
@property (nonatomic, assign) BOOL promptAtLaunch;
|
|
|
|
@property (nonatomic, assign) BOOL verboseLogging;
|
|
|
|
@property (nonatomic, assign) BOOL previewMode;
|
|
|
|
|
|
|
|
//advanced properties for implementing custom behaviour
|
|
|
|
@property (nonatomic, strong) NSURL *ratingsURL;
|
|
|
|
@property (nonatomic, strong) NSDate *firstUsed;
|
|
|
|
@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, readonly) BOOL declinedAnyVersion;
|
|
|
|
@property (nonatomic, assign) BOOL ratedThisVersion;
|
|
|
|
@property (nonatomic, readonly) BOOL ratedAnyVersion;
|
|
|
|
@property (nonatomic, weak_delegate) id<iRateDelegate> delegate;
|
|
|
|
|
|
|
|
//manually control behaviour
|
|
|
|
@property (NS_NONATOMIC_IOSONLY, readonly) BOOL shouldPromptForRating;
|
|
|
|
- (void)promptForRating;
|
|
|
|
- (void)promptIfNetworkAvailable;
|
|
|
|
- (void)promptIfAllCriteriaMet;
|
|
|
|
- (void)openRatingsPageInAppStore;
|
|
|
|
- (void)logEvent:(BOOL)deferPrompt;
|
|
|
|
- (void)rate;
|
|
|
|
- (void)remindLater;
|
|
|
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
|
|
#pragma clang diagnostic pop
|