Skip to content

Commit 76322a3

Browse files
committed
Fix title, influenced, & remote Firebase setting
1 parent 274f98b commit 76322a3

2 files changed

Lines changed: 46 additions & 70 deletions

File tree

OneSignalSDK/onesignal/src/main/java/com/onesignal/OneSignal.java

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -558,7 +558,7 @@ public static void init(Context context, String googleProjectNumber, String oneS
558558
if (TrackGooglePurchase.CanTrack(appContext))
559559
trackGooglePurchase = new TrackGooglePurchase(appContext);
560560

561-
if(TrackFirebaseAnalytics.CanTrack(appContext))
561+
if (TrackFirebaseAnalytics.CanTrack())
562562
trackFirebaseAnalytics = new TrackFirebaseAnalytics(appContext);
563563

564564
initDone = true;
@@ -737,6 +737,10 @@ void onSuccess(String response) {
737737

738738
awl = responseJson.getJSONObject("awl_list");
739739

740+
boolean firebaseAnalytics = responseJson.optBoolean("fba", false);
741+
OneSignalPrefs.saveBool(OneSignalPrefs.PREFS_ONESIGNAL,
742+
OneSignalPrefs.PREFS_GT_FIREBASE_TRACKING_ENABLED, firebaseAnalytics);
743+
740744
NotificationChannelManager.processChannelList(appContext, responseJson);
741745
} catch (Throwable t) {
742746
t.printStackTrace();
@@ -956,7 +960,7 @@ static void onAppFocus() {
956960

957961
getCurrentPermissionState(appContext).refreshAsTo();
958962

959-
if(trackFirebaseAnalytics != null && getFirebaseAnalyticsEnabled(appContext))
963+
if (trackFirebaseAnalytics != null && getFirebaseAnalyticsEnabled(appContext))
960964
trackFirebaseAnalytics.trackInfluenceOpenEvent();
961965
}
962966

@@ -1634,21 +1638,6 @@ static void updateUserIdDependents(String userId) {
16341638
OneSignalChromeTab.setup(appContext, appId, userId, AdvertisingIdProviderGPS.getLastValue());
16351639
}
16361640

1637-
/**
1638-
* By default, OneSignal does not auto-track notification events through Firebase.
1639-
* Call this method with {@code true} to start tracking.
1640-
*
1641-
* @see <a href="https://documentation.onesignal.com/docs/firebase-analytics">Firebase Analytics | OneSignal Docs</a>
1642-
* @param enable whether to enable Firebase tracking
1643-
*/
1644-
public static void enableFirebaseAnalytics(boolean enable) {
1645-
if (appContext == null)
1646-
return;
1647-
1648-
OneSignalPrefs.saveBool(OneSignalPrefs.PREFS_ONESIGNAL,
1649-
OneSignalPrefs.PREFS_GT_FIREBASE_TRACKING_ENABLED, enable);
1650-
}
1651-
16521641
static boolean getFirebaseAnalyticsEnabled(Context context) {
16531642
return OneSignalPrefs.getBool(OneSignalPrefs.PREFS_ONESIGNAL,
16541643
OneSignalPrefs.PREFS_GT_FIREBASE_TRACKING_ENABLED,false);

OneSignalSDK/onesignal/src/main/java/com/onesignal/TrackFirebaseAnalytics.java

Lines changed: 40 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* Modified MIT License
33
*
4-
* Copyright 2016 OneSignal
4+
* Copyright 2017 OneSignal
55
*
66
* Permission is hereby granted, free of charge, to any person obtaining a copy
77
* of this software and associated documentation files (the "Software"), to deal
@@ -27,34 +27,21 @@
2727

2828
package com.onesignal;
2929

30-
import android.content.ComponentName;
3130
import android.content.Context;
32-
import android.content.Intent;
33-
import android.content.ServiceConnection;
34-
import android.content.pm.PackageManager;
3531
import android.os.Bundle;
36-
import android.os.IBinder;
3732

38-
import org.json.JSONArray;
39-
import org.json.JSONException;
40-
import org.json.JSONObject;
41-
42-
import java.lang.reflect.InvocationTargetException;
4333
import java.lang.reflect.Method;
44-
import java.math.BigDecimal;
45-
import java.util.ArrayList;
46-
import java.util.HashMap;
47-
import java.util.Map;
4834
import java.util.concurrent.atomic.AtomicLong;
4935

5036
class TrackFirebaseAnalytics {
51-
52-
static private boolean firebaseAnalyticsEnabled = false;
37+
5338
private static Class<?> FirebaseAnalyticsClass;
5439
private Object mFirebaseAnalyticsInstance;
5540
private Context appContext;
5641

5742
private static AtomicLong lastReceivedTime;
43+
private static AtomicLong lastOpenedTime;
44+
5845
private static OSNotificationPayload lastReceivedPayload;
5946

6047
private static final String EVENT_NOTIFICATION_OPENED = "os_notification_opened";
@@ -65,52 +52,56 @@ class TrackFirebaseAnalytics {
6552
appContext = activity;
6653
}
6754

68-
static boolean CanTrack(Context context) {
55+
static boolean CanTrack() {
6956
try {
7057
FirebaseAnalyticsClass = Class.forName("com.google.firebase.analytics.FirebaseAnalytics");
71-
firebaseAnalyticsEnabled = true;
58+
return true;
7259
} catch (Throwable t) {
73-
firebaseAnalyticsEnabled = false;
74-
}
75-
finally {
76-
return firebaseAnalyticsEnabled;
60+
return false;
7761
}
7862
}
7963

8064
void trackInfluenceOpenEvent() {
65+
if (lastReceivedTime == null || lastReceivedPayload == null)
66+
return;
67+
68+
// Attribute if app was opened in 2 minutes or less after displaying the notification
69+
long now = System.currentTimeMillis();
70+
if (now - lastReceivedTime.get() > 1000 * 60 * 2)
71+
return;
72+
73+
// Don't attribute if we opened a notification in the last 30 seconds.
74+
// To prevent an open and an influenced open from firing for the same notification.
75+
if (lastOpenedTime != null && now - lastOpenedTime.get() < 1000 * 30)
76+
return;
77+
8178
try {
79+
Object firebaseAnalyticsInstance = getFirebaseAnalyticsInstance(appContext);
8280

83-
long currentTime = System.currentTimeMillis();
84-
if(lastReceivedTime != null &&
85-
currentTime-lastReceivedTime.get() < 1000*60*2 &&
86-
lastReceivedPayload != null) {
87-
88-
Object firebaseAnalyticsInstance = getFirebaseAnalyticsInstance(appContext);
89-
90-
Method trackMethod = getTrackMethod(FirebaseAnalyticsClass);
91-
92-
String event = EVENT_NOTIFICATION_INFLUENCE_OPEN;
81+
Method trackMethod = getTrackMethod(FirebaseAnalyticsClass);
9382

94-
//construct the firebase analytics event bundle
95-
Bundle bundle = new Bundle();
96-
bundle.putString("source", "OneSignal");
97-
bundle.putString("medium", "notification");
98-
bundle.putString("notification_id", lastReceivedPayload.notificationID);
99-
bundle.putString("campaign", getCampaignNameFromPayload(lastReceivedPayload));
83+
String event = EVENT_NOTIFICATION_INFLUENCE_OPEN;
10084

101-
trackMethod.invoke(firebaseAnalyticsInstance, event, bundle);
102-
}
85+
//construct the firebase analytics event bundle
86+
Bundle bundle = new Bundle();
87+
bundle.putString("source", "OneSignal");
88+
bundle.putString("medium", "notification");
89+
bundle.putString("notification_id", lastReceivedPayload.notificationID);
90+
bundle.putString("campaign", getCampaignNameFromPayload(lastReceivedPayload));
10391

92+
trackMethod.invoke(firebaseAnalyticsInstance, event, bundle);
10493
} catch (Throwable t) {
10594
t.printStackTrace();
10695
}
10796
}
10897

10998
void trackOpenedEvent(OSNotificationOpenResult openResult) {
99+
if(lastOpenedTime == null)
100+
lastOpenedTime = new AtomicLong();
101+
lastOpenedTime.set(System.currentTimeMillis());
102+
110103
try {
111-
112104
//get the source, medium, campaign params from the openResult
113-
114105
Object firebaseAnalyticsInstance = getFirebaseAnalyticsInstance(appContext);
115106

116107
Method trackMethod = getTrackMethod(FirebaseAnalyticsClass);
@@ -134,7 +125,6 @@ void trackOpenedEvent(OSNotificationOpenResult openResult) {
134125
void trackReceivedEvent(OSNotificationOpenResult receivedResult) {
135126
try {
136127
//get the source, medium, campaign params from the openResult
137-
138128
Object firebaseAnalyticsInstance = getFirebaseAnalyticsInstance(appContext);
139129

140130
Method trackMethod = getTrackMethod(FirebaseAnalyticsClass);
@@ -156,18 +146,15 @@ void trackReceivedEvent(OSNotificationOpenResult receivedResult) {
156146
} catch (Throwable t) {
157147
t.printStackTrace();
158148
}
159-
160-
161149
}
162150

163151
private String getCampaignNameFromPayload(OSNotificationPayload payload) {
164-
String campaign;
165-
if(!payload.templateName.isEmpty() && !payload.templateId.isEmpty())
166-
campaign = payload.templateName + " - " + payload.templateId;
167-
else
168-
campaign = payload.title.substring(0, Math.min(10, payload.title.length()));
169-
170-
return campaign;
152+
if (!payload.templateName.isEmpty() && !payload.templateId.isEmpty())
153+
return payload.templateName + " - " + payload.templateId;
154+
else if (payload.title != null)
155+
return payload.title.substring(0, Math.min(10, payload.title.length()));
156+
157+
return "";
171158
}
172159

173160
private Object getFirebaseAnalyticsInstance(Context context) {

0 commit comments

Comments
 (0)