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

Commit f111643

Browse files
Not able to add screen logs in Firebase Analytics on android device after upgrading to version from 9.1.1 to 10.0.0 #1415
1 parent 307be67 commit f111643

File tree

3 files changed

+129
-52
lines changed

3 files changed

+129
-52
lines changed

src/analytics/analytics-common.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { LogEventParameter } from "./analytics";
22

3+
export const ENABLE_ANALYTICS_HINT = "Add 'analytics: true' to firebase.nativescript.json and remove the platforms folder";
4+
35
export function validateAnalyticsKey(key: string): string | undefined {
46
if (key === undefined || key === null) {
57
return "Argument 'key' is missing";

src/analytics/analytics.android.ts

Lines changed: 84 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
import * as appModule from "tns-core-modules/application";
22
import { LogComplexEventOptions, LogComplexEventParameter, LogEventOptions, SetScreenNameOptions, SetUserPropertyOptions } from "./analytics";
3-
import { validateAnalyticsKey, validateAnalyticsParam } from "./analytics-common";
3+
import { ENABLE_ANALYTICS_HINT, validateAnalyticsKey, validateAnalyticsParam } from "./analytics-common";
44

55
declare const com: any;
66

77
export function logEvent(options: LogEventOptions): Promise<void> {
88
return new Promise<void>((resolve, reject) => {
9+
if (!isAnalyticsAvailable()) {
10+
reject(ENABLE_ANALYTICS_HINT);
11+
return;
12+
}
13+
914
try {
1015
const validationError = validateAnalyticsKey(options.key);
1116
if (validationError !== undefined) {
@@ -41,48 +46,13 @@ export function logEvent(options: LogEventOptions): Promise<void> {
4146
});
4247
}
4348

44-
function getArrayList(array: Array<LogComplexEventOptions>): java.util.ArrayList<android.os.Bundle> {
45-
let returnArray = new java.util.ArrayList<android.os.Bundle>();
46-
for (const p in array) {
47-
const param = array[p];
48-
if (param.parameters !== undefined) {
49-
let bundle: android.os.Bundle = buildBundle(param.parameters);
50-
returnArray.add(bundle);
51-
} else {
52-
console.log("BE CARREFUL, no parameters into your complex event");
53-
}
54-
}
55-
return returnArray;
56-
}
57-
58-
function buildBundle(params: Array<LogComplexEventParameter>): android.os.Bundle {
59-
const bundle = new android.os.Bundle();
60-
for (const p in params) {
61-
const param = params[p];
62-
if (param.value !== undefined) {
63-
if (param.type === "string") {
64-
bundle.putString(param.key, param.value);
65-
} else if (param.type === "double") {
66-
bundle.putDouble(param.key, param.value);
67-
} else if (param.type === "float") {
68-
bundle.putFloat(param.key, param.value);
69-
} else if (param.type === "int") {
70-
bundle.putInt(param.key, param.value);
71-
} else if (param.type === "long") {
72-
bundle.putLong(param.key, param.value);
73-
} else if (param.type === "boolean") {
74-
bundle.putBoolean(param.key, param.value);
75-
} else if (param.type === "array") {
76-
bundle.putParcelableArrayList(param.key, getArrayList(param.value));
77-
}
78-
// bundle.putString(param.key, param.value);
79-
}
80-
}
81-
return bundle;
82-
}
83-
8449
export function logComplexEvent(options: LogComplexEventOptions): Promise<void> {
8550
return new Promise<void>((resolve, reject) => {
51+
if (!isAnalyticsAvailable()) {
52+
reject(ENABLE_ANALYTICS_HINT);
53+
return;
54+
}
55+
8656
try {
8757
if (options.key === undefined) {
8858
reject("Argument 'key' is missing");
@@ -108,6 +78,11 @@ export function logComplexEvent(options: LogComplexEventOptions): Promise<void>
10878

10979
export function setUserId(arg): Promise<void> {
11080
return new Promise<void>((resolve, reject) => {
81+
if (!isAnalyticsAvailable()) {
82+
reject(ENABLE_ANALYTICS_HINT);
83+
return;
84+
}
85+
11186
try {
11287
if (arg.userId === undefined) {
11388
reject("Argument 'userId' is missing");
@@ -127,6 +102,11 @@ export function setUserId(arg): Promise<void> {
127102

128103
export function setUserProperty(options: SetUserPropertyOptions): Promise<void> {
129104
return new Promise<void>((resolve, reject) => {
105+
if (!isAnalyticsAvailable()) {
106+
reject(ENABLE_ANALYTICS_HINT);
107+
return;
108+
}
109+
130110
try {
131111
if (options.key === undefined) {
132112
reject("Argument 'key' is missing");
@@ -151,6 +131,11 @@ export function setUserProperty(options: SetUserPropertyOptions): Promise<void>
151131

152132
export function setScreenName(options: SetScreenNameOptions): Promise<void> {
153133
return new Promise<void>((resolve, reject) => {
134+
if (!isAnalyticsAvailable()) {
135+
reject(ENABLE_ANALYTICS_HINT);
136+
return;
137+
}
138+
154139
try {
155140
if (options.screenName === undefined) {
156141
reject("Argument 'screenName' is missing");
@@ -170,13 +155,65 @@ export function setScreenName(options: SetScreenNameOptions): Promise<void> {
170155
}
171156

172157
export function setAnalyticsCollectionEnabled(enabled: boolean): void {
173-
com.google.firebase.analytics.FirebaseAnalytics.getInstance(
174-
appModule.android.context || com.tns.NativeScriptApplication.getInstance()
175-
).setAnalyticsCollectionEnabled(enabled);
158+
if (isAnalyticsAvailable()) {
159+
com.google.firebase.analytics.FirebaseAnalytics.getInstance(
160+
appModule.android.context || com.tns.NativeScriptApplication.getInstance()
161+
).setAnalyticsCollectionEnabled(enabled);
162+
}
176163
}
177164

178165
export function setSessionTimeoutDuration(seconds: number): void {
179-
com.google.firebase.analytics.FirebaseAnalytics.getInstance(
180-
appModule.android.context || com.tns.NativeScriptApplication.getInstance()
181-
).setSessionTimeoutDuration(seconds * 1000); // Android expects ms
166+
if (isAnalyticsAvailable()) {
167+
com.google.firebase.analytics.FirebaseAnalytics.getInstance(
168+
appModule.android.context || com.tns.NativeScriptApplication.getInstance()
169+
).setSessionTimeoutDuration(seconds * 1000); // Android expects ms
170+
}
171+
}
172+
173+
function getArrayList(array: Array<LogComplexEventOptions>): java.util.ArrayList<android.os.Bundle> {
174+
let returnArray = new java.util.ArrayList<android.os.Bundle>();
175+
for (const p in array) {
176+
const param = array[p];
177+
if (param.parameters !== undefined) {
178+
let bundle: android.os.Bundle = buildBundle(param.parameters);
179+
returnArray.add(bundle);
180+
} else {
181+
console.log("BE CARREFUL, no parameters into your complex event");
182+
}
183+
}
184+
return returnArray;
185+
}
186+
187+
function buildBundle(params: Array<LogComplexEventParameter>): android.os.Bundle {
188+
const bundle = new android.os.Bundle();
189+
for (const p in params) {
190+
const param = params[p];
191+
if (param.value !== undefined) {
192+
if (param.type === "string") {
193+
bundle.putString(param.key, param.value);
194+
} else if (param.type === "double") {
195+
bundle.putDouble(param.key, param.value);
196+
} else if (param.type === "float") {
197+
bundle.putFloat(param.key, param.value);
198+
} else if (param.type === "int") {
199+
bundle.putInt(param.key, param.value);
200+
} else if (param.type === "long") {
201+
bundle.putLong(param.key, param.value);
202+
} else if (param.type === "boolean") {
203+
bundle.putBoolean(param.key, param.value);
204+
} else if (param.type === "array") {
205+
bundle.putParcelableArrayList(param.key, getArrayList(param.value));
206+
}
207+
// bundle.putString(param.key, param.value);
208+
}
209+
}
210+
return bundle;
211+
}
212+
213+
function isAnalyticsAvailable(): boolean {
214+
if (typeof (com.google.firebase.analytics) === "undefined" || typeof (com.google.firebase.analytics.FirebaseAnalytics) === "undefined") {
215+
console.log(ENABLE_ANALYTICS_HINT);
216+
return false;
217+
}
218+
return true;
182219
}

src/analytics/analytics.ios.ts

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
import { LogComplexEventOptions, LogEventOptions, SetScreenNameOptions, SetUserPropertyOptions } from "./analytics";
2-
import { validateAnalyticsKey, validateAnalyticsParam } from "./analytics-common";
2+
import { ENABLE_ANALYTICS_HINT, validateAnalyticsKey, validateAnalyticsParam } from "./analytics-common";
33

44
export function logEvent(options: LogEventOptions): Promise<void> {
55
return new Promise<void>((resolve, reject) => {
6+
if (!isAnalyticsAvailable()) {
7+
reject(ENABLE_ANALYTICS_HINT);
8+
return;
9+
}
10+
611
try {
712
const validationError = validateAnalyticsKey(options.key);
813
if (validationError !== undefined) {
@@ -122,6 +127,11 @@ export function logComplexEvent(options: LogComplexEventOptions): Promise<void>
122127

123128
export function logComplexEvent(options: LogComplexEventOptions): Promise<void> {
124129
return new Promise<void>((resolve, reject) => {
130+
if (!isAnalyticsAvailable()) {
131+
reject(ENABLE_ANALYTICS_HINT);
132+
return;
133+
}
134+
125135
try {
126136
const dic: any = NSMutableDictionary.new();
127137
if (options.parameters !== undefined) {
@@ -157,9 +167,13 @@ export function logComplexEvent(options: LogComplexEventOptions): Promise<void>
157167
});
158168
}
159169

160-
161170
export function setUserId(arg): Promise<void> {
162171
return new Promise<void>((resolve, reject) => {
172+
if (!isAnalyticsAvailable()) {
173+
reject(ENABLE_ANALYTICS_HINT);
174+
return;
175+
}
176+
163177
try {
164178
if (arg.userId === undefined) {
165179
reject("Argument 'userId' is missing");
@@ -178,6 +192,11 @@ export function setUserId(arg): Promise<void> {
178192

179193
export function setUserProperty(options: SetUserPropertyOptions): Promise<void> {
180194
return new Promise<void>((resolve, reject) => {
195+
if (!isAnalyticsAvailable()) {
196+
reject(ENABLE_ANALYTICS_HINT);
197+
return;
198+
}
199+
181200
try {
182201
if (options.key === undefined) {
183202
reject("Argument 'key' is missing");
@@ -200,6 +219,11 @@ export function setUserProperty(options: SetUserPropertyOptions): Promise<void>
200219

201220
export function setScreenName(options: SetScreenNameOptions): Promise<void> {
202221
return new Promise<void>((resolve, reject) => {
222+
if (!isAnalyticsAvailable()) {
223+
reject(ENABLE_ANALYTICS_HINT);
224+
return;
225+
}
226+
203227
try {
204228
if (options.screenName === undefined) {
205229
reject("Argument 'screenName' is missing");
@@ -217,13 +241,27 @@ export function setScreenName(options: SetScreenNameOptions): Promise<void> {
217241
}
218242

219243
export function setAnalyticsCollectionEnabled(enabled: boolean): void {
220-
FIRAnalytics.setAnalyticsCollectionEnabled(enabled);
244+
if (isAnalyticsAvailable()) {
245+
FIRAnalytics.setAnalyticsCollectionEnabled(enabled);
246+
}
221247
}
222248

223249
export function setSessionTimeoutDuration(seconds: number): void {
224-
FIRAnalytics.setSessionTimeoutInterval(seconds);
250+
if (isAnalyticsAvailable()) {
251+
FIRAnalytics.setSessionTimeoutInterval(seconds);
252+
}
225253
}
226254

227255
export function iOSHandleOpenURL(url: any /* NSURL */): void {
228-
FIRAnalytics.handleOpenURL(url);
256+
if (isAnalyticsAvailable()) {
257+
FIRAnalytics.handleOpenURL(url);
258+
}
229259
}
260+
261+
function isAnalyticsAvailable(): boolean {
262+
if (typeof (FIRAnalytics) === "undefined") {
263+
console.log(ENABLE_ANALYTICS_HINT);
264+
return false;
265+
}
266+
return true;
267+
}

0 commit comments

Comments
 (0)