1
+ #if UNITY_EDITOR
2
+ using System ;
3
+ using Firebase ;
4
+ using UnityEditor ;
5
+ using UnityEngine ;
6
+ using Firebase . RemoteConfig ;
7
+ using System . Threading . Tasks ;
8
+
9
+ namespace RimuruDev
10
+ {
11
+ public sealed class RemoteConfigEditor : EditorWindow
12
+ {
13
+ private string log ;
14
+ private bool firebaseInitialized ;
15
+
16
+ [ MenuItem ( "RimuruDev Tools/Firebase RemoteConfig Editor" ) ]
17
+ private static void ShowWindow ( ) =>
18
+ GetWindow < RemoteConfigEditor > ( "RemoteConfig Editor" ) ;
19
+
20
+ private async void OnEnable ( )
21
+ {
22
+ try
23
+ {
24
+ var result = await FirebaseApp . CheckAndFixDependenciesAsync ( ) ;
25
+
26
+ if ( result == DependencyStatus . Available )
27
+ {
28
+ firebaseInitialized = true ;
29
+ log += "\n Firebase initialized in Editor" ;
30
+ }
31
+ else
32
+ {
33
+ log += $ "\n Could not resolve Firebase dependencies: { result } ";
34
+ }
35
+ }
36
+ catch ( Exception e )
37
+ {
38
+ Debug . LogError ( $ "TODO: handle exception") ;
39
+ }
40
+ }
41
+
42
+ private void OnGUI ( )
43
+ {
44
+ GUILayout . Label ( "Remote Config Editor" , EditorStyles . boldLabel ) ;
45
+ GUILayout . Label ( log , EditorStyles . wordWrappedLabel ) ;
46
+
47
+ EditorGUI . BeginDisabledGroup ( ! firebaseInitialized ) ;
48
+
49
+ if ( GUILayout . Button ( "Print RemoteConfig Cache" ) )
50
+ FirebaseRemoteConfigHelper . PrintRemoteConfigCache ( ) ;
51
+
52
+ if ( GUILayout . Button ( "Restart Firebase and Fetch Remote Config" ) )
53
+ _ = RestartFirebaseAndFetchAsync ( ) ;
54
+
55
+ EditorGUI . EndDisabledGroup ( ) ;
56
+ }
57
+
58
+ private async Task RestartFirebaseAndFetchAsync ( )
59
+ {
60
+ try
61
+ {
62
+ FirebaseRemoteConfigHelper . PrintRemoteConfigCache ( ) ;
63
+ FirebaseRemoteConfigHelper . ClearRemoteConfigCache ( ) ;
64
+ FirebaseAppHelper . DisposeAllFirebaseApps ( ) ;
65
+
66
+ // NOTE: Ну я на всякий пожарный подожду, мало ли не успеет прогреться :D
67
+ await Task . Delay ( 500 ) ;
68
+
69
+ var result = await FirebaseApp . CheckAndFixDependenciesAsync ( ) ;
70
+ if ( result != DependencyStatus . Available )
71
+ {
72
+ log += $ "\n Could not reinitialize Firebase: { result } ";
73
+ Repaint ( ) ;
74
+ return ;
75
+ }
76
+
77
+ firebaseInitialized = true ;
78
+ log += "\n Firebase reinitialized in Editor" ;
79
+
80
+ // NOTE: Прогрев перед подтягиванием свежачка с сервачка :3
81
+ var config = FirebaseRemoteConfig . DefaultInstance ;
82
+ var settings = config . ConfigSettings ;
83
+
84
+ settings . MinimumFetchIntervalInMilliseconds = 0 ;
85
+ settings . FetchTimeoutInMilliseconds = 30000 ;
86
+
87
+ await config . SetConfigSettingsAsync ( settings ) ;
88
+
89
+ await config . EnsureInitializedAsync ( ) ;
90
+
91
+ // NOTE: Получаем свежачок, и кайфуем.
92
+ await config . FetchAsync ( TimeSpan . Zero ) ;
93
+ await config . ActivateAsync ( ) ;
94
+
95
+ // NOTE: Мега лень париться с StringBuilder, один-фиг редактор.
96
+ log += $ "\n Fetch succeeded! Time: { config . Info . FetchTime } ";
97
+ log += $ "\n All values count: { config . AllValues . Count } ";
98
+
99
+ foreach ( var pair in config . AllValues )
100
+ log += $ "\n [ Key: { pair . Key } | Value: { pair . Value . StringValue } ]";
101
+ }
102
+ catch ( Exception e )
103
+ {
104
+ log += $ "\n Restart/Fetch failed: { e } ";
105
+ }
106
+
107
+ Repaint ( ) ;
108
+ }
109
+ }
110
+ }
111
+ #endif
0 commit comments