@selligent-marketing-cloud/selligent-cordova
Version:
Cordova bridge for Selligent SDK
366 lines (332 loc) • 13.7 kB
JavaScript
var argscheck = require('cordova/argscheck');
var cordova = require('cordova');
var SelligentConstants = require('./SelligentConstants');
var SelligentHelpers = require('./SelligentHelpers');
var SELLIGENT_PLUGIN = "SelligentPlugin";
var VERSION_LIB = "versionLib";
var RELOAD = "reload";
var SEND_DEVICE_INFO = "sendDeviceInfo";
var GET_IN_APP_MESSAGES = "getInAppMessages";
var ENABLE_GEOLOCATION = "enableGeolocation";
var IS_GEOLOCATION_ENABLED = "isGeolocationEnabled";
var GET_DEVICE_ID = "getDeviceId";
var ENABLE_NOTIFICATIONS = "enableNotifications";
var DISPLAY_LAST_RECEIVED_REMOTE_PUSH_NOTIFICATION = "displayLastReceivedRemotePushNotification";
var GET_LAST_REMOTE_PUSH_NOTIFICATION = "getLastRemotePushNotification";
var GET_IN_APP_MESSAGES = "getInAppMessages";
var SET_IN_APP_MESSAGE_AS_SEEN = "setInAppMessageAsSeen";
var EXECUTE_BUTTON_ACTION = "executeButtonAction";
/**
* @exports Selligent
*/
var Selligent = {};
// Map the Selligent Constants to the base Selligent plugin.
for (var key in SelligentConstants) {
Selligent[key] = SelligentConstants[key];
}
/**
* Returns the version of the underlying Selligent SDK.
*
* @param {function} successCallback Callback function on success.
* @param {function} errorCallback Callback function on error.
* @returns {string} Returns the version of the underlying Selligent SDK.
*/
Selligent.getVersionLib = function (successCallback, errorCallback) {
// check that callbacks are functions
// for more information see https://github.com/apache/cordova-js/blob/master/src/common/argscheck.js
argscheck.checkArgs('FF', 'Selligent.getVersionLib', arguments);
cordova.exec(
successCallback,
errorCallback,
SELLIGENT_PLUGIN,
VERSION_LIB
);
};
/**
* Reload settings of the Selligent manager.
*
* @param {function} successCallback Callback function on success.
* @param {function} errorCallback Callback function on error.
* @param {object} settings Settings to reload the Selligent manager with.
*/
Selligent.reloadSettings = function (successCallback, errorCallback, settings) {
// check that args is an object and callbacks are functions
argscheck.checkArgs('FFO', 'Selligent.reloadSettings', arguments);
// check if required options are valid
if (!SelligentHelpers.hasRequiredParameterAndMatchesType(settings, "url", "string") ||
!SelligentHelpers.hasRequiredParameterAndMatchesType(settings, "clientId", "string") ||
!SelligentHelpers.hasRequiredParameterAndMatchesType(settings, "privateKey", "string")) {
errorCallback(SelligentHelpers.WRONG_ARGUMENTS + " " + "Expected an object with keys \"url\", \"clientId\" and \"privateKey\", and strings for values." + " " + SelligentHelpers.MORE_INFORMATION);
return;
}
if (!SelligentHelpers.hasOptionalParameterAndMatchesType(settings, "clearCacheIntervalValue", "number", Selligent.ClearCacheIntervalValue)) {
errorCallback(SelligentHelpers.createTypeErrorMessage("clearCacheIntervalValue", settings.clearCacheIntervalValue, "number"));
return;
}
if (!SelligentHelpers.hasOptionalParameterAndMatchesType(settings, "configureLocationServices", "boolean")) {
errorCallback(SelligentHelpers.createTypeErrorMessage("configureLocationServices", settings.configureLocationServices, "boolean"));
return;
}
if (!SelligentHelpers.hasOptionalParameterAndMatchesType(settings, "inAppMessageRefreshType", "number", Selligent.InAppMessageRefreshType)) {
errorCallback(SelligentHelpers.createTypeErrorMessage("inAppMessageRefreshType", settings.inAppMessageRefreshType, "number"));
return;
}
if (!SelligentHelpers.hasOptionalParameterAndMatchesType(settings, "remoteMessageDisplayType", "number", Selligent.RemoteMessagesDisplayType)) {
errorCallback(SelligentHelpers.createTypeErrorMessage("remoteMessageDisplayType", settings.remoteMessageDisplayType, "number"));
return;
}
// iOS only
if (!SelligentHelpers.hasOptionalParameterAndMatchesType(settings, "shouldClearBadge", "boolean")) {
errorCallback(SelligentHelpers.createTypeErrorMessage("shouldClearBadge", settings.shouldClearBadge, "boolean"));
return;
}
if (!SelligentHelpers.hasOptionalParameterAndMatchesType(settings, "shouldDisplayRemoteNotification", "boolean")) {
errorCallback(SelligentHelpers.createTypeErrorMessage("shouldDisplayRemoteNotification", settings.shouldDisplayRemoteNotification, "boolean"));
return;
}
if (!SelligentHelpers.hasOptionalParameterAndMatchesType(settings, "shouldPerformBackgroundFetch", "boolean")) {
errorCallback(SelligentHelpers.createTypeErrorMessage("shouldPerformBackgroundFetch", settings.shouldPerformBackgroundFetch, "boolean"));
return;
}
// Android only
if (!SelligentHelpers.hasRequiredParameterAndMatchesType(settings, "fullyQualifiedNotificationActivityClassName", "string")) {
errorCallback(SelligentHelpers.WRONG_ARGUMENTS + " " + "Expected an object with key \"fullyQualifiedNotificationActivityClassName\" of the type \"string\"." + " " + SelligentHelpers.MORE_INFORMATION);
return;
}
// continue if options are valid
cordova.exec(
successCallback,
errorCallback,
SELLIGENT_PLUGIN,
RELOAD,
[settings]
);
};
/**
* Send device information to selligent.
*
* @param {function} successCallback Callback function on success.
* @param {function} errorCallback Callback function on error.
* @param {object} options Object with externalId.
*/
Selligent.sendDeviceInfo = function (successCallback, errorCallback, options) {
// check that options is an object and callbacks are functions
argscheck.checkArgs('FFO', 'Selligent.sendDeviceInfo', arguments);
// check if required options are valid
if (!SelligentHelpers.hasRequiredParameterAndMatchesType(options, "externalId", "string")) {
errorCallback(SelligentHelpers.WRONG_ARGUMENTS + " " + "Expected an object with key \"externalId\" of the type \"string\"." + " " + SelligentHelpers.MORE_INFORMATION);
return;
}
// continue if options are valid
cordova.exec(
successCallback,
errorCallback,
SELLIGENT_PLUGIN,
SEND_DEVICE_INFO,
[options.externalId]
);
};
/**
* Load settings from "/assets/selligent.json"
*
* @param {function} successCallback Callback function on success.
* @param {function} errorCallback Callback function on error.
* @returns {object} Returns an object containing the settings of the selligent.json file.
*/
Selligent.loadSettings = function (successCallback, errorCallback) {
// check that callbacks are functions
argscheck.checkArgs('FF', 'Selligent.loadSettings', arguments);
try {
var xobj = new XMLHttpRequest();
xobj.overrideMimeType("application/json");
xobj.open('GET', 'assets/selligent.json', true);
xobj.onreadystatechange = function () {
if (xobj.readyState == 4) {
successCallback(JSON.parse(xobj.responseText));
}
};
xobj.send(null);
} catch (error) {
errorCallback(error);
}
};
/**
* Get in app messages.
*
* @param {function} successCallback Callback function on success.
* @param {function} errorCallback Callback function on error.
*/
Selligent.getInAppMessages = function (successCallback, errorCallback) {
cordova.exec(
successCallback,
errorCallback,
SELLIGENT_PLUGIN,
GET_IN_APP_MESSAGES
)
}
/**
* Enable/disable geolocation.
*
* @param {function} successCallback Callback function on success.
* @param {function} errorCallback Callback function on error.
* @param {boolean} enabled Boolean to enable or disable geolocation.
*/
Selligent.enableGeolocation = function (successCallback, errorCallback, enabled) {
// check that callbacks are functions (can't check args as a boolean)
argscheck.checkArgs('FF*', 'Selligent.enableGeolocation', arguments);
if (!SelligentHelpers.typeMatches(enabled, "boolean")) {
errorCallback(SelligentHelpers.WRONG_ARGUMENTS + " " + "Expected a boolean." + " " + SelligentHelpers.MORE_INFORMATION);
return;
}
cordova.exec(
successCallback,
errorCallback,
SELLIGENT_PLUGIN,
ENABLE_GEOLOCATION,
[enabled]
);
};
/**
* Check if geolocation is enabled or disabled.
*
* @param {function} successCallback Callback function on success.
* @param {function} errorCallback Callback function on error.
* @returns {boolean} Returns a boolean stating geolocation is enabled or disabled.
*/
Selligent.isGeolocationEnabled = function (successCallback, errorCallback) {
// check that callbacks are functions
argscheck.checkArgs('FF', 'Selligent.isGeolocationEnabled', arguments);
cordova.exec(
successCallback,
errorCallback,
SELLIGENT_PLUGIN,
IS_GEOLOCATION_ENABLED
);
};
/**
* Returns the device Id.
*
* @param {function} successCallback Callback function on success.
* @param {function} errorCallback Callback function on error.
* @returns {string} Returns the version of the underlying Selligent SDK.
*/
Selligent.getDeviceId = function (successCallback, errorCallback) {
// check that callbacks are functions
// for more information see https://github.com/apache/cordova-js/blob/master/src/common/argscheck.js
argscheck.checkArgs('FF', 'Selligent.getDeviceId', arguments);
cordova.exec(
successCallback,
errorCallback,
SELLIGENT_PLUGIN,
GET_DEVICE_ID
);
};
/**
* Enable/disable notification.
*
* @param {function} successCallback Callback function on success.
* @param {function} errorCallback Callback function on error.
* @param {boolean} enabled Boolean to enable or disable notifications.
*/
Selligent.enableNotifications = function (successCallback, errorCallback, enabled) {
// check that callbacks are functions (can't check args as a boolean)
argscheck.checkArgs('FF*', 'Selligent.enableNotifications', arguments);
if (!SelligentHelpers.typeMatches(enabled, "boolean")) {
errorCallback(SelligentHelpers.WRONG_ARGUMENTS + " " + "Expected a boolean." + " " + SelligentHelpers.MORE_INFORMATION);
return;
}
cordova.exec(successCallback,
errorCallback,
SELLIGENT_PLUGIN,
ENABLE_NOTIFICATIONS,
[enabled]
);
};
/**
* Display the last received remote push notification
*
* @param {function} successCallback Callback function on success.
* @param {function} errorCallback Callback function on error.
*/
Selligent.displayLastReceivedRemotePushNotification = function (successCallback, errorCallback) {
// check that callbacks are functions
argscheck.checkArgs('FF', 'Selligent.displayLastReceivedRemotePushNotification', arguments);
cordova.exec(
successCallback,
errorCallback,
SELLIGENT_PLUGIN,
DISPLAY_LAST_RECEIVED_REMOTE_PUSH_NOTIFICATION
);
};
/**
* Get last remote push notification
*
* @param {function} successCallback Callback function on success.
* @param {function} errorCallback Callback function on error.
* @returns {object} Returns the last remote push notification.
*/
Selligent.getLastRemotePushNotification = function (successCallback, errorCallback) {
// check that callbacks are functions
argscheck.checkArgs('FF', 'Selligent.getLastRemotePushNotification', arguments);
cordova.exec(
successCallback,
errorCallback,
SELLIGENT_PLUGIN,
GET_LAST_REMOTE_PUSH_NOTIFICATION
);
};
/**
* Get all in app messages
*
* @param {function} successCallback Callback function on success.
* @param {function} errorCallback Callback function on error.
* @returns {object} Returns all in app messages and additional information.
*/
Selligent.getInAppMessages = function (successCallback, errorCallback) {
// check that callbacks are functions
argscheck.checkArgs('FF', 'Selligent.getInAppMessages', arguments);
cordova.exec(
successCallback,
errorCallback,
SELLIGENT_PLUGIN,
GET_IN_APP_MESSAGES
);
};
/**
* Set in app message as seen
*
* @param {function} successCallback Callback function on success.
* @param {function} errorCallback Callback function on error.
* @param {string} messageId Message id to identify the message which has been seen.
*/
Selligent.setInAppMessageAsSeen = function (successCallback, errorCallback, messageId) {
// check that callbacks are functions
argscheck.checkArgs('FF', 'Selligent.setInAppMessageAsSeen', arguments);
cordova.exec(
successCallback,
errorCallback,
SELLIGENT_PLUGIN,
SET_IN_APP_MESSAGE_AS_SEEN,
[messageId]
);
};
/**
* Execute action on button
*
* @param {function} successCallback Callback function on success.
* @param {function} errorCallback Callback function on error.
* @param {string} messageId Message id to identify the message.
* @param {string} buttonId Button id to identify the message.
*/
Selligent.executeButtonAction = function (successCallback, errorCallback, buttonId, messageId) {
// check that callbacks are functions
argscheck.checkArgs('FF', 'Selligent.executeButtonAction', arguments);
cordova.exec(
successCallback,
errorCallback,
SELLIGENT_PLUGIN,
EXECUTE_BUTTON_ACTION,
[buttonId, messageId]
);
};
module.exports = Selligent;