Skip to content
This repository was archived by the owner on Apr 4, 2023. It is now read-only.

Commit 2a8745b

Browse files
author
Pierre BOULC'H
committed
Analytics add ComplexLogEvent for Android & iOS
1 parent 9b0bc2d commit 2a8745b

File tree

3 files changed

+139
-37
lines changed

3 files changed

+139
-37
lines changed

demo/app/main-view-model.ts

Lines changed: 23 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import {
77
admob as firebaseAdMob,
88
crashlytics as firebaseCrashlytics,
99
storage as firebaseStorage,
10-
User
10+
User,
11+
LogComplexEventTypeParameter
1112
} from "nativescript-plugin-firebase";
1213
import * as fs from "tns-core-modules/file-system";
1314
import { MessagingViewModel } from './messaging-view-model';
@@ -501,6 +502,10 @@ export class HelloWorldModel extends Observable {
501502
}
502503
);
503504

505+
/**
506+
* Same thing as logEvent but can add an array or specific types not just string (LogComplexEventTypeParameter.BOOLEAN, LogComplexEventTypeParameter.STRING,
507+
* LogComplexEventTypeParameter.DOUBLE, LogComplexEventTypeParameter.FLOAT, LogComplexEventTypeParameter.INT, LogComplexEventTypeParameter.ARRAY)
508+
*/
504509
firebase.analytics.logComplexEvent({
505510
key: "view_item_list",
506511
parameters: [{
@@ -509,44 +514,31 @@ export class HelloWorldModel extends Observable {
509514
value: [
510515
{
511516
parameters: [
512-
{ key: "item_id", value: "id de l’offre", type: "string"},
513-
{key: "item_name", value: "uri métier", type: "string"},
514-
{key: "item_category", value: "category", type: "string"},
515-
{key: "item_variant", value: "variant", type: "string"},
516-
{key: "item_brand", value: "nom de l’entreprise", type: "string"},
517-
{key: " price", value: 1 , type: "long"},
518-
{key: "item_list", value: "LO-Moteur" , type: "string" },
519-
{key: "index", value: 1 , type: "0"}
517+
{ key: "item_id", value: "id of item", type: LogComplexEventTypeParameter.STRING},
518+
{key: "item_name", value: "name of item", type: LogComplexEventTypeParameter.STRING},
519+
{key: "item_category", value: "category", type: LogComplexEventTypeParameter.STRING},
520+
{key: "item_variant", value: "variant", type: LogComplexEventTypeParameter.STRING},
521+
{key: "item_brand", value: "name of item brand", type: LogComplexEventTypeParameter.STRING},
522+
{key: "price", value: 1 , type: LogComplexEventTypeParameter.DOUBLE},
523+
{key: "item_list", value: "name of list" , type: LogComplexEventTypeParameter.STRING },
524+
{key: "index", value: 1 , type: LogComplexEventTypeParameter.INT}
520525

521526
]
522527
},
523528
{
524529
parameters: [
525-
{ key: "item_id", value: "id de l’offre 1", type: "string"},
526-
{key: "item_name", value: "uri métier", type: "string"},
527-
{key: "item_category", value: "category", type: "string"},
528-
{key: "item_variant", value: "variant", type: "string"},
529-
{key: "item_brand", value: "nom de l’entreprise", type: "string"},
530-
{key: " price", value: 1 , type: "long"},
531-
{key: "item_list", value: "LO-Moteur" , type: "string" },
532-
{key: "index", value: 2 , type: "int"}
533-
534-
]
535-
},
536-
{
537-
parameters: [
538-
{ key: "item_id", value: "id de l’offre 2", type: "string"},
539-
{key: "item_name", value: "uri métier", type: "string"},
540-
{key: "item_category", value: "category", type: "string"},
541-
{key: "item_variant", value: "variant", type: "string"},
542-
{key: "item_brand", value: "nom de l’entreprise", type: "string"},
543-
{key: " price", value: 1 , type: "long"},
544-
{key: "item_list", value: "LO-Moteur" , type: "string" },
545-
{key: "index", value: 3 , type: "int"}
530+
{ key: "item_id", value: "id of item", type: LogComplexEventTypeParameter.STRING},
531+
{key: "item_name", value: "name of item", type: LogComplexEventTypeParameter.STRING},
532+
{key: "item_category", value: "category", type: LogComplexEventTypeParameter.STRING},
533+
{key: "item_variant", value: "variant", type: LogComplexEventTypeParameter.STRING},
534+
{key: "item_brand", value: "name of item brand", type: LogComplexEventTypeParameter.STRING},
535+
{key: "price", value: 1 , type: LogComplexEventTypeParameter.DOUBLE},
536+
{key: "item_list", value: "name of list" , type: LogComplexEventTypeParameter.STRING },
537+
{key: "index", value: 2 , type: LogComplexEventTypeParameter.INT}
546538

547539
]
548540
}
549-
]
541+
]
550542
}]
551543
});
552544

src/analytics/analytics.android.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ export function logEvent(options: LogEventOptions): Promise<void> {
3636

3737
function getArrayList(array: Array<LogComplexEventOptions>): java.util.ArrayList<android.os.Bundle> {
3838
let returnArray = new java.util.ArrayList<android.os.Bundle>();
39-
console.log("HERE 24");
4039
for (const p in array) {
4140
const param = array[p];
4241
if (param.parameters !== undefined) {
@@ -54,9 +53,6 @@ function buildBundle(params: Array<LogComplexEventParameter>): android.os.Bundle
5453
for (const p in params) {
5554
const param = params[p];
5655
if (param.value !== undefined) {
57-
console.log("HERE 23");
58-
console.log(param.type);
59-
console.dir(param);
6056
if (param.type === "string") {
6157
bundle.putString(param.key, param.value);
6258
} else if (param.type === "double") {

src/analytics/analytics.ios.ts

Lines changed: 116 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { LogEventOptions, SetScreenNameOptions, SetUserPropertyOptions, LogComplexEventOptions } from "./analytics";
1+
import { LogEventOptions, SetScreenNameOptions, SetUserPropertyOptions, LogComplexEventOptions, LogComplexEventParameter } from "./analytics";
22

33
export function logEvent(options: LogEventOptions): Promise<void> {
44
return new Promise<void>((resolve, reject) => {
@@ -27,14 +27,128 @@ export function logEvent(options: LogEventOptions): Promise<void> {
2727
}
2828
});
2929
}
30+
/*
31+
function getArrayList(array: Array<LogComplexEventOptions>): Array<NSMutableDictionary<string, any>> {
32+
let returnArray: Array<NSMutableDictionary<string, any>> = new Array();
33+
for (const p in array) {
34+
const param = array[p];
35+
if (param.parameters !== undefined) {
36+
let bundle: NSMutableDictionary<string, any> = buildBundle(param.parameters);
37+
returnArray.push(bundle);
38+
} else {
39+
console.log("BE CARREFUL, no parameters into your complex event");
40+
}
41+
}
42+
return returnArray;
43+
}
44+
45+
function buildBundle(params: Array<LogComplexEventParameter>): NSMutableDictionary<string, any> {
46+
const bundle: NSMutableDictionary<string, any> = NSMutableDictionary.new();
47+
for (const p in params) {
48+
const param = params[p];
49+
if (param.value !== undefined) {
50+
let nsString = NSMutableString.new();
51+
nsString.setString(param.key);
52+
if (param.type === "string" || param.type === "double" || param.type === "float" || param.type === "int" || param.type === "long" || param.type === "boolean") {
53+
bundle.setObjectForKey(param.value, param.key);
54+
}
55+
else if (param.type === "array") {
56+
let arrayList = getArrayList(param.value);
57+
bundle.setObjectForKey(arrayList, param.key);
58+
}
59+
// bundle.putString(param.key, param.value);
60+
}
61+
}
62+
return bundle;
63+
}*/
3064

65+
/*export function logComplexEvent(options: LogComplexEventOptions): Promise<void> {
66+
return new Promise<void>((resolve, reject) => {
67+
try {
68+
const dic: any = NSMutableDictionary.new();
69+
if (options.parameters !== undefined) {
70+
for (let p in options.parameters) {
71+
const param = options.parameters[p];
72+
if (param.value !== undefined) {
73+
let dic1: NSMutableDictionary<string, any> = buildBundle(options.parameters);
74+
dic.setObjectForKey(dic1, param.key);
75+
}
76+
}
77+
}
78+
FIRAnalytics.logEventWithNameParameters(options.key, dic);
79+
resolve();
80+
}
81+
catch (ex) {
82+
console.log("Error in firebase.analytics.logEvent: " + ex);
83+
reject(ex);
84+
}
85+
});
86+
}*/
3187

88+
/*
3289
export function logComplexEvent(options: LogComplexEventOptions): Promise<void> {
3390
return new Promise<void>((resolve, reject) => {
34-
console.log("TO DO");
91+
try {
92+
const dic: any = NSMutableDictionary.new();
93+
if (options.parameters !== undefined) {
94+
for (let p in options.parameters) {
95+
const param = options.parameters[p];
96+
if (param.value !== undefined) {
97+
const dic1: any = NSMutableDictionary.new();
98+
dic1.setObjectForKey("value56", "testval");
99+
dic.setObjectForKey(new Array(dic1), param.key);
100+
}
101+
}
102+
}
103+
FIRAnalytics.logEventWithNameParameters(options.key, dic);
104+
resolve();
105+
}
106+
catch (ex) {
107+
console.log("Error in firebase.analytics.logEvent: " + ex);
108+
reject(ex);
109+
}
35110
});
111+
}*/
112+
113+
114+
export function logComplexEvent(options: LogComplexEventOptions): Promise<void> {
115+
return new Promise<void>((resolve, reject) => {
116+
try {
117+
const dic: any = NSMutableDictionary.new();
118+
if (options.parameters !== undefined) {
119+
for (let p in options.parameters) {
120+
const param = options.parameters[p];
121+
if (param.type === "array" && param.value !== undefined ) {
122+
const listArray = new Array();
123+
for (let val in param.value) {
124+
const value = param.value[val];
125+
if (value.parameters !== undefined) {
126+
const dicTemp: any = NSMutableDictionary.new();
127+
for (let i in value.parameters) {
128+
const item = value.parameters[i];
129+
if (item.type !== "array" && item.value !== undefined && item.key !== undefined ) {
130+
dicTemp.setObjectForKey(item.value, item.key);
131+
}
132+
}
133+
listArray.push(dicTemp);
134+
}
135+
}
136+
dic.setObjectForKey(listArray, param.key);
137+
} else if (param.type === "string" || param.type === "double" || param.type === "float" || param.type === "int" || param.type === "long" || param.type === "boolean") {
138+
dic.setObjectForKey(param.value, param.key);
139+
}
140+
}
141+
}
142+
FIRAnalytics.logEventWithNameParameters(options.key, dic);
143+
resolve();
144+
} catch (ex) {
145+
console.log("Error in firebase.analytics.logEvent: " + ex);
146+
reject(ex);
147+
}
148+
});
36149
}
37150

151+
38152
export function setUserId(arg): Promise<void> {
39153
return new Promise<void>((resolve, reject) => {
40154
try {

0 commit comments

Comments
 (0)