@nativescript/firebase-analytics
Version:
NativeScript Firebase - Analytics
159 lines • 5.88 kB
JavaScript
import { Utils } from '@nativescript/core';
import { firebase, FirebaseApp } from '@nativescript/firebase-core';
import { ConsentStatus, ConsentType } from './common';
export * from './common';
let defaultAnalytics;
const fb = firebase();
Object.defineProperty(fb, 'analytics', {
value: () => {
if (!defaultAnalytics) {
defaultAnalytics = new Analytics();
}
return defaultAnalytics;
},
writable: false,
});
function numberHasDecimals(item) {
return !(item % 1 === 0);
}
function serialize(data) {
switch (typeof data) {
case 'string':
case 'boolean':
case 'number': {
return data;
}
case 'object': {
if (data === null) {
return null;
}
if (Array.isArray(data)) {
const store = new java.util.ArrayList();
data.forEach((item) => {
const value = serialize(item);
switch (typeof value) {
case 'object':
if (value instanceof android.os.Bundle) {
store.add(value);
}
if (value instanceof java.util.ArrayList) {
store.add(value);
}
break;
}
});
return store;
}
const store = new android.os.Bundle();
Object.keys(data).forEach((key) => {
const value = serialize(data[key]);
switch (typeof value) {
case 'boolean':
store.putBoolean(key, value);
break;
case 'number':
if (numberHasDecimals(value)) {
store.putDouble(key, value);
}
else {
store.putLong(key, value);
}
break;
case 'string':
store.putString(key, value);
break;
case 'object':
if (value instanceof android.os.Bundle) {
store.putBundle(key, value);
}
else if (value instanceof java.util.ArrayList) {
store.putParcelableArrayList(key, value);
}
else {
store.putString(key, null);
}
break;
}
});
return store;
}
default:
return null;
}
}
export class Analytics {
constructor() {
if (defaultAnalytics) {
return defaultAnalytics;
}
defaultAnalytics = this;
this._native = com.google.firebase.analytics.FirebaseAnalytics.getInstance(Utils.android.getApplicationContext());
}
handleOpenURL(url) { }
handleUserActivity(userActivity) { }
get app() {
if (!this._app) {
// @ts-ignore
this._app = FirebaseApp.fromNative(com.google.firebase.FirebaseApp.getInstance());
}
return this._app;
}
get appInstanceId() {
return this._native.getAppInstanceId();
}
setSessionTimeoutInterval(sessionTimeoutInterval) {
this._native.setSessionTimeoutDuration(sessionTimeoutInterval);
}
setUserProperty(key, value) {
this._native.setUserProperty(key, value);
}
setAnalyticsCollectionEnabled(analyticsCollectionEnabled) {
this._native.setAnalyticsCollectionEnabled(analyticsCollectionEnabled);
}
setUserId(userId) {
this._native.setUserId(userId);
}
logEvent(name, parameters) {
org.nativescript.firebase.analytics.FirebaseAnalytics.logEvent(this._native, name, serialize(parameters));
}
resetAnalyticsData() {
this._native.resetAnalyticsData();
}
setDefaultEventParameters(parameters) {
this._native.setDefaultEventParameters(serialize(parameters));
}
setConsent(consentSettings) {
const nativeMap = new java.util.HashMap(consentSettings?.size ?? 0);
consentSettings.forEach((value, key) => {
let nativeKey;
let nativeValue;
switch (key) {
case ConsentType.Ad_Storage:
nativeKey = com.google.firebase.analytics.FirebaseAnalytics.ConsentType.AD_STORAGE;
break;
case ConsentType.Analytics_Storage:
nativeKey = com.google.firebase.analytics.FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE;
break;
case ConsentType.Ad_User_Data:
nativeKey = com.google.firebase.analytics.FirebaseAnalytics.ConsentType.AD_USER_DATA;
break;
case ConsentType.Ad_Personalization:
nativeKey = com.google.firebase.analytics.FirebaseAnalytics.ConsentType.AD_PERSONALIZATION;
break;
}
switch (value) {
case ConsentStatus.Denied:
nativeValue = com.google.firebase.analytics.FirebaseAnalytics.ConsentStatus.DENIED;
break;
case ConsentStatus.Granted:
nativeValue = com.google.firebase.analytics.FirebaseAnalytics.ConsentStatus.GRANTED;
break;
}
if (nativeKey && nativeValue) {
nativeMap.put(nativeKey, nativeValue);
}
});
this._native.setConsent(nativeMap);
}
}
//# sourceMappingURL=index.android.js.map