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