Why does network status change before I call StartNotifier?
This happens if "Auto Start Notifier" is enabled in Essential Kit Settings. The plugin automatically begins monitoring on app launch. To use manual control:
Open Essential Kit Settings (Services tab)
Find Network Services configuration
Disable "Auto Start Notifier"
Call StartNotifier() manually when needed
How do I monitor a specific server or backend?
Configure the host address in Essential Kit Settings:
Open Essential Kit Settings → Services → Network Services
Set Host Address (IPv4 or IPv6) to your server URL or IP
Subscribe to OnHostReachabilityChange event
Call StartNotifier()
Can I change the host address at runtime?
Yes, use manual initialization to set a dynamic host address:
This is useful for region-specific servers or environment switching (dev/staging/production).
Events fire too frequently during network transitions. How do I handle this?
Implement debouncing to ignore rapid status changes during network handoffs (WiFi to cellular):
How do I stop events from firing when the app is backgrounded?
Stop monitoring when the app goes to background to save battery:
Does Network Services work in Unity Editor?
Yes, it uses your development machine's actual network connection. Test by:
Toggling WiFi/ethernet on your computer
Changing firewall settings
Using network simulation tools (Charles Proxy, Fiddler)
However, always test on physical devices before release to verify mobile-specific scenarios (cellular handoff, weak signal, etc.).
What's the difference between IsInternetActive and IsHostReachable?
IsInternetActive: General internet connectivity (WiFi, cellular, any network)
IsHostReachable: Specific server/host configured in settings is reachable
Use cases:
IsInternetActive: "No internet" error messages, disable all online features
IsHostReachable: "Server maintenance" messages, disable server-dependent features only
Example:
How much battery does continuous monitoring consume?
Continuous monitoring has minimal battery impact (< 1% over several hours) due to efficient platform APIs. However:
Best Practice: Stop monitoring when not needed (menu screens, single-player modes)
Polling Interval: Adjust "Time Gap Between Polling" in settings (default 5 seconds)
Auto-Start: Disable if you don't need monitoring from app launch
Can I test offline functionality in Unity Editor?
Yes, disconnect your development machine's network to simulate offline scenarios. For more realistic testing:
Use Device Simulator package to test different network conditions
Test on physical devices with airplane mode, WiFi toggle, weak signal areas
Use network conditioning tools (Xcode Network Link Conditioner, Android emulator throttling)
How do I handle queued actions when connectivity returns?
Implement an action queue system:
Where can I confirm plugin behavior versus my implementation?
Run Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/NetworkServicesDemo.unity. If the sample works but your implementation doesn't:
Compare event registration timing (before vs after StartNotifier)
void OnHostReachabilityChange(NetworkServicesHostReachabilityStatusChangeResult result)
{
if (result.IsReachable)
{
Debug.Log("Backend server is online");
}
else
{
Debug.Log("Backend server is offline or unreachable");
}
}
void ConfigureForRegion(string serverURL)
{
var settings = new NetworkServicesUnitySettings(
isEnabled: true,
hostAddress: new Address(ipv4: serverURL),
autoStartNotifier: false);
NetworkServices.Initialize(settings);
NetworkServices.StartNotifier();
}
void CheckNetworkStatus()
{
if (!NetworkServices.IsInternetActive)
{
Debug.Log("Show dialog: No internet connection");
}
else if (!NetworkServices.IsHostReachable)
{
Debug.Log("Show dialog: Server temporarily unavailable");
}
}
private Queue<Action> pendingNetworkActions = new Queue<Action>();
public void QueueNetworkAction(Action action)
{
if (NetworkServices.IsInternetActive)
{
action.Invoke();
}
else
{
pendingNetworkActions.Enqueue(action);
Debug.Log($"Queued action - {pendingNetworkActions.Count} pending");
}
}
void OnInternetConnectivityChange(NetworkServicesInternetConnectivityStatusChangeResult result)
{
if (result.IsConnected)
{
while (pendingNetworkActions.Count > 0)
{
pendingNetworkActions.Dequeue().Invoke();
}
}
}