mirror of
https://github.com/thegatesbrowser/thegates.git
synced 2025-08-24 02:17:27 -04:00
onboarding events
This commit is contained in:
parent
6b383dad34
commit
42a170687d
8 changed files with 67 additions and 23 deletions
|
@ -12,7 +12,7 @@ config_version=5
|
||||||
|
|
||||||
config/name="TheGates"
|
config/name="TheGates"
|
||||||
config/description="Building new Internet"
|
config/description="Building new Internet"
|
||||||
config/version="0.16.0"
|
config/version="0.16.1"
|
||||||
config/tags=PackedStringArray("thegates")
|
config/tags=PackedStringArray("thegates")
|
||||||
run/main_scene="res://scenes/app.tscn"
|
run/main_scene="res://scenes/app.tscn"
|
||||||
run/enable_alt_space_menu=true
|
run/enable_alt_space_menu=true
|
||||||
|
|
|
@ -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="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"]
|
[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/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_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_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="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")]
|
[node name="App" type="Node" node_paths=PackedStringArray("scenes_root")]
|
||||||
script = ExtResource("1_skc7d")
|
script = ExtResource("1_skc7d")
|
||||||
|
@ -57,6 +59,10 @@ gate_events = ExtResource("2_cdryv")
|
||||||
script = ExtResource("13_74yg1")
|
script = ExtResource("13_74yg1")
|
||||||
bookmarks = ExtResource("6_rupvx")
|
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"]
|
[node name="DiscoverGate" type="Node" parent="Api"]
|
||||||
script = ExtResource("13_3xhql")
|
script = ExtResource("13_3xhql")
|
||||||
api = ExtResource("10_04o5h")
|
api = ExtResource("10_04o5h")
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
extends Node
|
extends Node
|
||||||
class_name Analitycs
|
class_name Analytics
|
||||||
|
|
||||||
signal analytics_ready
|
signal analytics_ready
|
||||||
|
|
||||||
|
@ -12,6 +12,15 @@ func _ready() -> void:
|
||||||
analytics_ready.emit()
|
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:
|
func get_app_version() -> void:
|
||||||
AnalyticsEvents.app_version = ProjectSettings.get_setting("application/config/version")
|
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)
|
if err != HTTPRequest.RESULT_SUCCESS: Debug.logclr("Cannot send request create_user_id", Color.RED)
|
||||||
|
|
||||||
|
|
||||||
func send_event(body: Dictionary = {}) -> void:
|
static func get_delta_sec_from_tick(from_tick: int) -> float:
|
||||||
var url = api.analytics_event
|
return float(Time.get_ticks_msec() - from_tick) / 1000
|
||||||
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)
|
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
extends Node
|
extends Node
|
||||||
#class_name AnalyticsEvents
|
#class_name AnalyticsEvents
|
||||||
|
|
||||||
var user_id := "none"
|
|
||||||
var app_version := "none"
|
var app_version := "none"
|
||||||
|
var user_id := "none"
|
||||||
|
|
||||||
|
|
||||||
func base(event_name: String) -> Dictionary:
|
func base(event_name: String) -> Dictionary:
|
||||||
var event = {}
|
var event = {}
|
||||||
event.event_name = event_name
|
event.event_name = event_name
|
||||||
event.user_id = user_id
|
|
||||||
event.app_version = app_version
|
event.app_version = app_version
|
||||||
|
event.user_id = user_id
|
||||||
return event
|
return event
|
||||||
|
|
||||||
|
|
||||||
|
@ -86,3 +86,15 @@ func error(msg: String) -> Dictionary:
|
||||||
var event = base("error")
|
var event = base("error")
|
||||||
event.msg = msg
|
event.msg = msg
|
||||||
return event
|
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
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
extends Node
|
extends Node
|
||||||
class_name AnalyticsSender
|
class_name AnalyticsSender
|
||||||
|
|
||||||
var analytics: Analitycs
|
var analytics: Analytics
|
||||||
|
|
||||||
|
|
||||||
func _enter_tree() -> void:
|
func _enter_tree() -> void:
|
||||||
|
|
|
@ -26,12 +26,12 @@ func start_heartbeat() -> void:
|
||||||
|
|
||||||
|
|
||||||
func send_hearbeat() -> 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))
|
analytics.send_event(AnalyticsEvents.heartbeat(time_spend))
|
||||||
|
|
||||||
|
|
||||||
func _exit_tree() -> void:
|
func _exit_tree() -> void:
|
||||||
# Save to send on open
|
# 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)
|
var event = AnalyticsEvents.app_exit(time_spend)
|
||||||
DataSaver.set_value("analytics", "app_exit", JSON.stringify(event))
|
DataSaver.set_value("analytics", "app_exit", JSON.stringify(event))
|
||||||
|
|
|
@ -39,14 +39,14 @@ func send_gate_open(url: String) -> void:
|
||||||
|
|
||||||
|
|
||||||
func send_gate_load() -> 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()
|
gate_load_tick = Time.get_ticks_msec()
|
||||||
analytics.send_event(AnalyticsEvents.gate_load(gate_url, download_time))
|
analytics.send_event(AnalyticsEvents.gate_load(gate_url, download_time))
|
||||||
Debug.logclr("Download time: %.3f" % [download_time], Color.AQUAMARINE)
|
Debug.logclr("Download time: %.3f" % [download_time], Color.AQUAMARINE)
|
||||||
|
|
||||||
|
|
||||||
func send_gate_start() -> void:
|
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))
|
analytics.send_event(AnalyticsEvents.gate_start(gate_url, bootup_time))
|
||||||
Debug.logclr("Bootup time: %.3f" % [bootup_time], Color.AQUAMARINE)
|
Debug.logclr("Bootup time: %.3f" % [bootup_time], Color.AQUAMARINE)
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ func send_gate_start() -> void:
|
||||||
func send_gate_exit() -> void:
|
func send_gate_exit() -> void:
|
||||||
if gate_url.is_empty(): return
|
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))
|
analytics.send_event(AnalyticsEvents.gate_exit(gate_url, time_spend))
|
||||||
gate_url = ""
|
gate_url = ""
|
||||||
|
|
||||||
|
@ -63,10 +63,6 @@ func _exit_tree() -> void:
|
||||||
if gate_url.is_empty(): return
|
if gate_url.is_empty(): return
|
||||||
|
|
||||||
# Save to send on open
|
# 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)
|
var event = AnalyticsEvents.gate_exit(gate_url, time_spend)
|
||||||
DataSaver.set_value("analytics", "send_gate_exit", JSON.stringify(event))
|
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
|
|
||||||
|
|
26
app/scripts/api/analytics/analytics_sender_onboarding.gd
Normal file
26
app/scripts/api/analytics/analytics_sender_onboarding.gd
Normal file
|
@ -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))
|
Loading…
Add table
Add a link
Reference in a new issue