public interface ContextProvider
Modifier and Type | Method and Description |
---|---|
JSONObject |
generateContext()
This method is used to generate 'properties' object which is wrapped to create a
'context' event for MCS.
|
JSONObject generateContext()
Currently, MCS supports following fields in 'properties' object:
timezone - mobile device's offset from UTC in seconds (optional)
carrier - mobile device's carrier (i.e. the plan carrier) (optional)
model - mobile device model name (optional)
manufacturer - mobile device manufacturer (optional)
osName - mobile device operating system name (optional)
osVersion- mobile device operating system version (optional)
osBuild - mobile device operating system build (optional)
latitude - mobile device's GPS latitude (optional)
longitude - mobile device's GPS longitude (optional)
locality - the mobile device's locality (optional)
region - the mobile device's region (optional)
postalCode - the mobile device's postal code (optional)
country - the mobile device's country (optional)
userName - the user of the mobile device logged on when the events
were logged (optional)
userName - It could be added into 'properties' object by the custom
class which implements this interface or by the framework.
By default logging of userName through framework is disabled. It
could be enabled through logging.properties file.
Enable: oracle.maf.api.analytics.McsAnalyticsHandler.recordUsername=trueOnce enabled, context event will contain userName and a new context event will be generated anytime a new user logs into a secured feature. Location - It should be defined either by providing locality, region, postalCode and country or by providing latitude and longitude. latitude and longitude information will get translated into City/State/Country/PostalCode by MCS 'properties' object has to be a JSONObject with Key/Value pair of type String Implementation of generateContext() should return a JSONObject with the fields which MCS supports, anything else will be rejected by MCS. Examples of usage:
JSONObject properties = new JSONObject();
properties.put("userName", getUsername());
properties.put("latitude", getLatitude());
properties.put("longitude", getLongitude());
properties.put("model", getDeviceMode());
properties.put("osName", getDeviceOs());
properties.put("osVersion", getDeviceVersion());
This JSONObject will represent 'properties' object in the payload. Framework will
implicitly add name, type, timestamp and sessionID to wrap it.
Generated 'context' event:
{
"name":"context",
"type":"system",
"timestamp":"2013-04-12T23:20:54.345Z",
"properties":{
"userName": "JDoe123",
"latitude":"37.35687",
"longitude":"-122.11663",
"model":"iPhone6,1",
"osName":"iPhone OS",
"osVersion":"9.1"
}
"sessionID":"com.company.AppName_0f0c50bd-3dc5-4c41-9d0a-053d99cfaa25_151216142817"
}
If ContextProvider is implemented by a class named 'CustomContextProvider'
and if the user wishes to use this class to generate context event then a
fully qualified class name should be provided in logging.properties for
'contextProviderClassName' property. eg:
oracle.maf.api.analytics.McsAnalyticsHandler.contextProviderClassName =com.company.CustomContextProvider'context' event could also be fired just like any other events using AnalyticsUtilities.fireEvent and providing it a JSONObject with the fields accepted by MCS for 'context' event. However, for this to work, 'contextProviderClassName' property in loggin.properties should be provided with a value, either 'McsContextProvider' or any custom class which implements this interface.
AnalyticsUtilities.fireEvent(Level.INFO, AnalyticsUtilities.CATEGORY_SYSTEM, AnalyticsUtilities.EVENT_CONTEXT, properties);