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

Commit cf53fff

Browse files
Merge pull request #647 from DickSmith/standalone-analytics
Allow standalone Analytics import
2 parents 7ebc97e + 72d21bc commit cf53fff

File tree

9 files changed

+192
-218
lines changed

9 files changed

+192
-218
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ src/**/*.d.ts
1111
!src/firebase.d.ts
1212
!src/index.d.ts
1313
!src/references.d.ts
14+
!src/analytics/index.d.ts
15+
!src/analytics/analytics.d.ts
1416
!src/platforms/web/typings/firebase-webapi.d.ts
1517
!src/platforms/ios/typings/*.d.ts
1618
!src/platforms/android/typings/**/*.d.ts

src/analytics/analytics.android.ts

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import * as appModule from "tns-core-modules/application";
2+
import { LogEventOptions, SetScreenNameOptions, SetUserPropertyOptions } from "./analytics";
3+
4+
declare const com: any;
5+
6+
export function logEvent(options: LogEventOptions): Promise<any> {
7+
return new Promise((resolve, reject) => {
8+
try {
9+
if (options.key === undefined) {
10+
reject("Argument 'key' is missing");
11+
return;
12+
}
13+
14+
const bundle = new android.os.Bundle();
15+
if (options.parameters !== undefined) {
16+
for (const p in options.parameters) {
17+
const param = options.parameters[p];
18+
if (param.value !== undefined) {
19+
bundle.putString(param.key, param.value);
20+
}
21+
}
22+
}
23+
24+
com.google.firebase.analytics.FirebaseAnalytics.getInstance(
25+
appModule.android.currentContext || com.tns.NativeScriptApplication.getInstance()
26+
).logEvent(options.key, bundle);
27+
28+
resolve();
29+
} catch (ex) {
30+
console.log("Error in firebase.analytics.logEvent: " + ex);
31+
reject(ex);
32+
}
33+
});
34+
}
35+
36+
export function setUserProperty(options: SetUserPropertyOptions): Promise<any> {
37+
return new Promise((resolve, reject) => {
38+
try {
39+
if (options.key === undefined) {
40+
reject("Argument 'key' is missing");
41+
return;
42+
}
43+
if (options.value === undefined) {
44+
reject("Argument 'value' is missing");
45+
return;
46+
}
47+
48+
com.google.firebase.analytics.FirebaseAnalytics.getInstance(
49+
appModule.android.currentContext || com.tns.NativeScriptApplication.getInstance()
50+
).setUserProperty(options.key, options.value);
51+
52+
resolve();
53+
} catch (ex) {
54+
console.log("Error in firebase.analytics.setUserProperty: " + ex);
55+
reject(ex);
56+
}
57+
});
58+
}
59+
60+
export function setScreenName(options: SetScreenNameOptions): Promise<any> {
61+
return new Promise((resolve, reject) => {
62+
try {
63+
if (options.screenName === undefined) {
64+
reject("Argument 'screenName' is missing");
65+
return;
66+
}
67+
68+
com.google.firebase.analytics.FirebaseAnalytics.getInstance(
69+
appModule.android.currentContext || com.tns.NativeScriptApplication.getInstance()
70+
).setCurrentScreen(appModule.android.foregroundActivity, options.screenName, null);
71+
72+
resolve();
73+
} catch (ex) {
74+
console.log("Error in firebase.analytics.setScreenName: " + ex);
75+
reject(ex);
76+
}
77+
});
78+
}

src/analytics/analytics.d.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
export interface LogEventParameter {
2+
key: string;
3+
value: string;
4+
}
5+
6+
export interface LogEventOptions {
7+
/**
8+
* The name of the event. You can use any name, but it's recommended to use one of
9+
* the predefined constants. These values are the same for both iOS and Android, so
10+
* for the complete list see https://firebase.google.com/docs/reference/android/com/google/firebase/analytics/FirebaseAnalytics.Event.html
11+
*/
12+
key: string;
13+
/**
14+
* Each (predefined) event has its own set of optional parameters, see
15+
* https://firebase.google.com/docs/reference/android/com/google/firebase/analytics/FirebaseAnalytics.Param
16+
* Example:
17+
*
18+
* parameters: [{
19+
* key: "item_name",
20+
* value: "abc"
21+
* }, ..]
22+
*/
23+
parameters?: Array<LogEventParameter>;
24+
}
25+
26+
export interface SetUserPropertyOptions {
27+
key: string;
28+
value: string;
29+
}
30+
31+
export interface SetScreenNameOptions {
32+
screenName: string;
33+
}
34+
35+
function logEvent(options: LogEventOptions): Promise<any>;
36+
37+
function setUserProperty(options: SetUserPropertyOptions): Promise<any>;
38+
39+
function setScreenName(options: SetScreenNameOptions): Promise<any>;

src/analytics/analytics.ios.ts

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import { LogEventOptions, SetScreenNameOptions, SetUserPropertyOptions } from "./analytics";
2+
3+
export function logEvent(options: LogEventOptions): Promise<any> {
4+
return new Promise((resolve, reject) => {
5+
try {
6+
if (options.key === undefined) {
7+
reject("Argument 'key' is missing");
8+
return;
9+
}
10+
11+
const dic: any = NSMutableDictionary.new();
12+
if (options.parameters !== undefined) {
13+
for (let p in options.parameters) {
14+
const param = options.parameters[p];
15+
if (param.value !== undefined) {
16+
dic.setObjectForKey(param.value, param.key);
17+
}
18+
}
19+
}
20+
21+
FIRAnalytics.logEventWithNameParameters(options.key, dic);
22+
23+
resolve();
24+
} catch (ex) {
25+
console.log("Error in firebase.analytics.logEvent: " + ex);
26+
reject(ex);
27+
}
28+
});
29+
}
30+
31+
export function setUserProperty(options: SetUserPropertyOptions): Promise<any> {
32+
return new Promise((resolve, reject) => {
33+
try {
34+
if (options.key === undefined) {
35+
reject("Argument 'key' is missing");
36+
return;
37+
}
38+
if (options.value === undefined) {
39+
reject("Argument 'value' is missing");
40+
return;
41+
}
42+
43+
FIRAnalytics.setUserPropertyStringForName(options.value, options.key);
44+
45+
resolve();
46+
} catch (ex) {
47+
console.log("Error in firebase.analytics.setUserProperty: " + ex);
48+
reject(ex);
49+
}
50+
});
51+
}
52+
53+
export function setScreenName(options: SetScreenNameOptions): Promise<any> {
54+
return new Promise((resolve, reject) => {
55+
try {
56+
if (options.screenName === undefined) {
57+
reject("Argument 'screenName' is missing");
58+
return;
59+
}
60+
61+
FIRAnalytics.setScreenNameScreenClass(options.screenName, null);
62+
63+
resolve();
64+
} catch (ex) {
65+
console.log("Error in firebase.analytics.setScreenName: " + ex);
66+
reject(ex);
67+
}
68+
});
69+
}

src/analytics/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from "./analytics";

src/firebase-common.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { prompt } from "tns-core-modules/ui/dialogs";
22
import { firestore } from "./firebase";
3+
import * as analytics from "./analytics";
34
import * as applicationSettings from "tns-core-modules/application-settings";
45

56
export const firebase: any = {
@@ -10,7 +11,7 @@ export const firebase: any = {
1011
authStateListeners: [],
1112
_receivedNotificationCallback: null,
1213
_dynamicLinkCallback: null,
13-
analytics: {},
14+
analytics,
1415
firestore: {},
1516
invites: {
1617
MATCH_TYPE: {

src/firebase.android.ts

Lines changed: 0 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -576,92 +576,6 @@ firebase._isGooglePlayServicesAvailable = () => {
576576
return available;
577577
};
578578

579-
firebase.analytics.logEvent = arg => {
580-
return new Promise((resolve, reject) => {
581-
try {
582-
if (arg.key === undefined) {
583-
reject("Argument 'key' is missing");
584-
return;
585-
}
586-
587-
const bundle = new android.os.Bundle();
588-
if (arg.parameters !== undefined) {
589-
for (const p in arg.parameters) {
590-
const param = arg.parameters[p];
591-
if (param.value !== undefined) {
592-
bundle.putString(param.key, param.value);
593-
}
594-
}
595-
}
596-
597-
com.google.firebase.analytics.FirebaseAnalytics.getInstance(appModule.android.currentContext || com.tns.NativeScriptApplication.getInstance()).logEvent(arg.key, bundle);
598-
599-
resolve();
600-
} catch (ex) {
601-
console.log("Error in firebase.analytics.logEvent: " + ex);
602-
reject(ex);
603-
}
604-
});
605-
};
606-
607-
firebase.analytics.setUserId = arg => {
608-
return new Promise((resolve, reject) => {
609-
try {
610-
if (arg.userId === undefined) {
611-
reject("Argument 'userId' is missing");
612-
return;
613-
}
614-
615-
com.google.firebase.analytics.FirebaseAnalytics.getInstance(appModule.android.currentContext || com.tns.NativeScriptApplication.getInstance()).setUserId(arg.userId);
616-
617-
resolve();
618-
} catch (ex) {
619-
console.log("Error in firebase.analytics.setUserId: " + ex);
620-
reject(ex);
621-
}
622-
});
623-
};
624-
625-
firebase.analytics.setUserProperty = arg => {
626-
return new Promise((resolve, reject) => {
627-
try {
628-
if (arg.key === undefined) {
629-
reject("Argument 'key' is missing");
630-
return;
631-
}
632-
if (arg.value === undefined) {
633-
reject("Argument 'value' is missing");
634-
return;
635-
}
636-
637-
com.google.firebase.analytics.FirebaseAnalytics.getInstance(appModule.android.currentContext || com.tns.NativeScriptApplication.getInstance()).setUserProperty(arg.key, arg.value);
638-
639-
resolve();
640-
} catch (ex) {
641-
console.log("Error in firebase.analytics.setUserProperty: " + ex);
642-
reject(ex);
643-
}
644-
});
645-
};
646-
647-
firebase.analytics.setScreenName = arg => {
648-
return new Promise((resolve, reject) => {
649-
try {
650-
if (arg.screenName === undefined) {
651-
reject("Argument 'screenName' is missing");
652-
return;
653-
}
654-
655-
com.google.firebase.analytics.FirebaseAnalytics.getInstance(appModule.android.currentContext || com.tns.NativeScriptApplication.getInstance()).setCurrentScreen(appModule.android.foregroundActivity, arg.screenName, null);
656-
657-
resolve();
658-
} catch (ex) {
659-
console.log("Error in firebase.analytics.setScreenName: " + ex);
660-
reject(ex);
661-
}
662-
});
663-
};
664-
665579
// see https://firebase.google.com/docs/admob/android/quick-start
666580
firebase.admob.showBanner = arg => {
667581
return new Promise((resolve, reject) => {

src/firebase.d.ts

Lines changed: 1 addition & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -696,51 +696,7 @@ export namespace admob {
696696

697697
// Analytics module
698698
export namespace analytics {
699-
export interface LogEventParameter {
700-
key: string;
701-
value: string;
702-
}
703-
704-
export interface LogEventOptions {
705-
/**
706-
* The name of the event. You can use any name, but it's recommended to use one of
707-
* the predefined constants. These values are the same for both iOS and Android, so
708-
* for the complete list see https://firebase.google.com/docs/reference/android/com/google/firebase/analytics/FirebaseAnalytics.Event.html
709-
*/
710-
key: string;
711-
/**
712-
* Each (predefined) event has its own set of optional parameters, see
713-
* https://firebase.google.com/docs/reference/android/com/google/firebase/analytics/FirebaseAnalytics.Param
714-
* Example:
715-
*
716-
* parameters: [{
717-
* key: "item_name",
718-
* value: "abc"
719-
* }, ..]
720-
*/
721-
parameters?: Array<LogEventParameter>;
722-
}
723-
724-
export interface SetUserIdOptions {
725-
userId: string;
726-
}
727-
728-
export interface SetUserPropertyOptions {
729-
key: string;
730-
value: string;
731-
}
732-
733-
export interface SetScreenNameOptions {
734-
screenName: string;
735-
}
736-
737-
function logEvent(options: LogEventOptions): Promise<any>;
738-
739-
function setUserId(options: SetUserIdOptions): Promise<any>;
740-
741-
function setUserProperty(options: SetUserPropertyOptions): Promise<any>;
742-
743-
function setScreenName(options: SetScreenNameOptions): Promise<any>;
699+
export * from './analytics';
744700
}
745701

746702
// Invites module

0 commit comments

Comments
 (0)