axmol/plugin/plugins/flurry/proj.ios/Flurry.h

678 lines
24 KiB
Objective-C
Executable File

//
// Flurry.h
// Flurry iOS Analytics Agent
//
// Copyright 2009-2012 Flurry, Inc. All rights reserved.
//
// Methods in this header file are for use with Flurry Analytics
#import <UIKit/UIKit.h>
/*!
* @brief Provides all available methods for defining and reporting Analytics from use
* of your app.
*
* Set of methods that allow developers to capture detailed, aggregate information
* regarding the use of their app by end users.
*
* @note This class provides methods necessary for correct function of FlurryAds.h.
* For information on how to use Flurry's Ads SDK to
* attract high-quality users and monetize your user base see <a href="http://support.flurry.com/index.php?title=Publishers">Support Center - Publishers</a>.
*
* @author 2009 - 2012 Flurry, Inc. All Rights Reserved.
* @version 4.2.0
*
*/
@interface Flurry : NSObject {
}
/** @name Pre-Session Calls
* Optional sdk settings that should be called before start session.
*/
//@{
/*!
* @brief Explicitly specifies the App Version that Flurry will use to group Analytics data.
* @since 2.7
*
* This is an optional method that overrides the App Version Flurry uses for reporting. Flurry will
* use the CFBundleVersion in your info.plist file when this method is not invoked.
*
* @note There is a maximum of 605 versions allowed for a single app. \n
* This method must be called prior to invoking #startSession:.
*
* @param version The custom version name.
*/
+ (void)setAppVersion:(NSString *)version;
/*!
* @brief Retrieves the Flurry Agent Build Version.
* @since 2.7
*
* This is an optional method that retrieves the Flurry Agent Version the app is running under.
* It is most often used if reporting an unexpected behavior of the SDK to <a href="mailto:iphonesupport@flurry.com">
* Flurry Support</a>
*
* @note This method must be called prior to invoking #startSession:. \n
* FAQ for the iPhone SDK is located at <a href="http://wiki.flurry.com/index.php?title=IPhone_FAQ">
* Support Center - iPhone FAQ</a>.
*
* @see #setDebugLogEnabled: for information on how to view debugging information on your console.
*
* @return The agent version of the Flurry SDK.
*
*/
+ (NSString *)getFlurryAgentVersion;
/*!
* @brief Displays an exception in the debug log if thrown during a Session.
* @since 2.7
*
* This is an optional method that augments the debug logs with exceptions that occur during the session.
* You must both capture exceptions to Flurry and set debug logging to enabled for this method to
* display information to the console. The default setting for this method is @c NO.
*
* @note This method must be called prior to invoking #startSession:.
*
* @see #setDebugLogEnabled: for information on how to view debugging information on your console. \n
* #logError:message:exception: for details on logging exceptions. \n
* #logError:message:error: for details on logging errors.
*
* @param value @c YES to show errors in debug logs, @c NO to omit errors in debug logs.
*/
+ (void)setShowErrorInLogEnabled:(BOOL)value;
/*!
* @brief Generates debug logs to console.
* @since 2.7
*
* This is an optional method that displays debug information related to the Flurry SDK.
* display information to the console. The default setting for this method is @c NO.
*
* @note This method must be called prior to invoking #startSession:.
*
* @param value @c YES to show debug logs, @c NO to omit debug logs.
*
*/
+ (void)setDebugLogEnabled:(BOOL)value;
/*!
* @brief Set the timeout for expiring a Flurry session.
* @since 2.7
*
* This is an optional method that sets the time the app may be in the background before
* starting a new session upon resume. The default value for the session timeout is 10
* seconds in the background.
*
* @note This method must be called prior to invoking #startSession:.
*
* @param seconds The time in seconds to set the session timeout to.
*/
+ (void)setSessionContinueSeconds:(int)seconds;
/*!
* @brief Send data over a secure transport.
* @since 3.0
*
* This is an optional method that sends data over an SSL connection when enabled. The
* default value is @c NO.
*
* @note This method must be called prior to invoking #startSession:.
*
* @param value @c YES to send data over secure connection.
*/
+ (void)setSecureTransportEnabled:(BOOL)value;
/*!
* @brief Enable automatic collection of crash reports.
* @since 4.1
*
* This is an optional method that collects crash reports when enabled. The
* default value is @c NO.
*
* @note This method must be called prior to invoking #startSession:.
*
* @param value @c YES to enable collection of crash reports.
*/
+ (void)setCrashReportingEnabled:(BOOL)value;
//@}
/*!
* @brief Start a Flurry session for the project denoted by @c apiKey.
* @since 2.6
*
* This method serves as the entry point to Flurry Analytics collection. It must be
* called in the scope of @c applicationDidFinishLaunching. The session will continue
* for the period the app is in the foreground until your app is backgrounded for the
* time specified in #setSessionContinueSeconds:. If the app is resumed in that period
* the session will continue, otherwise a new session will begin.
*
* Crash reporting will not be enabled. See #startSession:enableCrashReporting: for
* more information.
*
* @note If testing on a simulator, please be sure to send App to background via home
* button. Flurry depends on the iOS lifecycle to be complete for full reporting.
*
* @see #setSessionContinueSeconds: for details on setting a custom session timeout.
*
* @code
* - (void)applicationDidFinishLaunching:(UIApplication *)application
{
// Optional Flurry startup methods
[Flurry startSession:@"YOUR_API_KEY"];
// ....
}
* @endcode
*
* @param apiKey The API key for this project.
*/
+ (void)startSession:(NSString *)apiKey;
/*!
* @brief Start a Flurry session for the project denoted by @c apiKey.
* @since 4.0.8
*
* This method serves as the entry point to Flurry Analytics collection. It must be
* called in the scope of @c applicationDidFinishLaunching passing in the launchOptions param.
* The session will continue
* for the period the app is in the foreground until your app is backgrounded for the
* time specified in #setSessionContinueSeconds:. If the app is resumed in that period
* the session will continue, otherwise a new session will begin.
*
* @note If testing on a simulator, please be sure to send App to background via home
* button. Flurry depends on the iOS lifecycle to be complete for full reporting.
*
* @see #setSessionContinueSeconds: for details on setting a custom session timeout.
*
* @code
* - (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Optional Flurry startup methods
[Flurry startSession:@"YOUR_API_KEY" withOptions:launchOptions];
// ....
}
* @endcode
*
* @param apiKey The API key for this project.
* @param options passed launchOptions from the applicatin's didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
*/
+ (void) startSession:(NSString *)apiKey withOptions:(id)options;
/** @name Event and Error Logging
* Methods for reporting custom events and errors during the session.
*/
//@{
/*!
* @brief Records a custom event specified by @c eventName.
* @since 2.8.4
*
* This method allows you to specify custom events within your app. As a general rule
* you should capture events related to user navigation within your app, any action
* around monetization, and other events as they are applicable to tracking progress
* towards your business goals.
*
* @note You should not pass private or confidential information about your users in a
* custom event. \n
* Where applicable, you should make a concerted effort to use timed events with
* parameters (#logEvent:withParameters:timed:) or events with parameters
* (#logEvent:withParameters:). This provides valuable information around the time the user
* spends within an action (e.g. - time spent on a level or viewing a page) or characteristics
* of an action (e.g. - Buy Event that has a Parameter of Widget with Value Golden Sword).
*
* @see #logEvent:withParameters: for details on storing events with parameters. \n
* #logEvent:timed: for details on storing timed events. \n
* #logEvent:withParameters:timed: for details on storing timed events with parameters. \n
* #endTimedEvent:withParameters: for details on stopping a timed event and (optionally) updating
* parameters.
*
* @code
* - (void)interestingAppAction
{
[Flurry logEvent:@"Interesting_Action"];
// Perform interesting action
}
* @endcode
*
* @param eventName Name of the event. For maximum effectiveness, we recommend using a naming scheme
* that can be easily understood by non-technical people in your business domain.
*/
+ (void)logEvent:(NSString *)eventName;
/*!
* @brief Records a custom parameterized event specified by @c eventName with @c parameters.
* @since 2.8.4
*
* This method overrides #logEvent to allow you to associate parameters with an event. Parameters
* are extremely valuable as they allow you to store characteristics of an action. For example,
* if a user purchased an item it may be helpful to know what level that user was on.
* By setting this parameter you will be able to view a distribution of levels for the purcahsed
* event on the <a href="http://dev.flurry.com">Flurrly Dev Portal</a>.
*
* @note You should not pass private or confidential information about your users in a
* custom event. \n
* A maximum of 10 parameter names may be associated with any event. Sending
* over 10 parameter names with a single event will result in no parameters being logged
* for that event. You may specify an infinite number of Parameter values. For example,
* a Search Box would have 1 parameter name (e.g. - Search Box) and many values, which would
* allow you to see what values users look for the most in your app. \n
* Where applicable, you should make a concerted effort to use timed events with
* parameters (#logEvent:withParameters:timed:). This provides valuable information
* around the time the user spends within an action (e.g. - time spent on a level or
* viewing a page).
*
* @see #logEvent:withParameters:timed: for details on storing timed events with parameters. \n
* #endTimedEvent:withParameters: for details on stopping a timed event and (optionally) updating
* parameters.
*
* @code
* - (void)userPurchasedSomethingCool
{
NSDictionary *params =
[NSDictionary dictionaryWithObjectsAndKeys:@"Cool Item", // Parameter Value
@"Item Purchased", // Parameter Name
nil];
[Flurry logEvent:@"Something Cool Purchased" withParameters:params];
// Give user cool item
}
* @endcode
*
* @param eventName Name of the event. For maximum effectiveness, we recommend using a naming scheme
* that can be easily understood by non-technical people in your business domain.
* @param parameters A map containing Name-Value pairs of parameters.
*/
+ (void)logEvent:(NSString *)eventName withParameters:(NSDictionary *)parameters;
/*!
* @brief Records an app exception. Commonly used to catch unhandled exceptions.
* @since 2.7
*
* This method captures an exception for reporting to Flurry. We recommend adding an uncaught
* exception listener to capture any exceptions that occur during usage that is not
* anticipated by your app.
*
* @see #logError:message:error: for details on capturing errors.
*
* @code
* - (void) uncaughtExceptionHandler(NSException *exception)
{
[Flurry logError:@"Uncaught" message:@"Crash!" exception:exception];
}
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
[Flurry startSession:@"YOUR_API_KEY"];
// ....
}
* @endcode
*
* @param errorID Name of the error.
* @param message The message to associate with the error.
* @param exception The exception object to report.
*/
+ (void)logError:(NSString *)errorID message:(NSString *)message exception:(NSException *)exception;
/*!
* @brief Records an app error.
* @since 2.7
*
* This method captures an error for reporting to Flurry.
*
* @see #logError:message:exception: for details on capturing exceptions.
*
* @code
* - (void) webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
[Flurry logError:@"WebView No Load" message:[error localizedDescription] error:error];
}
* @endcode
*
* @param errorID Name of the error.
* @param message The message to associate with the error.
* @param error The error object to report.
*/
+ (void)logError:(NSString *)errorID message:(NSString *)message error:(NSError *)error;
/*!
* @brief Records a timed event specified by @c eventName.
* @since 2.8.4
*
* This method overrides #logEvent to allow you to capture the length of an event. This can
* be extremely valuable to understand the level of engagement with a particular action. For
* example, you can capture how long a user spends on a level or reading an article.
*
* @note You should not pass private or confidential information about your users in a
* custom event. \n
* Where applicable, you should make a concerted effort to use parameters with your timed
* events (#logEvent:withParameters:timed:). This provides valuable information
* around the characteristics of an action (e.g. - Buy Event that has a Parameter of Widget with
* Value Golden Sword).
*
* @see #logEvent:withParameters:timed: for details on storing timed events with parameters. \n
* #endTimedEvent:withParameters: for details on stopping a timed event and (optionally) updating
* parameters.
*
* @code
* - (void)startLevel
{
[Flurry logEvent:@"Level Played" timed:YES];
// Start user on level
}
- (void)endLevel
{
[Flurry endTimedEvent:@"Level Played" withParameters:nil];
// User done with level
}
* @endcode
*
* @param eventName Name of the event. For maximum effectiveness, we recommend using a naming scheme
* that can be easily understood by non-technical people in your business domain.
* @param timed Specifies the event will be timed.
*/
+ (void)logEvent:(NSString *)eventName timed:(BOOL)timed;
/*!
* @brief Records a custom parameterized timed event specified by @c eventName with @c parameters.
* @since 2.8.4
*
* This method overrides #logEvent to allow you to capture the length of an event with parameters.
* This can be extremely valuable to understand the level of engagement with a particular action
* and the characteristics associated with that action. For example, you can capture how long a user
* spends on a level or reading an article. Parameters can be used to capture, for example, the
* author of an article or if something was purchased while on the level.
*
* @note You should not pass private or confidential information about your users in a
* custom event.
*
* @see #endTimedEvent:withParameters: for details on stopping a timed event and (optionally) updating
* parameters.
*
* @code
* - (void)startLevel
{
NSDictionary *params =
[NSDictionary dictionaryWithObjectsAndKeys:@"100", // Parameter Value
@"Current Points", // Parameter Name
nil];
[Flurry logEvent:@"Level Played" withParameters:params timed:YES];
// Start user on level
}
- (void)endLevel
{
// User gained additional 100 points in Level
NSDictionary *params =
[NSDictionary dictionaryWithObjectsAndKeys:@"200", // Parameter Value
@"Current Points", // Parameter Name
nil];
[Flurry endTimedEvent:@"Level Played" withParameters:params];
// User done with level
}
* @endcode
*
* @param eventName Name of the event. For maximum effectiveness, we recommend using a naming scheme
* that can be easily understood by non-technical people in your business domain.
* @param parameters A map containing Name-Value pairs of parameters.
* @param timed Specifies the event will be timed.
*/
+ (void)logEvent:(NSString *)eventName withParameters:(NSDictionary *)parameters timed:(BOOL)timed;
/*!
* @brief Ends a timed event specified by @c eventName and optionally updates parameters with @c parameters.
* @since 2.8.4
*
* This method ends an existing timed event. If parameters are provided, this will overwrite existing
* parameters with the same name or create new parameters if the name does not exist in the parameter
* map set by #logEvent:withParameters:timed:.
*
* @note You should not pass private or confidential information about your users in a
* custom event. \n
* If the app is backgrounded prior to ending a timed event, the Flurry SDK will automatically
* end the timer on the event. \n
* #endTimedEvent:withParameters: is ignored if called on a previously
* terminated event.
*
* @see #logEvent:withParameters:timed: for details on starting a timed event with parameters.
*
* @code
* - (void)startLevel
{
NSDictionary *params =
[NSDictionary dictionaryWithObjectsAndKeys:@"100", // Parameter Value
@"Current Points", // Parameter Name
nil];
[Flurry logEvent:@"Level Played" withParameters:params timed:YES];
// Start user on level
}
- (void)endLevel
{
// User gained additional 100 points in Level
NSDictionary *params =
[NSDictionary dictionaryWithObjectsAndKeys:@"200", // Parameter Value
@"Current Points", // Parameter Name
nil];
[Flurry endTimedEvent:@"Level Played" withParameters:params];
// User done with level
}
* @endcode
*
* @param eventName Name of the event. For maximum effectiveness, we recommend using a naming scheme
* that can be easily understood by non-technical people in your business domain.
* @param parameters A map containing Name-Value pairs of parameters.
*/
+ (void)endTimedEvent:(NSString *)eventName withParameters:(NSDictionary *)parameters; // non-nil parameters will update the parameters
//@}
/** @name Page View Methods
* Count page views.
*/
//@{
/*!
* @brief Automatically track page views on a @c UINavigationController or @c UITabBarController.
* @since 2.7
*
* This method increments the page view count for a session based on traversing a UINavigationController
* or UITabBarController. The page view count is only a counter for the number of transitions in your
* app. It does not associate a name with the page count. To associate a name with a count of occurences
* see #logEvent:.
*
* @note Please make sure you assign the Tab and Navigation controllers to the view controllers before
* passing them to this method.
*
* @see #logPageView for details on explictly incrementing page view count.
*
* @code
* -(void) trackViewsFromTabBar:(UITabBarController*) tabBar
{
[Flurry logAllPageViews:tabBar];
}
* @endcode
*
* @param target The navigation or tab bar controller.
*/
+ (void)logAllPageViews:(id)target;
/*!
* @brief Explicitly track a page view during a session.
* @since 2.7
*
* This method increments the page view count for a session when invoked. It does not associate a name
* with the page count. To associate a name with a count of occurences see #logEvent:.
*
* @see #logAllPageViews for details on automatically incrementing page view count based on user
* traversing navigation or tab bar controller.
*
* @code
* -(void) trackView
{
[Flurry logPageView];
}
* @endcode
*
*/
+ (void)logPageView;
//@}
/** @name User Info
* Methods to set user information.
*/
//@{
/*!
* @brief Assign a unique id for a user in your app.
* @since 2.7
*
* @note Please be sure not to use this method to pass any private or confidential information
* about the user.
*
* @param userID The app id for a user.
*/
+ (void)setUserID:(NSString *)userID;
/*!
* @brief Set your user's age in years.
* @since 2.7
*
* Use this method to capture the age of your user. Only use this method if you collect this
* information explictly from your user (i.e. - there is no need to set a default value).
*
* @note The age is aggregated across all users of your app and not available on a per user
* basis.
*
* @param age Reported age of user.
*
*/
+ (void)setAge:(int)age;
/*!
* @brief Set your user's gender.
* @since 2.7
*
* Use this method to capture the gender of your user. Only use this method if you collect this
* information explictly from your user (i.e. - there is no need to set a default value). Allowable
* values are @c @"M" or @c @"F"
*
* @note The gender is aggregated across all users of your app and not available on a per user
* basis.
*
* @param gender Reported gender of user.
*
*/
+ (void)setGender:(NSString *)gender; // user's gender m or f
//@}
/** @name Location Reporting
* Methods for setting location information.
*/
//@{
/*!
* @brief Set the location of the session.
* @since 2.7
*
* Use information from the CLLocationManager to specify the location of the session. Flurry does not
* automatically track this information or include the CLLocation framework.
*
* @note Only the last location entered is captured per session. \n
* Regardless of accuracy specified, the Flurry SDK will only report location at city level or higher. \n
* Location is aggregated across all users of your app and not available on a per user basis. \n
* This information should only be captured if it is germaine to the use of your app.
*
* @code
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
[locationManager startUpdatingLocation];
* @endcode
*
* After starting the location manager, you can set the location with Flurry. You can implement
* CLLocationManagerDelegate to be aware of when the location is updated. Below is an example
* of how to use this method, after you have recieved a location update from the locationManager.
*
* @code
CLLocation *location = locationManager.location;
[Flurry setLatitude:location.coordinate.latitude
longitude:location.coordinate.longitude
horizontalAccuracy:location.horizontalAccuracy
verticalAccuracy:location.verticalAccuracy];
* @endcode
* @param latitude The latitude.
* @param longitude The longitude.
* @param horizontalAccuracy The radius of uncertainty for the location in meters.
* @param verticalAccuracy The accuracy of the altitude value in meters.
*
*/
+ (void)setLatitude:(double)latitude longitude:(double)longitude horizontalAccuracy:(float)horizontalAccuracy verticalAccuracy:(float)verticalAccuracy;
//@}
/** @name Session Reporting Calls
* Optional methods that can be called at any point to control session reporting.
*/
//@{
/*!
* @brief Set session to report when app closes.
* @since 2.7
*
* Use this method report session data when the app is closed. The default value is @c YES.
*
* @note This method is rarely invoked in iOS >= 3.2 due to the updated iOS lifecycle.
*
* @see #setSessionReportsOnPauseEnabled:
*
* @param sendSessionReportsOnClose YES to send on close, NO to omit reporting on close.
*
*/
+ (void)setSessionReportsOnCloseEnabled:(BOOL)sendSessionReportsOnClose;
/*!
* @brief Set session to report when app is sent to the background.
* @since 2.7
*
* Use this method report session data when the app is paused. The default value is @c YES.
*
* @param setSessionReportsOnPauseEnabled YES to send on pause, NO to omit reporting on pause.
*
*/
+ (void)setSessionReportsOnPauseEnabled:(BOOL)setSessionReportsOnPauseEnabled;
/*!
* @brief Enable custom event logging.
* @since 2.7
*
* Use this method to allow the capture of custom events. The default value is @c YES.
*
* @param value YES to enable event logging, NO to stop custom logging.
*
*/
+ (void)setEventLoggingEnabled:(BOOL)value;
/*!
* @brief Set device push token.
* @since 2.7
*
* After the device has successfully registered with APNS, call this method to set the push token received from APNS.
*
*
*/
+ (void)setPushToken:(NSString *)pushToken;
//@}
@end