Skip to content

Commit d5e19c9

Browse files
triniwizNathanWalker
authored andcommitted
updates
1 parent 25f4873 commit d5e19c9

File tree

73 files changed

+21266
-143
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+21266
-143
lines changed
Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,43 @@
11
import { Observable, EventData, Page } from '@nativescript/core';
22
import { DemoSharedFirebaseAnalytics } from '@demo/shared';
33
import { Firebase } from '@nativescript/firebase-core';
4+
import '@nativescript/firebase-analytics';
45
import { Analytics } from '@nativescript/firebase-analytics';
5-
import { Auth } from '@nativescript/firebase-auth';
66
export function navigatingTo(args: EventData) {
77
const page = <Page>args.object;
88
page.bindingContext = new DemoModel();
99
}
1010

1111
export class DemoModel extends DemoSharedFirebaseAnalytics {
1212
logCartEvent() {
13-
Firebase.analytics().logEvent('add_to_cart', {
13+
const analytics: Analytics = Firebase.analytics();
14+
analytics.logEvent('add_to_cart', {
1415
items: [
1516
{
16-
brand: 'ITEM_BRAND_1',
17-
category: 'IMTEM_CATEGORY_1',
18-
name: 'ITEM_NAME_!',
19-
price: 300,
17+
item_brand: 'ITEM_BRAND_1',
18+
item_category: 'IMTEM_CATEGORY_1',
19+
item_name: 'ITEM_NAME_1',
20+
item_price: 300,
2021
},
2122
{
22-
brand: 'ITEM_BRAND_2',
23-
category: 'IMTEM_CATEGORY_2',
24-
name: 'ITEM_NAME_2',
25-
price: 400,
23+
item_brand: 'ITEM_BRAND_2',
24+
item_category: 'IMTEM_CATEGORY_2',
25+
item_name: 'ITEM_NAME_2',
26+
item_price: 400,
2627
},
2728
{
28-
brand: 'ITEM_BRAND_3',
29-
category: 'IMTEM_CATEGORY_3',
30-
name: 'ITEM_NAME',
31-
price: 500,
29+
item_brand: 'ITEM_BRAND_3',
30+
item_category: 'ITEM_CATEGORY_3',
31+
item_name: 'ITEM_NAME',
32+
item_price: 500,
3233
},
3334
{
34-
brand: 'ITEM_BRAND_4',
35-
category: 'IMTEM_CATEGORY_4',
36-
name: 'ITEM_NAME_4',
37-
price: 600,
35+
item_brand: 'ITEM_BRAND_4',
36+
item_category: 'ITEM_CATEGORY_4',
37+
item_name: 'ITEM_NAME_4',
38+
item_price: 600,
3839
},
39-
],
40+
]
4041
});
4142
}
4243
}
Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,61 @@
1-
import { Observable, EventData, Page } from '@nativescript/core';
1+
import { Observable, EventData, Page, fromObject } from '@nativescript/core';
22
import { DemoSharedFirebaseAuth } from '@demo/shared';
3-
import { } from '@nativescript/firebase-auth';
4-
3+
import { Firebase } from '@nativescript/firebase-core';
4+
import '@nativescript/firebase-auth';
5+
import { Auth, User } from '@nativescript/firebase-auth';
56
export function navigatingTo(args: EventData) {
67
const page = <Page>args.object;
78
page.bindingContext = new DemoModel();
89
}
910

1011
export class DemoModel extends DemoSharedFirebaseAuth {
11-
12+
email: string;
13+
password: string;
14+
user: User;
15+
constructor(){
16+
super();
17+
Firebase.auth().addAuthStateChangeListener((user)=>{
18+
this._setCurrentUser(user);
19+
});
20+
}
21+
createUser() {
22+
const auth: Auth = Firebase.auth();
23+
auth.createUserWithEmailAndPassword(this.email, this.password).then((user) => {
24+
this.set('user', user);
25+
}).catch(e =>{
26+
console.error('createUser', e);
27+
});
28+
}
29+
30+
loginUser() {
31+
const auth: Auth = Firebase.auth();
32+
auth
33+
.signInWithEmailAndPassword(this.email, this.password)
34+
.then((value) => {
35+
console.log('loginUser', value);
36+
this._setCurrentUser(value.user);
37+
})
38+
.catch((e) => {
39+
console.error('loginUser', e);
40+
});
41+
}
42+
43+
_setCurrentUser(user: User){
44+
this.set('user', user);
45+
this.set('uid', user?.uid);
46+
this.set('displayName', user?.displayName);
47+
this.set('displayEmail', user?.email);
48+
this.set('photoURL', user?.photoURL);
49+
}
50+
51+
getCurrentUser(){
52+
const auth: Auth = Firebase.auth();
53+
this._setCurrentUser(auth?.user)
54+
}
55+
56+
logOutUser(){
57+
const auth: Auth = Firebase.auth();
58+
auth.signOut();
59+
this._setCurrentUser(undefined);
60+
}
1261
}

apps/demo/src/plugin-demos/firebase-auth.xml

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,19 @@
66
<StackLayout class="p-20">
77
<ScrollView class="h-full">
88
<StackLayout>
9-
<Button text="Test firebase-auth" tap="{{ testIt }}" class="btn btn-primary"/>
10-
9+
<TextField hint="Enter email" text="{{ email }}" keyboardType="email" autocapitalizationType="none"/>
10+
<TextField hint="Enter password" text="{{ password }}" secure="true"/>
11+
<Button text="Create User" tap="{{ createUser }}" class="btn btn-primary"/>
12+
<Button text="Login User" tap="{{ loginUser }}" class="btn btn-primary"/>
13+
<Button text="Get Current User" tap="{{ getCurrentUser }}" class="btn btn-primary"/>
14+
<Button text="Logout User" tap="{{ logOutUser }}" class="btn btn-primary"/>
15+
<StackLayout>
16+
<Label text="Current User"/>
17+
<Label text="{{ uid }}"/>
18+
<Label text="{{ displayName }}"/>
19+
<Label text="{{ displayEmail }}"/>
20+
<Image src="{{ photoURL }}"/>
21+
</StackLayout>
1122
</StackLayout>
1223
</ScrollView>
1324
</StackLayout>
Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,27 @@
11
export interface IAnalytics {
22
readonly appInstanceId: string;
3-
logEvent(name: string, parameters: any): void;
3+
logEvent(name: string, parameters: EventParameter): void;
44
setUserId(userId: string): void;
55
resetAnalyticsData(): void;
66
setAnalyticsCollectionEnabled(analyticsCollectionEnabled: boolean): void;
77
setUserProperty(value: string, name: string): void;
88
setSessionTimeoutInterval(sessionTimeoutInterval: number): void;
9-
setDefaultEventParameters(parameters: any): void;
10-
setConsent(consentSettings: any): void;
9+
setDefaultEventParameters(parameters: EventParameter): void;
10+
setConsent(consentSettings: Map<ConsentType, ConsentStatus>): void;
1111
handleOpenURL(url: string): void;
1212
handleUserActivity(userActivity: any): void;
1313
}
14+
15+
export interface EventParameter {
16+
[key: string]: any;
17+
}
18+
19+
export enum ConsentType {
20+
Ad_Storage,
21+
Analytics_Storage,
22+
}
23+
24+
export enum ConsentStatus {
25+
Denied,
26+
Granted,
27+
}
Lines changed: 144 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,156 @@
1-
import { IAnalytics } from './common';
1+
import { Utils } from '@nativescript/core';
2+
import { Firebase } from '@nativescript/firebase-core';
3+
import { ConsentStatus, ConsentType, EventParameter, IAnalytics } from './common';
4+
export * from './common';
5+
6+
Firebase.analytics = () => {
7+
return new Analytics();
8+
};
9+
10+
function serialize(data) {
11+
let store;
12+
13+
switch (typeof data) {
14+
case 'string':
15+
case 'boolean':
16+
case 'number': {
17+
return data;
18+
}
19+
20+
case 'object': {
21+
if (data === null) {
22+
return null;
23+
}
24+
25+
if (data instanceof Date) {
26+
return data.toJSON();
27+
}
28+
if (Array.isArray(data)) {
29+
store = new java.util.ArrayList();
30+
data.forEach((item, index) => {
31+
const bundle = new android.os.Bundle();
32+
const value = serialize(item);
33+
switch (typeof value) {
34+
case 'boolean':
35+
bundle.putBoolean(String(index), value);
36+
break;
37+
case 'number':
38+
bundle.putInt(String(index), value);
39+
break;
40+
case 'string':
41+
bundle.putString(String(index), value);
42+
break;
43+
case 'object':
44+
if (value instanceof android.os.Bundle) {
45+
bundle.putBundle(String(index), value);
46+
} else if (value instanceof java.util.ArrayList) {
47+
bundle.putParcelableArrayList(String(index), value);
48+
} else {
49+
bundle.putString(String(index), null);
50+
}
51+
52+
break;
53+
}
54+
store.add(bundle);
55+
});
56+
return store;
57+
}
58+
59+
store = new android.os.Bundle();
60+
Object.keys(data).forEach((key) => {
61+
const value = serialize(data[key]);
62+
switch (typeof value) {
63+
case 'boolean':
64+
store.putBoolean(key, value);
65+
break;
66+
case 'number':
67+
store.putInt(key, value);
68+
break;
69+
case 'string':
70+
store.putString(key, value);
71+
break;
72+
case 'object':
73+
if (value instanceof android.os.Bundle) {
74+
store.putBundle(key, value);
75+
} else if (value instanceof java.util.ArrayList) {
76+
store.putParcelableArrayList(key, value);
77+
} else {
78+
store.putString(key, null);
79+
}
80+
81+
break;
82+
}
83+
});
84+
return store;
85+
}
86+
87+
default:
88+
return null;
89+
}
90+
}
91+
292
export class Analytics implements IAnalytics {
3-
constructor() {}
4-
setUserProperty(value: string, name: string): void {
5-
throw new Error('Method not implemented.');
93+
#native: com.google.firebase.analytics.FirebaseAnalytics;
94+
95+
constructor() {
96+
this.#native = com.google.firebase.analytics.FirebaseAnalytics.getInstance(Utils.android.getApplicationContext());
697
}
7-
setSessionTimeoutInterval(sessionTimeoutInterval: number): void {
8-
throw new Error('Method not implemented.');
98+
handleOpenURL(url: string): void {}
99+
100+
handleUserActivity(userActivity: any): void {}
101+
102+
get appInstanceId(): string {
103+
return this.#native.getAppInstanceId();
9104
}
10-
setDefaultEventParameters(parameters: any): void {
11-
throw new Error('Method not implemented.');
105+
setSessionTimeoutInterval(sessionTimeoutInterval: number): void {
106+
this.#native.setSessionTimeoutDuration(sessionTimeoutInterval);
12107
}
13-
setConsent(consentSettings: any): void {
14-
throw new Error('Method not implemented.');
108+
setUserProperty(key: string, value: string): void {
109+
this.#native.setUserProperty(key, value);
15110
}
16-
handleOpenURL(url: string): void {
17-
throw new Error('Method not implemented.');
111+
setAnalyticsCollectionEnabled(analyticsCollectionEnabled: boolean): void {
112+
this.#native.setAnalyticsCollectionEnabled(analyticsCollectionEnabled);
18113
}
19-
handleUserActivity(userActivity: any): void {
20-
throw new Error('Method not implemented.');
114+
setUserId(userId: string): void {
115+
this.#native.setUserId(userId);
21116
}
22-
get appInstanceId(): string {
23-
return '';
117+
logEvent(name: string, parameters: EventParameter): void {
118+
this.#native.logEvent(name, serialize(parameters));
24119
}
25-
setAnalyticsCollectionEnabled(analyticsCollectionEnabled: boolean): void {
26-
throw new Error('Method not implemented.');
120+
resetAnalyticsData(): void {
121+
this.#native.resetAnalyticsData();
27122
}
28-
logEvent(name: string): void {
29-
throw new Error('Method not implemented.');
123+
124+
setDefaultEventParameters(parameters: EventParameter): void {
125+
this.#native.setDefaultEventParameters(serialize(parameters));
30126
}
31-
setUserId(userId: string): void {
32-
throw new Error('Method not implemented.');
127+
128+
setConsent(consentSettings: Map<ConsentType, ConsentStatus>): void {
129+
const nativeMap = new java.util.HashMap();
130+
consentSettings.forEach((value, key) => {
131+
let nativeKey;
132+
let nativeValue;
133+
switch (key) {
134+
case ConsentType.Ad_Storage:
135+
nativeKey = FIRConsentTypeAdStorage;
136+
break;
137+
case ConsentType.Analytics_Storage:
138+
nativeKey = FIRConsentTypeAnalyticsStorage;
139+
break;
140+
}
141+
142+
switch (value) {
143+
case ConsentStatus.Denied:
144+
nativeValue = FIRConsentStatusDenied;
145+
break;
146+
case ConsentStatus.Granted:
147+
nativeValue = FIRConsentStatusGranted;
148+
break;
149+
}
150+
if (nativeKey && nativeValue) {
151+
nativeMap.put(nativeKey, nativeValue);
152+
}
153+
});
154+
this.#native.setConsent(nativeMap);
33155
}
34-
resetAnalyticsData(): void {}
35156
}
Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
1-
import { IAnalytics } from './common';
1+
import { IAnalytics, EventParameter } from './common';
22
export * from './common';
3+
34
export declare class Analytics implements IAnalytics {
45
readonly appInstanceId: string;
5-
logEvent(name: string, parameters: any): void;
6+
logEvent(name: string, parameters: EventParameter): void;
67
setUserId(userId: string): void;
78
resetAnalyticsData(): void;
89
setAnalyticsCollectionEnabled(analyticsCollectionEnabled: boolean): void;
910
setUserProperty(value: string, name: string): void;
1011
setSessionTimeoutInterval(sessionTimeoutInterval: number): void;
11-
setDefaultEventParameters(parameters: any): void;
12-
setConsent(consentSettings: any): void;
12+
setDefaultEventParameters(parameters: EventParameter): void;
13+
setConsent(consentSettings: Map<ConsentType, ConsentStatus>): void;
1314
handleOpenURL(url: string): void;
1415
handleUserActivity(userActivity: any): void;
1516
}
1617

1718
declare module '@nativescript/firebase-core' {
18-
class Firebase {
19+
interface Firebase {
1920
static analytics(): Analytics;
2021
}
2122
}

0 commit comments

Comments
 (0)