@@ -8,6 +8,7 @@ import org.godotengine.godot.plugin.GodotPlugin
88import org.godotengine.godot.plugin.SignalInfo
99import org.godotengine.godot.plugin.UsedByGodot
1010import org.json.JSONObject
11+ import org.godotengine.godot.Dictionary
1112
1213class FirebaseAnalyticsPlugin (godot : Godot ) : GodotPlugin(godot) {
1314
@@ -27,13 +28,16 @@ class FirebaseAnalyticsPlugin(godot: Godot) : GodotPlugin(godot) {
2728
2829 override fun getPluginSignals (): Set <SignalInfo > {
2930 return setOf (
30- SignalInfo (" analytics_initialized" ,
31+ SignalInfo (
32+ " analytics_initialized" ,
3133 Boolean ::class .javaObjectType
3234 ),
33- SignalInfo (" analytics_event_logged" ,
35+ SignalInfo (
36+ " analytics_event_logged" ,
3437 String ::class .java
3538 ),
36- SignalInfo (" analytics_error" ,
39+ SignalInfo (
40+ " analytics_error" ,
3741 String ::class .java
3842 )
3943 )
@@ -60,7 +64,7 @@ class FirebaseAnalyticsPlugin(godot: Godot) : GodotPlugin(godot) {
6064 }
6165
6266 @UsedByGodot
63- fun log_event (event_name : String , params_json : String ) {
67+ fun log_event (event_name : String , params : Dictionary ) {
6468 val analytics = firebaseAnalytics
6569 if (analytics == null ) {
6670 Log .e(TAG , " Firebase Analytics not initialized" )
@@ -69,19 +73,30 @@ class FirebaseAnalyticsPlugin(godot: Godot) : GodotPlugin(godot) {
6973 }
7074
7175 try {
72- val params = if (params_json.isNotEmpty()) JSONObject (params_json) else JSONObject ()
7376 val bundle = Bundle ()
7477
75- val keys = params.keys()
76- while (keys.hasNext()) {
77- val key = keys.next()
78- val value = params.get(key)
78+ for (key in params.keys) {
79+ val value = params[key]
80+
81+ // firebase parameter names must be strings
82+ if (key !is String || value == null ) {
83+ continue
84+ }
85+
7986 when (value) {
8087 is Int -> bundle.putInt(key, value)
8188 is Long -> bundle.putLong(key, value)
89+ is Float -> bundle.putDouble(key, value.toDouble())
8290 is Double -> bundle.putDouble(key, value)
83- is Boolean -> bundle.putBoolean(key, value)
84- else -> bundle.putString(key, value.toString())
91+ is Boolean -> {
92+ // firebase analytics does NOT support boolean
93+ bundle.putInt(key, if (value) 1 else 0 )
94+ }
95+ is String -> bundle.putString(key, value)
96+ else -> {
97+ // unsupported types are silently ignored
98+ Log .w(TAG , " Unsupported param type for key=$key (${value::class .java} )" )
99+ }
85100 }
86101 }
87102
0 commit comments