Skip to content

Commit 627b545

Browse files
committed
implemented all firebase analytics module methods - android only
1 parent e5c3ea6 commit 627b545

File tree

2 files changed

+104
-60
lines changed

2 files changed

+104
-60
lines changed

android/src/main/java/io/fullstack/firestack/FirestackAnalytics.java

Lines changed: 51 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package io.fullstack.firestack;
22

33
import java.util.Map;
4+
5+
import android.app.Activity;
46
import android.util.Log;
57
import android.os.Bundle;
6-
import java.util.Iterator;
7-
import android.content.Context;
88

99
import com.facebook.react.bridge.Callback;
1010
import com.facebook.react.bridge.ReactMethod;
1111
import com.facebook.react.bridge.ReadableMap;
12-
import com.facebook.react.bridge.ReactContext;
1312
import com.facebook.react.bridge.ReactApplicationContext;
1413
import com.facebook.react.bridge.ReactContextBaseJavaModule;
1514

@@ -19,13 +18,12 @@ class FirestackAnalyticsModule extends ReactContextBaseJavaModule {
1918

2019
private static final String TAG = "FirestackAnalytics";
2120

22-
private Context context;
21+
private ReactApplicationContext context;
2322
private FirebaseAnalytics mFirebaseAnalytics;
2423

2524
public FirestackAnalyticsModule(ReactApplicationContext reactContext) {
2625
super(reactContext);
27-
this.context = reactContext;
28-
26+
context = reactContext;
2927
Log.d(TAG, "New instance");
3028
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this.context);
3129
}
@@ -36,42 +34,56 @@ public String getName() {
3634
}
3735

3836
@ReactMethod
39-
public void logEventWithName(final String name, final ReadableMap props, final Callback callback) {
40-
// TODO
41-
// FirestackUtils.todoNote(TAG, "logEventWithName", callback);
42-
Map<String, Object> m = FirestackUtils.recursivelyDeconstructReadableMap(props);
43-
final String eventName = getEventName(name);
37+
public void logEvent(final String name, final ReadableMap params) {
38+
Map<String, Object> m = FirestackUtils.recursivelyDeconstructReadableMap(params);
4439
final Bundle bundle = makeEventBundle(name, m);
45-
Log.d(TAG, "Logging event " + eventName);
40+
Log.d(TAG, "Logging event " + name);
4641
mFirebaseAnalytics.logEvent(name, bundle);
4742
}
4843

49-
private String getEventName(final String name) {
50-
if (name == FirebaseAnalytics.Event.ADD_PAYMENT_INFO) {return FirebaseAnalytics.Event.ADD_PAYMENT_INFO; }
51-
else if (name == FirebaseAnalytics.Event.ADD_TO_CART) {return FirebaseAnalytics.Event.ADD_TO_CART;}
52-
else if (name == FirebaseAnalytics.Event.ADD_TO_WISHLIST) {return FirebaseAnalytics.Event.ADD_TO_WISHLIST;}
53-
else if (name == FirebaseAnalytics.Event.APP_OPEN) {return FirebaseAnalytics.Event.APP_OPEN;}
54-
else if (name == FirebaseAnalytics.Event.BEGIN_CHECKOUT) {return FirebaseAnalytics.Event.BEGIN_CHECKOUT;}
55-
else if (name == FirebaseAnalytics.Event.ECOMMERCE_PURCHASE) {return FirebaseAnalytics.Event.ECOMMERCE_PURCHASE;}
56-
else if (name == FirebaseAnalytics.Event.GENERATE_LEAD) {return FirebaseAnalytics.Event.GENERATE_LEAD;}
57-
else if (name == FirebaseAnalytics.Event.JOIN_GROUP) {return FirebaseAnalytics.Event.JOIN_GROUP;}
58-
else if (name == FirebaseAnalytics.Event.LEVEL_UP) {return FirebaseAnalytics.Event.LEVEL_UP;}
59-
else if (name == FirebaseAnalytics.Event.LOGIN) {return FirebaseAnalytics.Event.LOGIN;}
60-
else if (name == FirebaseAnalytics.Event.POST_SCORE) {return FirebaseAnalytics.Event.POST_SCORE;}
61-
else if (name == FirebaseAnalytics.Event.PRESENT_OFFER) {return FirebaseAnalytics.Event.PRESENT_OFFER;}
62-
else if (name == FirebaseAnalytics.Event.PURCHASE_REFUND) {return FirebaseAnalytics.Event.PURCHASE_REFUND;}
63-
else if (name == FirebaseAnalytics.Event.SEARCH) {return FirebaseAnalytics.Event.SEARCH;}
64-
else if (name == FirebaseAnalytics.Event.SELECT_CONTENT) {return FirebaseAnalytics.Event.SELECT_CONTENT;}
65-
else if (name == FirebaseAnalytics.Event.SHARE) {return FirebaseAnalytics.Event.SHARE;}
66-
else if (name == FirebaseAnalytics.Event.SIGN_UP) {return FirebaseAnalytics.Event.SIGN_UP;}
67-
else if (name == FirebaseAnalytics.Event.SPEND_VIRTUAL_CURRENCY) {return FirebaseAnalytics.Event.SPEND_VIRTUAL_CURRENCY;}
68-
else if (name == FirebaseAnalytics.Event.TUTORIAL_BEGIN) {return FirebaseAnalytics.Event.TUTORIAL_BEGIN;}
69-
else if (name == FirebaseAnalytics.Event.TUTORIAL_COMPLETE) {return FirebaseAnalytics.Event.TUTORIAL_COMPLETE;}
70-
else if (name == FirebaseAnalytics.Event.UNLOCK_ACHIEVEMENT) {return FirebaseAnalytics.Event.UNLOCK_ACHIEVEMENT;}
71-
else if (name == FirebaseAnalytics.Event.VIEW_ITEM) {return FirebaseAnalytics.Event.VIEW_ITEM;}
72-
else if (name == FirebaseAnalytics.Event.VIEW_ITEM_LIST) {return FirebaseAnalytics.Event.VIEW_ITEM_LIST;}
73-
else if (name == FirebaseAnalytics.Event.VIEW_SEARCH_RESULTS) {return FirebaseAnalytics.Event.VIEW_SEARCH_RESULTS;}
74-
else return name;
44+
/**
45+
*
46+
* @param enabled
47+
*/
48+
@ReactMethod
49+
public void setAnalyticsCollectionEnabled(final Boolean enabled) {
50+
mFirebaseAnalytics.setAnalyticsCollectionEnabled(enabled);
51+
}
52+
53+
@ReactMethod
54+
public void setCurrentScreen(final String screenName, final String screenClassOverride) {
55+
final Activity activity = getCurrentActivity();
56+
if (activity != null) {
57+
Log.d(TAG, "setCurrentScreen " + screenName + " " + screenClassOverride);
58+
activity.runOnUiThread(new Runnable() {
59+
@Override
60+
public void run() {
61+
mFirebaseAnalytics.setCurrentScreen(activity, screenName, screenClassOverride);
62+
}
63+
});
64+
65+
}
66+
}
67+
68+
69+
@ReactMethod
70+
public void setMinimumSessionDuration(final double milliseconds) {
71+
mFirebaseAnalytics.setMinimumSessionDuration((long) milliseconds);
72+
}
73+
74+
@ReactMethod
75+
public void setSessionTimeoutDuration(final double milliseconds) {
76+
mFirebaseAnalytics.setSessionTimeoutDuration((long) milliseconds);
77+
}
78+
79+
@ReactMethod
80+
public void setUserId(final String id) {
81+
mFirebaseAnalytics.setUserId(id);
82+
}
83+
84+
@ReactMethod
85+
public void setUserProperty(final String name, final String value) {
86+
mFirebaseAnalytics.setUserProperty(name, value);
7587
}
7688

7789
private Bundle makeEventBundle(final String name, final Map<String, Object> map) {
@@ -207,6 +219,7 @@ private Bundle makeEventBundle(final String name, final Map<String, Object> map)
207219
bundle.putString(entry.getKey(), entry.getValue().toString());
208220
}
209221
}
222+
210223
return bundle;
211224
}
212225
}

lib/modules/analytics.js

Lines changed: 53 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,71 @@
1-
import {NativeModules, NativeAppEventEmitter} from 'react-native';
2-
import promisify from '../utils/promisify'
3-
import { Base } from './base'
1+
// @flow
2+
import { NativeModules } from 'react-native';
3+
import { Base } from './base';
44

55
const FirestackAnalytics = NativeModules.FirestackAnalytics;
66

77
export default class Analytics extends Base {
8-
constructor(firestack, options={}) {
9-
super(firestack, options);
8+
/**
9+
* Logs an app event.
10+
* @param {string} name
11+
* @param params
12+
* @return {Promise}
13+
*/
14+
logEvent(name: string, params: Object = {}): void {
15+
return FirestackAnalytics.logEvent(name, params);
16+
}
1017

11-
this._addToFirestackInstance(
12-
'logEventWithName'
13-
)
18+
/**
19+
* Sets whether analytics collection is enabled for this app on this device.
20+
* @param enabled
21+
*/
22+
setAnalyticsCollectionEnabled(enabled: boolean): void {
23+
return FirestackAnalytics.setAnalyticsCollectionEnabled(enabled);
1424
}
25+
1526
/**
16-
* Log an event
17-
* @param {string} name The name of the event
18-
* @param {object} props An object containing string-keys
19-
* @return {Promise}
27+
* Sets the current screen name, which specifies the current visual context in your app.
28+
* @param screenName
29+
* @param screenClassOverride
30+
*/
31+
setCurrentScreen(screenName: string, screenClassOverride: string): void {
32+
return FirestackAnalytics.setCurrentScreen(screenName, screenClassOverride);
33+
}
34+
35+
/**
36+
* Sets the minimum engagement time required before starting a session. The default value is 10000 (10 seconds).
37+
* @param milliseconds
2038
*/
21-
logEventWithName(name, props) {
22-
return promisify('logEventWithName', FirestackAnalytics)(name, props);
39+
setMinimumSessionDuration(milliseconds: number = 10000): void {
40+
return FirestackAnalytics.setMinimumSessionDuration(milliseconds);
2341
}
2442

25-
enable() {
26-
return promisify('setEnabled', FirestackAnalytics)(true);
43+
/**
44+
* Sets the duration of inactivity that terminates the current session. The default value is 1800000 (30 minutes).
45+
* @param milliseconds
46+
*/
47+
setSessionTimeoutDuration(milliseconds: number = 1800000): void {
48+
return FirestackAnalytics.setSessionTimeoutDuration(milliseconds);
2749
}
2850

29-
disable() {
30-
return promisify('setEnabled', FirestackAnalytics)(false);
51+
/**
52+
* Sets the user ID property.
53+
* @param id
54+
*/
55+
setUserId(id: string): void {
56+
return FirestackAnalytics.setUserId(id);
3157
}
3258

33-
setUser(id, properties={}) {
34-
return promisify('setUserId', FirestackAnalytics)(id, properties);
59+
/**
60+
* Sets a user property to a given value.
61+
* @param name
62+
* @param value
63+
*/
64+
setUserProperty(name: string, value: string): void {
65+
return FirestackAnalytics.setUserProperty(name, value);
3566
}
3667

37-
get namespace() {
38-
return 'firestack:analytics'
68+
get namespace(): string {
69+
return 'firestack:analytics';
3970
}
4071
}

0 commit comments

Comments
 (0)