From 42a170687dc4f2617dbf61d6bd408aa7c442efcc Mon Sep 17 00:00:00 2001 From: Nordup Date: Fri, 15 Aug 2025 23:42:56 +0700 Subject: [PATCH] onboarding events --- app/project.godot | 2 +- app/scenes/app.tscn | 8 +++++- app/scripts/api/analytics/analytics.gd | 20 ++++++++------ app/scripts/api/analytics/analytics_events.gd | 16 ++++++++++-- app/scripts/api/analytics/analytics_sender.gd | 2 +- .../api/analytics/analytics_sender_app.gd | 4 +-- .../api/analytics/analytics_sender_gate.gd | 12 +++------ .../analytics/analytics_sender_onboarding.gd | 26 +++++++++++++++++++ 8 files changed, 67 insertions(+), 23 deletions(-) create mode 100644 app/scripts/api/analytics/analytics_sender_onboarding.gd diff --git a/app/project.godot b/app/project.godot index 507fa21..9d0c813 100644 --- a/app/project.godot +++ b/app/project.godot @@ -12,7 +12,7 @@ config_version=5 config/name="TheGates" config/description="Building new Internet" -config/version="0.16.0" +config/version="0.16.1" config/tags=PackedStringArray("thegates") run/main_scene="res://scenes/app.tscn" run/enable_alt_space_menu=true diff --git a/app/scenes/app.tscn b/app/scenes/app.tscn index 37d4a9f..b327b05 100644 --- a/app/scenes/app.tscn +++ b/app/scenes/app.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=18 format=3 uid="uid://ct8gsph3wnepl"] +[gd_scene load_steps=20 format=3 uid="uid://ct8gsph3wnepl"] [ext_resource type="Script" path="res://scripts/app.gd" id="1_skc7d"] [ext_resource type="Resource" uid="uid://b1xvdym0qh6td" path="res://resources/gate_events.res" id="2_cdryv"] @@ -16,7 +16,9 @@ [ext_resource type="Script" path="res://scripts/api/discover_gate.gd" id="13_3xhql"] [ext_resource type="Script" path="res://scripts/api/analytics/analytics_sender_bookmark.gd" id="13_74yg1"] [ext_resource type="Script" path="res://scripts/api/analytics/analytics_sender_gate.gd" id="13_jout6"] +[ext_resource type="Script" path="res://scripts/api/analytics/analytics_sender_onboarding.gd" id="15_a11br"] [ext_resource type="Script" path="res://scripts/api/featured_gates.gd" id="15_c1fxl"] +[ext_resource type="Resource" uid="uid://crjhix0osmtnf" path="res://resources/ui_events.res" id="16_6u24i"] [node name="App" type="Node" node_paths=PackedStringArray("scenes_root")] script = ExtResource("1_skc7d") @@ -57,6 +59,10 @@ gate_events = ExtResource("2_cdryv") script = ExtResource("13_74yg1") bookmarks = ExtResource("6_rupvx") +[node name="SenderOnboarding" type="Node" parent="Api/Analytics"] +script = ExtResource("15_a11br") +ui_events = ExtResource("16_6u24i") + [node name="DiscoverGate" type="Node" parent="Api"] script = ExtResource("13_3xhql") api = ExtResource("10_04o5h") diff --git a/app/scripts/api/analytics/analytics.gd b/app/scripts/api/analytics/analytics.gd index fd0275b..8ddfb50 100644 --- a/app/scripts/api/analytics/analytics.gd +++ b/app/scripts/api/analytics/analytics.gd @@ -1,5 +1,5 @@ extends Node -class_name Analitycs +class_name Analytics signal analytics_ready @@ -12,6 +12,15 @@ func _ready() -> void: analytics_ready.emit() +func send_event(body: Dictionary = {}) -> void: + var url = api.analytics_event + var callback = func(_result, code, _headers, _body): + if code != 200: Debug.logclr("Request send_event failed. Code " + str(code), Color.RED) + + var err = await Backend.request(url, callback, body, HTTPClient.METHOD_POST) + if err != HTTPRequest.RESULT_SUCCESS: Debug.logclr("Cannot send request send_event", Color.RED) + + func get_app_version() -> void: AnalyticsEvents.app_version = ProjectSettings.get_setting("application/config/version") @@ -32,10 +41,5 @@ func get_user_id() -> void: if err != HTTPRequest.RESULT_SUCCESS: Debug.logclr("Cannot send request create_user_id", Color.RED) -func send_event(body: Dictionary = {}) -> void: - var url = api.analytics_event - var callback = func(_result, code, _headers, _body): - if code != 200: Debug.logclr("Request send_event failed. Code " + str(code), Color.RED) - - var err = await Backend.request(url, callback, body, HTTPClient.METHOD_POST) - if err != HTTPRequest.RESULT_SUCCESS: Debug.logclr("Cannot send request send_event", Color.RED) +static func get_delta_sec_from_tick(from_tick: int) -> float: + return float(Time.get_ticks_msec() - from_tick) / 1000 diff --git a/app/scripts/api/analytics/analytics_events.gd b/app/scripts/api/analytics/analytics_events.gd index eb878e2..a2399b6 100644 --- a/app/scripts/api/analytics/analytics_events.gd +++ b/app/scripts/api/analytics/analytics_events.gd @@ -1,15 +1,15 @@ extends Node #class_name AnalyticsEvents -var user_id := "none" var app_version := "none" +var user_id := "none" func base(event_name: String) -> Dictionary: var event = {} event.event_name = event_name - event.user_id = user_id event.app_version = app_version + event.user_id = user_id return event @@ -86,3 +86,15 @@ func error(msg: String) -> Dictionary: var event = base("error") event.msg = msg return event + + +# ONBOARDING + +func onboarding_started() -> Dictionary: + return base("onboarding_started") + + +func onboarding_finished(time_spend: float) -> Dictionary: + var event = base("onboarding_finished") + event.time_spend = time_spend + return event diff --git a/app/scripts/api/analytics/analytics_sender.gd b/app/scripts/api/analytics/analytics_sender.gd index 6539e43..3705c7a 100644 --- a/app/scripts/api/analytics/analytics_sender.gd +++ b/app/scripts/api/analytics/analytics_sender.gd @@ -1,7 +1,7 @@ extends Node class_name AnalyticsSender -var analytics: Analitycs +var analytics: Analytics func _enter_tree() -> void: diff --git a/app/scripts/api/analytics/analytics_sender_app.gd b/app/scripts/api/analytics/analytics_sender_app.gd index 34f4411..782ebe4 100644 --- a/app/scripts/api/analytics/analytics_sender_app.gd +++ b/app/scripts/api/analytics/analytics_sender_app.gd @@ -26,12 +26,12 @@ func start_heartbeat() -> void: func send_hearbeat() -> void: - var time_spend = float(Time.get_ticks_msec()) / 1000 + var time_spend = Analytics.get_delta_sec_from_tick(0) analytics.send_event(AnalyticsEvents.heartbeat(time_spend)) func _exit_tree() -> void: # Save to send on open - var time_spend = float(Time.get_ticks_msec()) / 1000 + var time_spend = Analytics.get_delta_sec_from_tick(0) var event = AnalyticsEvents.app_exit(time_spend) DataSaver.set_value("analytics", "app_exit", JSON.stringify(event)) diff --git a/app/scripts/api/analytics/analytics_sender_gate.gd b/app/scripts/api/analytics/analytics_sender_gate.gd index d9ac3c1..3d1653b 100644 --- a/app/scripts/api/analytics/analytics_sender_gate.gd +++ b/app/scripts/api/analytics/analytics_sender_gate.gd @@ -39,14 +39,14 @@ func send_gate_open(url: String) -> void: func send_gate_load() -> void: - var download_time = get_delta_sec(gate_open_tick) + var download_time = Analytics.get_delta_sec_from_tick(gate_open_tick) gate_load_tick = Time.get_ticks_msec() analytics.send_event(AnalyticsEvents.gate_load(gate_url, download_time)) Debug.logclr("Download time: %.3f" % [download_time], Color.AQUAMARINE) func send_gate_start() -> void: - var bootup_time = get_delta_sec(gate_load_tick) + var bootup_time = Analytics.get_delta_sec_from_tick(gate_load_tick) analytics.send_event(AnalyticsEvents.gate_start(gate_url, bootup_time)) Debug.logclr("Bootup time: %.3f" % [bootup_time], Color.AQUAMARINE) @@ -54,7 +54,7 @@ func send_gate_start() -> void: func send_gate_exit() -> void: if gate_url.is_empty(): return - var time_spend = get_delta_sec(gate_open_tick) + var time_spend = Analytics.get_delta_sec_from_tick(gate_open_tick) analytics.send_event(AnalyticsEvents.gate_exit(gate_url, time_spend)) gate_url = "" @@ -63,10 +63,6 @@ func _exit_tree() -> void: if gate_url.is_empty(): return # Save to send on open - var time_spend = get_delta_sec(gate_open_tick) + var time_spend = Analytics.get_delta_sec_from_tick(gate_open_tick) var event = AnalyticsEvents.gate_exit(gate_url, time_spend) DataSaver.set_value("analytics", "send_gate_exit", JSON.stringify(event)) - - -func get_delta_sec(from_msec: int) -> float: - return float(Time.get_ticks_msec() - from_msec) / 1000 diff --git a/app/scripts/api/analytics/analytics_sender_onboarding.gd b/app/scripts/api/analytics/analytics_sender_onboarding.gd new file mode 100644 index 0000000..4fd8102 --- /dev/null +++ b/app/scripts/api/analytics/analytics_sender_onboarding.gd @@ -0,0 +1,26 @@ +extends AnalyticsSender +class_name AnalyticsSenderOnboarding + +@export var ui_events: UiEvents + +var onboarding_started_tick: int + + +func start() -> void: + super.start() + + ui_events.onboarding_started.connect(send_onboarding_started) + ui_events.onboarding_finished.connect(send_onboarding_finished) + + if ui_events.is_onboarding_started: + send_onboarding_started() + + +func send_onboarding_started() -> void: + onboarding_started_tick = Time.get_ticks_msec() + analytics.send_event(AnalyticsEvents.onboarding_started()) + + +func send_onboarding_finished() -> void: + var time_spend = Analytics.get_delta_sec_from_tick(onboarding_started_tick) + analytics.send_event(AnalyticsEvents.onboarding_finished(time_spend))