Beispiel #1
0
 public FirebaseCloudRemoteConfig(ICloudRemoteSetting setting)
 {
     Init(setting);
 }
        public static ICloudRemoteConfig Create(ICloudRemoteSetting setting)
        {
            if (setting.IsNull())
            {
                return(null);
            }

            var service = setting.GetConfig <CloudRemoteConfigType>(nameof(CloudService));

            switch (service)
            {
                #if UNITY_REMOTE_CONFIG
            case CloudRemoteConfigType.UnityRemoteConfig:
            {
                if (remoteConfigs.ContainsKey(service))
                {
                    return(remoteConfigs[service] as ICloudRemoteConfig);
                }

                var userAttribute = setting.GetConfig <object>(UnityRemoteConfig.UnityRemoteSetting.USER);
                var appAttribute  = setting.GetConfig <object>(UnityRemoteConfig.UnityRemoteSetting.APP);
                var userCustomID  = setting.GetConfig <string>(UnityRemoteConfig.UnityRemoteSetting.USERID);

                var type      = typeof(UnityRemoteConfig.UnityRemoteConfig <,>).MakeGenericType(userAttribute.GetType(), appAttribute.GetType());
                var a_Context = Activator.CreateInstance(type, userAttribute, appAttribute, userCustomID);

                var config = default(ICloudRemoteConfig);
                Activator.CreateInstance(type).To <ICloudRemoteConfig>(out config);
                remoteConfigs[service] = config;
                return(config);
            }
                #endif

                #if FIREBASE_REMOTE_CONFIG || FIREBASE_REALTIME_DATABASE
            case CloudRemoteConfigType.FirebaseRemoteConfig:
            {
                var type = setting.GetConfig <Firebase.FirebaseCloudRemoteConfigType>(Firebase.FirebaseCloudRemoteSetting.TYPE);

                //Add service
                if (!remoteConfigs.ContainsKey(service))
                {
                    remoteConfigs[service] = new Dictionary <Firebase.FirebaseCloudRemoteConfigType, ICloudRemoteConfig>();
                }

                var firebaseConfigs = remoteConfigs[service] as IDictionary <Firebase.FirebaseCloudRemoteConfigType, ICloudRemoteConfig>;
                if (firebaseConfigs.ContainsKey(type))
                {
                    return(firebaseConfigs[type]);
                }

                return(firebaseConfigs[type] = new Firebase.FirebaseCloudRemoteConfig(setting));
            }
                #endif

            default:
            {
                "Service UnAvailable".LogError();
                return(null);
            }
            }
        }
Beispiel #3
0
        private async void Init(ICloudRemoteSetting setting)
        {
            _type    = setting.GetConfig <FirebaseCloudRemoteConfigType>(FirebaseCloudRemoteSetting.TYPE);
            _devMode = setting.GetConfig <bool>(FirebaseCloudRemoteSetting.DEVMODE);

            switch (_type)
            {
                #if FIREBASE_REALTIME_DATABASE
            case FirebaseCloudRemoteConfigType.RealtimeDatabase:
            {
                var database  = CloudDatabaseFactory.Create(CloudDatabaseConfigFactory.CreateFirebaseDatabaseConfig());
                var exception = default(Exception);
                var root      = "config";
                var dev       = "development";
                var prod      = "release";
                var path      = root;
                path += string.Format("/{0}", _devMode? dev : prod);

                    #if UNITY_EDITOR
                //Add Default data
                (_reference, exception) = await database.Connect(CloudDatabaseOptionsFactory.CreateFirebaseDatabaseOptions(root));

                var isEmpty = _reference.IsNullOrEmpty();
                isEmpty |= (!_reference.IsNullOrEmpty() && _reference.data.ContainsKey(root));

                if (isEmpty)
                {
                    var data = new Dictionary <string, object>();
                    data[dev] = new Dictionary <string, object>
                    {
                        { "version", Application.version }
                    };
                    data[prod] = new Dictionary <string, object>
                    {
                        { "version", Application.version }
                    };

                    exception = await _reference.SetData(data);

                    _reference.Dispose();
                }
                    #endif

                (_reference, exception) = await database.Connect(CloudDatabaseOptionsFactory.CreateFirebaseDatabaseOptions(path));

                if (exception.IsNull())
                {
                    _fetched = true;
                }

                break;
            }
                #endif

                #if FIREBASE_REMOTE_CONFIG
            case FirebaseCloudRemoteConfigType.RemoteConfig: {
                FirebaseRemoteConfig.Settings = new ConfigSettings()
                {
                    IsDeveloperMode = _devMode
                };
                break;
            }
                #endif
            }
        }