diff --git a/packages/performance/android/src/main/java/io/capawesome/capacitorjs/plugins/firebase/performance/FirebasePerformance.java b/packages/performance/android/src/main/java/io/capawesome/capacitorjs/plugins/firebase/performance/FirebasePerformance.java index f515c586..305f27a4 100644 --- a/packages/performance/android/src/main/java/io/capawesome/capacitorjs/plugins/firebase/performance/FirebasePerformance.java +++ b/packages/performance/android/src/main/java/io/capawesome/capacitorjs/plugins/firebase/performance/FirebasePerformance.java @@ -1,5 +1,7 @@ package io.capawesome.capacitorjs.plugins.firebase.performance; +import androidx.annotation.Nullable; + import com.google.firebase.perf.metrics.Trace; import java.util.HashMap; import java.util.Map; @@ -73,8 +75,8 @@ public void record( String traceName, long startTime, long duration, - Map attributes, - Map metrics + @Nullable Map attributes, + @Nullable Map metrics ) { long currentTime = System.currentTimeMillis(); long startDelay = Math.max(0, (startTime - currentTime)); diff --git a/packages/performance/android/src/main/java/io/capawesome/capacitorjs/plugins/firebase/performance/FirebasePerformanceHelper.java b/packages/performance/android/src/main/java/io/capawesome/capacitorjs/plugins/firebase/performance/FirebasePerformanceHelper.java new file mode 100644 index 00000000..06af982d --- /dev/null +++ b/packages/performance/android/src/main/java/io/capawesome/capacitorjs/plugins/firebase/performance/FirebasePerformanceHelper.java @@ -0,0 +1,41 @@ +package io.capawesome.capacitorjs.plugins.firebase.performance; + +import androidx.annotation.NonNull; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +public class FirebasePerformanceHelper { + + @NonNull + public static Map jsObjectToAttributesMap(JSONObject object) throws JSONException { + Map map = new HashMap<>(); + Iterator keys = object.keys(); + while (keys.hasNext()) { + String key = keys.next(); + map.put(key, object.get(key).toString()); + } + return map; + } + + @NonNull + public static Map jsObjectToMetricsMap(JSONObject object) throws JSONException { + Map map = new HashMap<>(); + Iterator keys = object.keys(); + while (keys.hasNext()) { + String key = keys.next(); + if (object.get(key) instanceof Long) { + map.put(key, (Long) object.get(key)); + } else if (object.get(key) instanceof Double) { + map.put(key, (long) Math.floor((double) object.get(key))); + } else { + throw new JSONException(FirebasePerformancePlugin.ERROR_INVALID_METRIC_VALUE); + } + } + return map; + } +} diff --git a/packages/performance/android/src/main/java/io/capawesome/capacitorjs/plugins/firebase/performance/FirebasePerformancePlugin.java b/packages/performance/android/src/main/java/io/capawesome/capacitorjs/plugins/firebase/performance/FirebasePerformancePlugin.java index b3c9e8da..0fe89145 100644 --- a/packages/performance/android/src/main/java/io/capawesome/capacitorjs/plugins/firebase/performance/FirebasePerformancePlugin.java +++ b/packages/performance/android/src/main/java/io/capawesome/capacitorjs/plugins/firebase/performance/FirebasePerformancePlugin.java @@ -7,11 +7,7 @@ import com.getcapacitor.PluginMethod; import com.getcapacitor.annotation.CapacitorPlugin; import com.google.firebase.perf.metrics.Trace; -import java.util.HashMap; -import java.util.Iterator; import java.util.Map; -import org.json.JSONException; -import org.json.JSONObject; @CapacitorPlugin(name = "FirebasePerformance") public class FirebasePerformancePlugin extends Plugin { @@ -317,10 +313,18 @@ public void record(PluginCall call) { call.reject(FirebasePerformancePlugin.ERROR_DURATION_MISSING); return; } - JSObject metrics = call.getObject("metrics", new JSObject()); - Map mappedMetrics = jsObjectToMetricsMap(metrics == null ? new JSObject() : metrics); - JSObject attributes = call.getObject("attributes", new JSObject()); - Map mappedAttributes = jsObjectToAttributesMap(attributes == null ? new JSObject() : attributes); + + JSObject options = call.getObject("options"); + Map mappedMetrics = null; + Map mappedAttributes = null; + + if (options != null) { + JSObject metrics = options.getJSObject("metrics"); + mappedMetrics = FirebasePerformanceHelper.jsObjectToMetricsMap(metrics == null ? new JSObject() : metrics); + JSObject attributes = options.getJSObject("attributes"); + mappedAttributes = FirebasePerformanceHelper.jsObjectToAttributesMap(attributes == null ? new JSObject() : attributes); + } + Trace trace = implementation.getTraceByName(traceName); if (trace == null) { call.reject(ERROR_TRACE_NOT_FOUND); @@ -333,30 +337,4 @@ public void record(PluginCall call) { call.reject(exception.getMessage()); } } - - private static Map jsObjectToAttributesMap(JSONObject object) throws JSONException { - Map map = new HashMap<>(); - Iterator keys = object.keys(); - while (keys.hasNext()) { - String key = keys.next(); - map.put(key, object.get(key).toString()); - } - return map; - } - - private static Map jsObjectToMetricsMap(JSONObject object) throws JSONException { - Map map = new HashMap<>(); - Iterator keys = object.keys(); - while (keys.hasNext()) { - String key = keys.next(); - if (object.get(key) instanceof Long) { - map.put(key, (Long) object.get(key)); - } else if (object.get(key) instanceof Double) { - map.put(key, (long) Math.floor((double) object.get(key))); - } else { - throw new JSONException(FirebasePerformancePlugin.ERROR_INVALID_METRIC_VALUE); - } - } - return map; - } } diff --git a/packages/performance/ios/Plugin/FirebasePerformance.swift b/packages/performance/ios/Plugin/FirebasePerformance.swift index 188ae4bf..c5484b57 100644 --- a/packages/performance/ios/Plugin/FirebasePerformance.swift +++ b/packages/performance/ios/Plugin/FirebasePerformance.swift @@ -86,6 +86,5 @@ import FirebasePerformance self.stopTrace(traceName) } } - return } }