Developer Zone

SDK Configuration

Before an application can start reporting usage to the Revulytics Usage Intelligence SDK, it must first provide some basic information such as the location of where the SDK will create and save its working files, the application Product ID and the CallHome URL.

You should always attempt to fill in as much accurate and specific details as possible since this data will then be used by the Revulytics Usage Intelligence Analytics Server to generate the relevant reports. The more (optional) details you fill in about your product and its licensing state, the more filtering and reporting options will be available to you inside the Revulytics Usage Intelligence dashboard.

SDK Object Initialization

Before beginning any operation, you must first create an instance of the RUISDK object. The constructor is defined below.

RUISDK (Boolean registerDefaultGraphicalReachOutHandler, String sdkDLLPath, String sdkDLLName = “ruiSDK_<version>”)

Constructor: Creates an instance of the SDK. The constructor does not configure the RUI SDK (RUISDK.CreateConfig) nor start the RUI SDK (RUISDK.StartSDK).

A typical client will create only a single instance of the RUI SDK. Creating more than one RUI SDK instance is allowed and is used to support clients that are plug-ins or other scenarios whereby multiple independent clients may co-exist in the same executable. Multiple RUI SDK instances perform independently of one another with the potential exception of shared or unshared configuration file (RUISDK.CreateConfig).

Parameters:

registerDefaultGraphicalReachOutHandler (bool) - If set to true, automatically registers the default graphical ReachOutTM. If false, no default ReachOutTMis registered.

sdkDLLPath (String) - Path to the core RUI SDK DLL.

sdkDLLName (String) - Optional parameter that defines the stem name for the core RUI SDK DLL. Default is ruiSDK_<version> where <version> is the version
number in form N.N.N where N is a digit (for example: ruiSDK_5.0.1 ). Should not be modified unless there is a need to do this.

Throws - RUISDKCreationException If there is a problem constructing the SDK instance; this is the only RUI SDK method that throws an exception.

Getting SDK Version Information

String RUISDK.GetSDKVersion ()

Returns the version information for the RUI SDK instance in the supplied string parameter.

RUISDK.GetSDKVersion can be called more than once.

RUISDK.GetSDKVersion is a synchronous function, returning when all functionality is completed.

Return Type:

Formatted String containing the RUISDK version information.

Getting the Client ID

String RUISDK.GetClientId ()

RUISDK.GetClientId returns the client ID for the RUI SDK instance.

RUISDK.GetClientId can be called more than once.

RUISDK.GetClientId is a synchronous function returning when all functionality is completed.

Return Type:

Formatted String containing the RUISDK client ID. Returns String of “0” if the client ID is not available.

Initializing the configuration

The RUISDK.CreateConfig method must be called in order to initialize the configuration. The method signature is as follows:

RUIResult RUISDK.CreateConfig (String configFilePath, String productID, String appName, String serverURL, Int32 protocol, String aesKeyHex, Boolean multiSessionEnabled, Boolean reachOutOnAutoSync)

Creates a configuration for the RUI SDK instance. A configuration is passed on a file, specified by configFilePath, productID, and appName. If two or more RUI SDK instances, in the same process or in different processes, use the same values for these three parameters, then those RUI SDK instances are bound together through a shared configuration. When multiple different executables are being used, such usage is generally not recommended. Instead, each executable should use a different appName value.

The RUI SDK has two communications modes: HTTPS or HTTP + AES-128 encryption. The mode is configured by protocol. When protocol is RUI_PROTOCOL_HTTP_PLUS_ENCRYPTION or RUI_PROTOCOL_HTTPS_WITH_FALLBACK, the AES key must be supplied as a 128-bit hex-encoded string (aesKeyHex). When protocol is RUI_PROTOCOL_HTTPS, then aesKeyHex must be empty.

On first execution of a client application, no RUI SDK configuration file will exist. This situation is detected by the RUI SDK and will result in a New Registration message to the RUI Server at RUISDK.StartSDK. Once the configuration is received from the RUI Server, the RUI SDK writes the configuration file, that is then used for subsequent client application executions.

RUISDK.createConfig must be called before most other APIs and must only be successfully called once.

RUISDK.createConfig is a synchronous function, returning when all functionality is completed.

Parameters:

configFilePath (String) - The directory to use for the RUI SDK instance’s configuration file. Cannot be empty; must exist and be writable.

productID (String) - The Revulytics-supplied product ID for this client; 10 digits. You obtain this ID after registering with Revulytics.

appName (String) - The customer-supplied application name for this client, to distinguish suites with the same
productID. Cannot be empty or contain white space; at most 16 UTF-8 characters. More information about the purpose of the appName parameter can be found in the knowledge base article: https://support.revulytics.com/hc/en-us/articles/360024050091
serverUrl (String) - Every product registered with Revulytics Usage Intelligence has its own unique CallHome URL
usually in the form ‘xxxxx.tbnet1.com’. This URL is generated automatically on account creation and is used by the SDK to communicate with the Revulytics Usage Intelligence server. You can get this URL from the Developer Zone once you login to the Usage Intelligence dashboard. If you have a Premium product account you may opt to use your own custom CallHome URL (such as http://updates.yourdomain.com) that must be setup as a CNAME DNS entry pointing to your unique Revulytics Usage Intelligence URL. Please note that before you can use your own custom URL you must first inform Revulytics Usage Intelligence support (support-rui@revulytics.com) to register your domain with the Revulytics Usage Intelligence server. If you fail to do this, the server will automatically reject any incoming calls using yourdomain.com as a CallHome URL. The URL should not contain a protocol prefix.
protocol (Int32) - Indicates whether HTTP + AES, HTTPS with fall-back to HTTP + AES, or HTTPS is used to communicate with the RUI Server.
Valid choices can be found in the RUIProtocolType enum and are: httpPlusEncryption (1), httpsWithFallback (2), or https (3).

aesKeyHex (String) - AES Key to use when protocol includes encryption (httpPlusEncryption or httpsWithFallback); 32 hex chars (128 bit) key.

multiSessionEnabled (bool) - Indicates whether or not the client will explicitly manage sessionID’s via RUISDK.StartSession and RUISDK.StopSession,
and supply those sessionID’s to the various event tracking APIs. Refer to single-vs-multiple-sessions().
reachOutOnAutoSync (bool) - Indicates whether or not a ReachOutTM should be requested as part of each RUI SDK Automatic Sync.
A ReachOutTM request will be made only if a ReachOutTM handler has been set by registering the default graphical handler (RUISDK constructor) or a custom handler (RUISDK.SetReachOutHandler). This value may be changed at runtime using the call RUISDK.SetReachOutOnAutoSync.

Return Type:

RUIResult enum value with the following possible values:

* ok                                     Function successful.
* sdkInternalErrorFatal                  Irrecoverable internal fatal error.  No further API calls should be made.
* sdkPermantelyDisabled                  The RUI Server has instructed a permanent disable.
* configAlreadyCreated                   Configuration has already been successfully created.
* invalidParameterExpectedNonEmpty       Some API parameter is expected to be non-empty, and is not.
* invalidParameterExpectedNoWhitespace   Some API parameter is expected to be free of white space, and is not.
* invalidParameterTooLong                Some API parameter violates its allowable maximum length.
* invalidConfigPath                      The configFilePath is not a well-formed directory name.
* invalidConfigPathNonexistentDir        The configFilePath identifies a directory that does not exist.
* invalidConfigPathNotWritable           The configFilePath identifies a directory that is not writable.
* invalidProductID                       The productID is not a well-formed Revulytics Product ID.
* invalidServerURL                       The serverURL is not a well-formed URL.
* invalidProtocol                        The protocol is not a legal value.
* invalidAESKeyEpxectedEmpty             The AES Key is expected to be NULL/empty, and it's not.
* invalidAESKeyLength                    The AES Key is not the expected length of 32 hex chars.
* invalidAESKeyFormat                    The AES Key is not valid hex encoding.

Single vs. Multiple session modes

In desktop software, a single application instance would normally have only one single user session. This means that such an application would only show one window (or set of windows) to a single user and interaction is done with that single user. If the user would like to use two different sessions, two instances of the application would have to be loaded that would not affect each other. In such cases, you should use the single session mode, that handles user sessions automatically and assumes that one process (instance) means one user session.

The multiple session mode needs to be used in multi-user applications, especially applications that have web interfaces. In such applications, a number of users might be using the same application process simultaneously. In such cases, you need to manually tell the Revulytics Usage Intelligence SDK when user sessions start and stop, and also how to link events (see Feature / Event Tracking) to user sessions. To do this, when starting or stopping a user session, the methods RUISDK.SessionStart and RUISDK.SessionStop should be used, and when tracking events, a session ID needs to be passed as a parameter.

Opt-Out mechanism

Starting from version 5.1.0, a new opt-out mechanism was introduced. Using this mechanism, if a user does not want to send tracking information to Revulytics, the method RUISDK.OptOut must be called after calling RUISDK.CreateConfig and before RUISDK.StartSDK. When RUISDK.OptOut is called, the SDK sends a message to the server after startup (RUISDK.StartSDK). This message informs the server that this client has opted-out and the server will register the opt-out. This message is only sent to the server once. The opt-out flag on the server will be used for reporting opt-out statistics only.

If RUISDK.OptOut is called before a new registration, the server will never have any data about that installation. If RUISDK.OptOut is called for an installation which was already being tracked, the server would still contain the data that had been collected in the past and no past data is deleted.

The SDK will send no further information to the server as long as the user is opted-out. The application must keep calling RUISDK.OptOut before every startup as long as the user wants to stay opted-out. If this method is not called, then the SDK assumes that the user is opting-in again and will start tracking normally.

Note that when an installation is not opted-out, it communicates with the server immediately on calling RUISDK.StartSDK. At this point, the SDK attempts to sync data regarding past application and event usage that had not been synced yet, and also system and product information such as OS version, CPU, GPU, product version, product edition, etc.

RUIRESULT RUISDK.OptOut ()

Instructs the SDK to send a message to the server to indicate that this user is opting-out (if not already sent in previous sessions) and disables all further functionality and communication with the server.

Returns:

One of the return status constants below:

* ok                         Function successful.
* sdkInternalErrorFatal      Irrecoverable internal fatal error.  No further API calls should be made.
* sdkAborted                 A required New Registration has failed, and hence the SDK is aborted.  ruiStopSDK and ruiDestroyInstance are possible.
* sdkPermanentlyDisabled     The RUI Server has instructed a permanent disable.
* configNotCreated           Configuration has not been successfully created.
* sdkAlreadyStarted          SDK has already been successfully started.
* sdkAlreadyStopped          SDK has already been successfully stopped.

Providing Product data

RUI SDK V5 requires that the application provide product data every time the RUI SDK instance is run. In addition you can optionally set License data for the application. Finally, if you are using proxies to access the internet, there is a function to set up the required information for connecting through that proxy.

Product Details

RUIResult RUISDK.SetProductData (String productEdition, String productLanguage, String productVersion, String productBuildNum)

Sets or clears the product data. NOTE: The product data must be set every time the RUI SDK instance is run. This is different than V4 of the RUI (Trackerbird) SDK where the supplied product data was stored in the SDK configuration file and if it was not supplied, the values in the configuration file were used.

RUISDK.SetProductData can be called between RUISDK.CreateConfig and RUISDK.StopSDK and can be called zero or more times.

RUISDK.SetProductData is a synchronous function returning when all functionality is completed.

Parameters:

productEdition (String) - The product edition that is to be set. Maximum length of 128 characters.

productLanguage (String) - The product language that is to be set. Maximum length of 128 characters.

productVersion (String) - The product version that is to be set. Maximum length of 128 characters.

productBuildNum (String) - The product build number that is to be set. Maximum length of 128 characters.

Return Type:

RUIResult enum value with the following possible values:

* ok                                     Function successful.
* sdkInternalErrorFatal                  Irrecoverable internal fatal error.  No further API calls should be made.
* sdkAborted                             A required New Registration has failed, and hence the SDK is aborted.  StopSDK and RUISDK destructor are possible.
* sdkSuspended                           The RUI Server has instructed a temporary back-off.
* sdkPermantelyDisabled                  The RUI Server has instructed a permanent disable.
* sdkOptedOut                            Instance has been instructed by the application to opt-out.
* configNotCreated                       Configuration has not been successfully created.
* sdkAlreadyStopped                      SDK has already been successfully stopped.

RUIResult RUISDK.SetProductEdition (String productEdition)

Sets or clears the product data. NOTE: The product data must be set every time the RUI SDK instance is run. This is different than V4 of the RUI (Trackerbird) SDK where the supplied product data was stored in the SDK configuration file and if it was not supplied, the values in the configuration file were used.

RUISDK.SetProductEdition can be called between RUISDK.CreateConfig and RUISDK.StopSDK and can be called zero or more times.

RUISDK.SetProductEdition is a synchronous function returning when all functionality is completed.

Parameters:

productEdition (String) - The product edition that is to be set. Maximum length of 128 characters.

Return Type:

RUIResult enum value with the following possible values:

* ok                                     Function successful.
* sdkInternalErrorFatal                  Irrecoverable internal fatal error.  No further API calls should be made.
* sdkAborted                             A required New Registration has failed, and hence the SDK is aborted.  StopSDK and RUISDK destructor are possible.
* sdkSuspended                           The RUI Server has instructed a temporary back-off.
* sdkPermantelyDisabled                  The RUI Server has instructed a permanent disable.
* sdkOptedOut                            Instance has been instructed by the application to opt-out.
* configNotCreated                       Configuration has not been successfully created.
* sdkAlreadyStopped                      SDK has already been successfully stopped.

RUIResult RUISDK.SetProductLanguage (String productLanguage)

Sets or clears the product data. NOTE: The product data must be set every time the RUI SDK instance is run. This is different than V4 of the RUI (Trackerbird) SDK where the supplied product data was stored in the SDK configuration file and if it was not supplied, the values in the configuration file were used.

RUISDK.SetProductLanguage can be called between RUISDK.CreateConfig and RUISDK.StopSDK and can be called zero or more times.

RUISDK.SetProductLanguage is a synchronous function returning when all functionality is completed.

Parameters:

productLanguage (String) - The product language that is to be set. Maximum length of 128 characters.

Return Type:

RUIResult enum value with the following possible values:

* ok                                     Function successful.
* sdkInternalErrorFatal                  Irrecoverable internal fatal error.  No further API calls should be made.
* sdkAborted                             A required New Registration has failed, and hence the SDK is aborted.  StopSDK and RUISDK destructor are possible.
* sdkSuspended                           The RUI Server has instructed a temporary back-off.
* sdkPermantelyDisabled                  The RUI Server has instructed a permanent disable.
* sdkOptedOut                            Instance has been instructed by the application to opt-out.
* configNotCreated                       Configuration has not been successfully created.
* sdkAlreadyStopped                      SDK has already been successfully stopped.

RUIResult RUISDK.SetProductVersion (String productVersion)

Sets or clears the product data. NOTE: The product data must be set every time the RUI SDK instance is run. This is different than V4 of the RUI (Trackerbird) SDK where the supplied product data was stored in the SDK configuration file and if it was not supplied, the values in the configuration file were used.

RUISDK.SetProductVersion can be called between RUISDK.CreateConfig and RUISDK.StopSDK and can be called zero or more times.

RUISDK.SetProductVersion is a synchronous function returning when all functionality is completed.

Parameters:

productVersion (String) - The product version number that is to be set. Maximum length of 128 characters.

Return Type:

RUIResult enum value with the following possible values:

* ok                                     Function successful.
* sdkInternalErrorFatal                  Irrecoverable internal fatal error.  No further API calls should be made.
* sdkAborted                             A required New Registration has failed, and hence the SDK is aborted.  StopSDK and RUISDK destructor are possible.
* sdkSuspended                           The RUI Server has instructed a temporary back-off.
* sdkPermantelyDisabled                  The RUI Server has instructed a permanent disable.
* sdkOptedOut                            Instance has been instructed by the application to opt-out.
* configNotCreated                       Configuration has not been successfully created.
* sdkAlreadyStopped                      SDK has already been successfully stopped.

RUIResult RUISDK.SetProductBuildNumber (String productBuildNum)

Sets or clears the product data. NOTE: The product data must be set every time the RUI SDK instance is run. This is different than V4 of the RUI (Trackerbird) SDK where the supplied product data was stored in the SDK configuration file and if it was not supplied, the values in the configuration file were used.

RUISDK.SetProductBuildNumber can be called between RUISDK.CreateConfig and RUISDK.StopSDK and can be called zero or more times.

RUISDK.SetProductBuildNumber is a synchronous function returning when all functionality is completed.

Parameters:

productBuildNum (String) - The product build number that is to be set. Maximum length of 128 characters.

Return Type:

RUIResult enum value with the following possible values:

* ok                                     Function successful.
* sdkInternalErrorFatal                  Irrecoverable internal fatal error.  No further API calls should be made.
* sdkAborted                             A required New Registration has failed, and hence the SDK is aborted.  StopSDK and RUISDK destructor are possible.
* sdkSuspended                           The RUI Server has instructed a temporary back-off.
* sdkPermantelyDisabled                  The RUI Server has instructed a permanent disable.
* sdkOptedOut                            Instance has been instructed by the application to opt-out.
* configNotCreated                       Configuration has not been successfully created.
* sdkAlreadyStopped                      SDK has already been successfully stopped.

License Management

RUIResult RUISDK.SetLicenseData (Int32 keyType, Int32 keyExpired, Int32 keyActivated, Int32 keyBlacklisted, Int32 keyWhitelisted, String sessionID = “”)

Sets or clears the license data. The legal parameter values include unchanged (-1). NOTE: Different from the V4 of the RUI SDK, a sessionID parameter can be supplied.

RUISDK.SetLicenseData can be called between RUISDK.CreateConfig and RUISDK.StopSDK and can be called zero or more times. However, the usage requirements of the sessionID parameter are different if RUISDK.SetLicenseData is called before RUISDK.StartSDK or called after RUISDK.StartSDK:

* Before StartSDK regardless of multiSessionEnabled - sessionID must be empty.
* After  StartSDK and multiSessionEnabled = false   - sessionID must be empty.  This is similar to event tracking APIs.
* After  StartSDK and multiSessionEnabled = true    - sessionID must be a current valid value used in RUISDK.StartSession,
                                                      or it can be empty.  This is different than normal event tracking APIs,
                                                      whereby a empty value is not allowed.

RUISDK.SetLicenseData can be called while a New Registration is being performed (RUISDK.CreateConfig, RUISDK.StartSDK). However, the event data is not written to the log file until the New Registration completes, and if the New Registration fails, the data will be lost.

RUISDK.SetLicenseData is an asynchronous function, returning immediately with further functionality executed on separate thread(s).

Parameters:

keyType (Int32) - One of the key types from the RUILicenseKeyType enum. Note that custom types can be used for application specific license types:

* unchanged (-1)
* evaluation (0)
* purchased (1)
* freeware (2)
* unknown (3)
* nfr (4) // Not For Resale
* custom1 (5)
* custom2 (6)
* custom3 (7)

keyExpired (Int32) - Indicates whether the client license has expired. Use one of the RUILicenseKeyStatus enum choices for the values:

* unchanged (-1)
* no (0)
* yes (1)

keyActivated (Int32) - Indicates whether the client license has been activated. Use one of the RUILicenseKeyStatus enum choices for the values:

* unchanged (-1)
* no (0)
* yes (1)

keyBlacklisted (Int32) - Indicates whether the client license key has been blacklisted. Use one of the RUILicenseKeyStatus enum choices for the values:

* unchanged (-1)
* no (0)
* yes (1)

keyWhitelisted (Int32) - Indicates whether the client license key has been whitelisted. Use one of the RUILicenseKeyStatus enum choices for the values:

* unchanged (-1)
* no (0)
* yes (1)

sessionID (String) - An optional session ID complying with above usage (content conditioning and validation rules in RUISDK.StartSession).

Return Type:

RUIResult enum value with the following possible values:

* ok                                     Function successful.
* sdkInternalErrorFatal                  Irrecoverable internal fatal error.  No further API calls should be made.
* sdkAborted                             A required New Registration has failed, and hence the SDK is aborted.  StopSDK and RUISDK destructor are possible.
* sdkSuspended                           The RUI Server has instructed a temporary back-off.
* sdkPermantelyDisabled                  The RUI Server has instructed a permanent disable.
* sdkOptedOut                            Instance has been instructed by the application to opt-out.
* configNotCreated                       Configuration has not been successfully created.
* sdkAlreadyStopped                      SDK has already been successfully stopped.
* invalidSessionIDExpectedEmpty          The sessionID is expected to be empty, and it was not.
* invalidSessionIDExpectedNonEmpty       The sessionID is expected to be non-empty, and it was not.
* invalidSessionIDTooShort               The sessionID violates its allowable minimum length. Minimum length is 10.
* invalidSessionIDTooLong                The sessionID violates its allowable maximum length. Maximum length is 64.
* invalidSessionIDNotActive              The sessionID is not currently in use.

Changing ReachOutTMon Autosync Setting

The flag to determine whether or not a ReachOutTM should be requested as part of each RUI SDK Automatic Sync is initially set in the RUISDK.CreateConfig call. There may be certain cases when the application wants to either enable or disable this functionality during the application lifetime. The function RUISDK.SetReachOutOnAutoSync allows the application to enable or disable this capability after RUISDK.CreateConfig has been called.

RUIResult SetReachOutOnAutoSync (Boolean reachOutOnAutoSyncSetting)

Enables (true) or disables(false) the ReachOutTMon Autosync capability. Note if the call does not change the existing setting, the API will still return ok.

RUISDK.SetReachOutOnAutoSync can be called between RUISDK.CreateConfig and RUISDK.StopSDK and can be called zero or more times.

Parameters:

reachOutOnAutoSyncSetting (bool) - Enable (true) or disable(false) the ReachOut on Autosync capability.

Return Type:

RUIResult enum value with the following possible values:

* ok                                     Function successful.
* sdkInternalErrorFatal                  Irrecoverable internal fatal error.  No further API calls should be made.
* sdkAborted                             A required New Registration has failed, and hence the SDK is aborted.  StopSDK and RUISDK destructor are possible.
* sdkSuspended                           The RUI Server has instructed a temporary back-off.
* sdkPermantelyDisabled                  The RUI Server has instructed a permanent disable.
* sdkOptedOut                            Instance has been instructed by the application to opt-out.
* configNotCreated                       Configuration has not been successfully created.
* sdkAlreadyStopped                      SDK has already been successfully stopped.

Proxy Support

The RUI SDK V5 library supports communications through HTTP proxy servers on all major operating system types: Windows, Linux, and Mac OS X. Application developers are responsible for obtaining proxy credentials (if the proxy requires it) and setting those credentials in the RUI SDK so communications can use the credentials for the proxy. The function RUISDK.SetProxy handles setting and clearing the proxy related information.

RUIResult RUISDK.SetProxy (String address, UInt16 port, String username, String password)

Sets or clears the data to be used with a proxy. If there is no proxy between the RUI SDK and the RUI Server, there is no need to use this function. The address can be either empty (for transparent proxy servers) or non-empty. The username and password must both be empty (non-authenticating proxy) or both be non-empty (authenticating proxy). The port is only used for non-transparent proxy servers, hence port must be zero if address is empty, otherwise port must be non-zero. The RUI SDK uses the proxy data in multiple ways to attempt to communicate via a proxy. The allowed parameter combinations and their usage are as follows:

address,       port,     username,       password

empty,          0,         empty,          empty          - Resets the proxy data to its initial state, no proxy server is
                                                            used, and the RUI Server is contacted directly.

non-empty,      not 0,     empty,          empty          - Identifies a non-authenticating non-transparent proxy that will be used
                                                            unless communications fails, then falling back to using no proxy.

empty,          0,         non-empty,      non-empty      - Identifies an authenticating transparent proxy that will be used
                                                            unless communications fails, then falling back to using no proxy.

non-empty,      not 0,     non-empty,      non-empty      - Identifies an non-transparent authenticating proxy that will be used
                                                            unless communications fails, then falling back to using an
                                                            authenticating transparent proxy, then falling back to using no proxy.

RUISDK.SetProxy can be called between RUISDK.CreateConfig and RUISDK.StopSDK, and can be called zero or more times.

RUISDK.SetProxy is a synchronous function, returning when all functionality is completed.

Parameters:

address (String) - The server name or IP address (dot notation) for the proxy server.

port (UInt16) - The port for the proxy server; only used with non-transparent proxy, port != 0 if and only if address non-empty.

username (String) - The proxy username; username and password must both be empty or both be non-empty.

password (String) - The proxy password; username and password must both be empty or both be non-empty.

Return Type:

RUIResult enum value with the following possible values:

* ok                                     Function successful.
* sdkInternalErrorFatal                  Irrecoverable internal fatal error.  No further API calls should be made.
* sdkAborted                             A required New Registration has failed, and hence the SDK is aborted.  StopSDK and RUISDK destructor are possible.
* sdkPermantelyDisabled                  The RUI Server has instructed a permanent disable.
* sdkOptedOut                           Instance has been instructed by the application to opt-out.
* invalidProxyCredentials                The proxy username and password are not an allowable combination.
* invalidProxyPort                       The proxy port was not valid.
* configNotCreated                       Configuration has not been successfully created.
* sdkAlreadyStopped                      SDK has already been successfully stopped.