|
4 | 4 | import android.app.Activity; |
5 | 5 | import android.content.Context; |
6 | 6 |
|
7 | | -import com.google.firebase.analytics.FirebaseAnalytics; // FirebaseAnalytics class |
| 7 | +import com.google.firebase.analytics.FirebaseAnalytics; |
8 | 8 | import com.segment.analytics.Analytics; |
| 9 | +import com.segment.analytics.Traits; |
9 | 10 | import com.segment.analytics.ValueMap; |
10 | 11 | import com.segment.analytics.integrations.IdentifyPayload; |
11 | 12 | import com.segment.analytics.integrations.Integration; |
12 | 13 | import com.segment.analytics.integrations.Logger; |
13 | 14 | import com.segment.analytics.integrations.ScreenPayload; |
14 | 15 | import com.segment.analytics.integrations.TrackPayload; |
15 | 16 |
|
| 17 | +import java.util.List; |
| 18 | +import java.util.Map; |
| 19 | + |
16 | 20 | import static com.segment.analytics.internal.Utils.hasPermission; |
17 | 21 | import static com.segment.analytics.internal.Utils.isNullOrEmpty; |
18 | | -import static com.segment.analytics.Analytics.LogLevel.VERBOSE; |
19 | 22 |
|
20 | 23 | /** |
21 | | - * Google Analytics for Firebase is a free app measurement solution that provides insight on |
22 | | - * app usage and user engagement. |
| 24 | + * Google Analytics for Firebase is a free app measurement solution that provides insight on app |
| 25 | + * usage and user engagement. |
23 | 26 | * |
24 | 27 | * @see <a href="https://firebase.google.com/docs/analytics/">Google Analytics for Firebase</a> |
25 | 28 | * @see <a href="#">Google Analytics for Firebase Integration</a> |
26 | 29 | * @see <a href="#">Google Analytics for Firebase Android SDK</a> |
27 | 30 | */ |
28 | 31 | public class FirebaseIntegration extends Integration<FirebaseAnalytics> { |
29 | 32 |
|
30 | | - public static FirebaseAnalytics mFirebaseAnalytics; |
31 | | - |
32 | | - public static final Factory FACTORY = new Factory() { |
33 | | - @Override public Integration<?> create(ValueMap settings, Analytics analytics) { |
34 | | - Logger logger = analytics.logger(FIREBASE_ANALYTICS_KEY); |
35 | | - if (!hasPermission(analytics.getApplication(), Manifest.permission.ACCESS_NETWORK_STATE)) { |
36 | | - logger.debug("ACCESS_NETWORK_STATE is required for Firebase Analytics."); |
37 | | - return null; |
38 | | - } |
39 | | - if (!hasPermission(analytics.getApplication(), Manifest.permission.INTERNET)) { |
40 | | - logger.debug("INTERNET is required for Firebase Analytics."); |
41 | | - return null; |
42 | | - } |
43 | | - if (!hasPermission(analytics.getApplication(), Manifest.permission.WAKE_LOCK)) { |
44 | | - logger.debug("WAKE_LOCK is required for Firebase Analytics."); |
45 | | - return null; |
46 | | - } |
47 | | - |
48 | | - Context context = analytics.getApplication(); |
49 | | - |
50 | | - return new FirebaseIntegration(context); |
51 | | - } |
52 | | - |
53 | | - @Override public String key() { |
54 | | - return FIREBASE_ANALYTICS_KEY; |
55 | | - } |
56 | | - }; |
57 | | - |
58 | | - private static final String FIREBASE_ANALYTICS_KEY = "Firebase Analytics"; |
| 33 | + public static final Factory FACTORY = |
| 34 | + new Factory() { |
| 35 | + @Override |
| 36 | + public Integration<?> create(ValueMap settings, Analytics analytics) { |
| 37 | + Logger logger = analytics.logger(FIREBASE_ANALYTICS_KEY); |
| 38 | + if (!hasPermission( |
| 39 | + analytics.getApplication(), Manifest.permission.ACCESS_NETWORK_STATE)) { |
| 40 | + logger.debug("ACCESS_NETWORK_STATE is required for Firebase Analytics."); |
| 41 | + return null; |
| 42 | + } |
| 43 | + if (!hasPermission(analytics.getApplication(), Manifest.permission.INTERNET)) { |
| 44 | + logger.debug("INTERNET is required for Firebase Analytics."); |
| 45 | + return null; |
| 46 | + } |
| 47 | + if (!hasPermission(analytics.getApplication(), Manifest.permission.WAKE_LOCK)) { |
| 48 | + logger.debug("WAKE_LOCK is required for Firebase Analytics."); |
| 49 | + return null; |
| 50 | + } |
| 51 | + |
| 52 | + Context context = analytics.getApplication(); |
| 53 | + |
| 54 | + return new FirebaseIntegration(context); |
| 55 | + } |
| 56 | + |
| 57 | + @Override |
| 58 | + public String key() { |
| 59 | + return FIREBASE_ANALYTICS_KEY; |
| 60 | + } |
| 61 | + }; |
| 62 | + |
| 63 | + private static final String FIREBASE_ANALYTICS_KEY = "Firebase"; |
| 64 | + |
| 65 | + final FirebaseAnalytics mFirebaseAnalytics; |
59 | 66 |
|
60 | 67 | public FirebaseIntegration(Context context) { |
61 | 68 | mFirebaseAnalytics = FirebaseAnalytics.getInstance(context); |
62 | 69 | } |
63 | 70 |
|
64 | | - @Override public void onActivityStarted(Activity activity) { |
| 71 | + @Override |
| 72 | + public void onActivityStarted(Activity activity) { |
65 | 73 | super.onActivityStarted(activity); |
66 | | - |
67 | 74 | } |
68 | 75 |
|
69 | | - @Override public void onActivityStopped(Activity activity) { |
| 76 | + @Override |
| 77 | + public void onActivityStopped(Activity activity) { |
70 | 78 | super.onActivityStopped(activity); |
71 | | - |
72 | 79 | } |
73 | 80 |
|
74 | | - @Override public void identify(IdentifyPayload identify) { |
| 81 | + @Override |
| 82 | + public void identify(IdentifyPayload identify) { |
75 | 83 | super.identify(identify); |
76 | 84 |
|
77 | 85 | if (!isNullOrEmpty(identify.userId())) { |
78 | 86 | mFirebaseAnalytics.setUserId(identify.userId()); |
79 | | - } |
80 | 87 |
|
81 | | - // mFirebaseAnalytics.setUserProperty(key, value); |
| 88 | + Map<String, Object> traits = identify.traits(); |
| 89 | + |
| 90 | + for (Map.Entry<String, Object> entry : identify.traits().entrySet()) { |
| 91 | + String trait = entry.getKey(); |
| 92 | + String value = String.valueOf(entry.getValue()); |
| 93 | + mFirebaseAnalytics.setUserProperty(trait, value); |
| 94 | + } |
| 95 | + |
| 96 | + } |
82 | 97 |
|
83 | 98 | } |
84 | 99 |
|
85 | | - @Override public void screen(ScreenPayload screen) { |
| 100 | + @Override |
| 101 | + public void screen(ScreenPayload screen) { |
86 | 102 | super.screen(screen); |
| 103 | + |
87 | 104 | // mFirebaseAnalytics.setCurrentScreen(this, screen.name(), null /* class override */); |
88 | 105 | } |
89 | 106 |
|
90 | | - @Override public void track(TrackPayload track) { |
| 107 | + @Override |
| 108 | + public void track(TrackPayload track) { |
91 | 109 | super.track(track); |
92 | | - |
93 | 110 | } |
94 | 111 | } |
0 commit comments