228 lines
9.4 KiB
C++
228 lines
9.4 KiB
C++
/*************************************************************************/
|
|
/* Appirater.h */
|
|
/*************************************************************************/
|
|
/* This file is part of: */
|
|
/* GODOT ENGINE */
|
|
/* http://www.godotengine.org */
|
|
/*************************************************************************/
|
|
/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
|
|
/* */
|
|
/* Permission is hereby granted, free of charge, to any person obtaining */
|
|
/* a copy of this software and associated documentation files (the */
|
|
/* "Software"), to deal in the Software without restriction, including */
|
|
/* without limitation the rights to use, copy, modify, merge, publish, */
|
|
/* distribute, sublicense, and/or sell copies of the Software, and to */
|
|
/* permit persons to whom the Software is furnished to do so, subject to */
|
|
/* the following conditions: */
|
|
/* */
|
|
/* The above copyright notice and this permission notice shall be */
|
|
/* included in all copies or substantial portions of the Software. */
|
|
/* */
|
|
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
|
|
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
|
|
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
|
|
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
|
|
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
|
|
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
|
/*************************************************************************/
|
|
This file is part of Appirater.
|
|
|
|
Copyright (c) 2010, Arash Payan
|
|
All rights reserved.
|
|
|
|
Permission is hereby granted, free of charge, to any person
|
|
obtaining a copy of this software and associated documentation
|
|
files (the "Software"), to deal in the Software without
|
|
restriction, including without limitation the rights to use,
|
|
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
copies of the Software, and to permit persons to whom the
|
|
Software is furnished to do so, subject to the following
|
|
conditions:
|
|
|
|
The above copyright notice and this permission notice shall be
|
|
included in all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
OTHER DEALINGS IN THE SOFTWARE.
|
|
*/
|
|
/*
|
|
* Appirater.h
|
|
* appirater
|
|
*
|
|
* Created by Arash Payan on 9/5/09.
|
|
* http://arashpayan.com
|
|
* Copyright 2010 Arash Payan. All rights reserved.
|
|
*/
|
|
|
|
#import <Foundation/Foundation.h>
|
|
#import <UIKit/UIKit.h>
|
|
|
|
extern NSString *const kAppiraterFirstUseDate;
|
|
extern NSString *const kAppiraterUseCount;
|
|
extern NSString *const kAppiraterSignificantEventCount;
|
|
extern NSString *const kAppiraterCurrentVersion;
|
|
extern NSString *const kAppiraterRatedCurrentVersion;
|
|
extern NSString *const kAppiraterDeclinedToRate;
|
|
|
|
/*
|
|
Place your Apple generated software id here.
|
|
*/
|
|
#define APPIRATER_APP_ID 301377083
|
|
|
|
/*
|
|
Your app's name.
|
|
*/
|
|
#define APPIRATER_APP_NAME [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey]
|
|
|
|
/*
|
|
This is the message your users will see once they've passed the day+launches
|
|
threshold.
|
|
*/
|
|
#define APPIRATER_MESSAGE [NSString stringWithFormat:@"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!", APPIRATER_APP_NAME]
|
|
|
|
/*
|
|
This is the title of the message alert that users will see.
|
|
*/
|
|
#define APPIRATER_MESSAGE_TITLE [NSString stringWithFormat:@"Rate %@", APPIRATER_APP_NAME]
|
|
|
|
/*
|
|
The text of the button that rejects reviewing the app.
|
|
*/
|
|
#define APPIRATER_CANCEL_BUTTON @"No, Thanks"
|
|
|
|
/*
|
|
Text of button that will send user to app review page.
|
|
*/
|
|
#define APPIRATER_RATE_BUTTON [NSString stringWithFormat:@"Rate %@", APPIRATER_APP_NAME]
|
|
|
|
/*
|
|
Text for button to remind the user to review later.
|
|
*/
|
|
#define APPIRATER_RATE_LATER @"Remind me later"
|
|
|
|
/*
|
|
Users will need to have the same version of your app installed for this many
|
|
days before they will be prompted to rate it.
|
|
*/
|
|
#define APPIRATER_DAYS_UNTIL_PROMPT 30 // double
|
|
|
|
/*
|
|
An example of a 'use' would be if the user launched the app. Bringing the app
|
|
into the foreground (on devices that support it) would also be considered
|
|
a 'use'. You tell Appirater about these events using the two methods:
|
|
[Appirater appLaunched:]
|
|
[Appirater appEnteredForeground:]
|
|
|
|
Users need to 'use' the same version of the app this many times before
|
|
before they will be prompted to rate it.
|
|
*/
|
|
#define APPIRATER_USES_UNTIL_PROMPT 20 // integer
|
|
|
|
/*
|
|
A significant event can be anything you want to be in your app. In a
|
|
telephone app, a significant event might be placing or receiving a call.
|
|
In a game, it might be beating a level or a boss. This is just another
|
|
layer of filtering that can be used to make sure that only the most
|
|
loyal of your users are being prompted to rate you on the app store.
|
|
If you leave this at a value of -1, then this won't be a criteria
|
|
used for rating. To tell Appirater that the user has performed
|
|
a significant event, call the method:
|
|
[Appirater userDidSignificantEvent:];
|
|
*/
|
|
#define APPIRATER_SIG_EVENTS_UNTIL_PROMPT -1 // integer
|
|
|
|
/*
|
|
Once the rating alert is presented to the user, they might select
|
|
'Remind me later'. This value specifies how long (in days) Appirater
|
|
will wait before reminding them.
|
|
*/
|
|
#define APPIRATER_TIME_BEFORE_REMINDING 1 // double
|
|
|
|
/*
|
|
'YES' will show the Appirater alert everytime. Useful for testing how your message
|
|
looks and making sure the link to your app's review page works.
|
|
*/
|
|
#define APPIRATER_DEBUG NO
|
|
|
|
@interface Appirater : NSObject <UIAlertViewDelegate> {
|
|
|
|
UIAlertView *ratingAlert;
|
|
}
|
|
|
|
@property(nonatomic, retain) UIAlertView *ratingAlert;
|
|
|
|
/*
|
|
DEPRECATED: While still functional, it's better to use
|
|
appLaunched:(BOOL)canPromptForRating instead.
|
|
|
|
Calls [Appirater appLaunched:YES]. See appLaunched: for details of functionality.
|
|
*/
|
|
+ (void)appLaunched:(int)p_app_id;
|
|
|
|
/*
|
|
Tells Appirater that the app has launched, and on devices that do NOT
|
|
support multitasking, the 'uses' count will be incremented. You should
|
|
call this method at the end of your application delegate's
|
|
application:didFinishLaunchingWithOptions: method.
|
|
|
|
If the app has been used enough to be rated (and enough significant events),
|
|
you can suppress the rating alert
|
|
by passing NO for canPromptForRating. The rating alert will simply be postponed
|
|
until it is called again with YES for canPromptForRating. The rating alert
|
|
can also be triggered by appEnteredForeground: and userDidSignificantEvent:
|
|
(as long as you pass YES for canPromptForRating in those methods).
|
|
*/
|
|
+ (void)appLaunched:(BOOL)canPromptForRating app_id:(int)p_app_id;
|
|
|
|
/*
|
|
Tells Appirater that the app was brought to the foreground on multitasking
|
|
devices. You should call this method from the application delegate's
|
|
applicationWillEnterForeground: method.
|
|
|
|
If the app has been used enough to be rated (and enough significant events),
|
|
you can suppress the rating alert
|
|
by passing NO for canPromptForRating. The rating alert will simply be postponed
|
|
until it is called again with YES for canPromptForRating. The rating alert
|
|
can also be triggered by appLaunched: and userDidSignificantEvent:
|
|
(as long as you pass YES for canPromptForRating in those methods).
|
|
*/
|
|
+ (void)appEnteredForeground:(BOOL)canPromptForRating;
|
|
|
|
/*
|
|
Tells Appirater that the user performed a significant event. A significant
|
|
event is whatever you want it to be. If you're app is used to make VoIP
|
|
calls, then you might want to call this method whenever the user places
|
|
a call. If it's a game, you might want to call this whenever the user
|
|
beats a level boss.
|
|
|
|
If the user has performed enough significant events and used the app enough,
|
|
you can suppress the rating alert by passing NO for canPromptForRating. The
|
|
rating alert will simply be postponed until it is called again with YES for
|
|
canPromptForRating. The rating alert can also be triggered by appLaunched:
|
|
and appEnteredForeground: (as long as you pass YES for canPromptForRating
|
|
in those methods).
|
|
*/
|
|
+ (void)userDidSignificantEvent:(BOOL)canPromptForRating;
|
|
|
|
/*
|
|
Tells Appirater to open the App Store page where the user can specify a
|
|
rating for the app. Also records the fact that this has happened, so the
|
|
user won't be prompted again to rate the app.
|
|
|
|
The only case where you should call this directly is if your app has an
|
|
explicit "Rate this app" command somewhere. In all other cases, don't worry
|
|
about calling this -- instead, just call the other functions listed above,
|
|
and let Appirater handle the bookkeeping of deciding when to ask the user
|
|
whether to rate the app.
|
|
*/
|
|
+ (void)rateApp;
|
|
|
|
@end
|