react-native-branch
Version:
Branch Metrics React Native SDK
201 lines (174 loc) • 6.24 kB
JavaScript
import { Platform } from 'react-native';
import RNBranch from './RNBranch';
import createBranchUniversalObject from './branchUniversalObject';
import BranchEvent from './BranchEvent';
import BranchSubscriber from './BranchSubscriber';
const packageFile = require('./../package.json');
export const VERSION = packageFile.version;
class Branch {
key = null;
_checkCachedEvents = true;
_debug = false;
constructor(options = {}) {
if (options.debug) this._debug = true;
console.info('Initializing react-native-branch v. ' + VERSION);
}
subscribe(options) {
if (typeof options === 'function') {
/*
* Support for legacy API, passing a single callback function:
* branch.subscribe(({params, error, uri}) => { ... }). This is
* the same as the onOpenComplete callback.
*/
options = {
onOpenComplete: options,
};
}
/*
* You can specify checkCachedEvents in the subscribe options to control
* this per subscriber.
*/
if (!('checkCachedEvents' in options)) {
options.checkCachedEvents = this._checkCachedEvents;
}
this._checkCachedEvents = false;
const subscriber = new BranchSubscriber(options);
subscriber.subscribe();
return () => subscriber.unsubscribe();
}
skipCachedEvents() {
/*** Sets to ignore cached events. ***/
this._checkCachedEvents = false;
}
/*** Tracking related methods ***/
disableTracking = (disable) => RNBranch.disableTracking(disable);
isTrackingDisabled = RNBranch.isTrackingDisabled;
/*** RNBranch singleton methods ***/
getLatestReferringParams = (synchronous = false) =>
RNBranch.getLatestReferringParams(synchronous);
getFirstReferringParams = RNBranch.getFirstReferringParams;
lastAttributedTouchData = (attributionWindow = {}) =>
RNBranch.lastAttributedTouchData(attributionWindow);
setIdentity = (identity) => RNBranch.setIdentity(identity);
setIdentityAsync = (identity) => RNBranch.setIdentityAsync(identity);
setRequestMetadata = (key, value) => {
console.info(
'[Branch] setRequestMetadata has limitations when called from JS. Some network calls are made prior to the JS layer being available, those calls will not have the metadata.'
);
return RNBranch.setRequestMetadataKey(key, value);
};
addFacebookPartnerParameter = (name, value) => {
console.info(
'[Branch] addFacebookPartnerParameter has limitations when called from JS. Some network calls are made prior to the JS layer being available, those calls will not have the partner parameters.'
);
return RNBranch.addFacebookPartnerParameter(name, value);
};
addSnapPartnerParameter = (name, value) => {
console.info(
'[Branch] addSnapPartnerParameter has limitations when called from JS. Some network calls are made prior to the JS layer being available, those calls will not have the partner parameters.'
);
return RNBranch.addSnapPartnerParameter(name, value);
};
clearPartnerParameters = RNBranch.clearPartnerParameters;
logout = RNBranch.logout;
getShortUrl = RNBranch.getShortUrl;
openURL = (url, options = {}) => {
return Platform.select({
android: () => RNBranch.openURL(url, options),
ios: () => RNBranch.openURL(url),
})();
};
handleATTAuthorizationStatus = (ATTAuthorizationStatus) => {
if (Platform.OS != 'ios') return;
let normalizedAttAuthorizationStatus = -1;
switch (ATTAuthorizationStatus) {
case 'authorized':
normalizedAttAuthorizationStatus = 3;
break;
case 'denied':
normalizedAttAuthorizationStatus = 2;
break;
case 'undetermined':
normalizedAttAuthorizationStatus = 0;
break;
case 'restricted':
normalizedAttAuthorizationStatus = 1;
break;
}
if (normalizedAttAuthorizationStatus < 0) {
console.info(
'[Branch] handleATTAuthorizationStatus received an unrecognized value. Value must be one of; authorized, denied, undetermined, or restricted'
);
return;
}
RNBranch.handleATTAuthorizationStatus(normalizedAttAuthorizationStatus);
};
/*** BranchUniversalObject ***/
createBranchUniversalObject = createBranchUniversalObject;
/*** BranchQRCode ***/
getBranchQRCode = (
qrCodeSettings = {},
branchUniversalObject = {},
linkProperties = {},
controlParams = {}
) => {
return RNBranch.getBranchQRCode(
qrCodeSettings,
branchUniversalObject,
linkProperties,
controlParams
);
};
/*** PreInstall Parameters ***/
setPreInstallCampaign = (campaign) =>
RNBranch.setPreinstallCampaign(campaign);
setPreInstallPartner = (partner) => RNBranch.setPreinstallPartner(partner);
/*** DMA Consent Params ***/
setDMAParamsForEEA = (
eeaRegion,
adPersonalizationConsent,
adUserDataUsageConsent
) => {
const isValid =
validateParam(eeaRegion, 'eeaRegion') &&
validateParam(adPersonalizationConsent, 'adPersonalizationConsent') &&
validateParam(adUserDataUsageConsent, 'adUserDataUsageConsent');
if (isValid) {
RNBranch.setDMAParamsForEEA(
eeaRegion,
adPersonalizationConsent,
adUserDataUsageConsent
);
} else {
console.warn('setDMAParamsForEEA: Unable to set DMA params.');
}
};
/*** Consumer Protection Attribution Level ***/
setConsumerProtectionAttributionLevel = (level) => {
const validLevels = ["FULL", "REDUCED", "MINIMAL", "NONE"];
if (!validLevels.includes(level)) {
console.warn(
`[Branch] setConsumerProtectionAttributionLevel: level must be one of ${validLevels.join(
", "
)}, but got ${level}`
);
return;
}
return RNBranch.setConsumerProtectionAttributionLevel(level);
};
validateSDKIntegration = () => {
RNBranch.validateSDKIntegration();
};
}
const validateParam = (param, paramName) => {
if (param === true || param === false) {
return true;
} else {
console.warn(
`setDMAParamsForEEA: ${paramName} must be boolean, but got ${param}`
);
return false;
}
};
export { Branch, BranchEvent, BranchSubscriber };
export default new Branch();