[Unity] I tried to make a native plug-in UniNWPathMonitor using NWPathMonitor
Unity has a network connection check function ʻApplication.internetReachability`, but I dared to make a native Swift plugin using ** NWPathMonitor **.
Use NWPath Monitor, which is simpler than Reachability, to detect network connection status on iOS. –Qiita
For the processing around Swift, I referred to the article here.
Swift side
UniNWPathMonitor.swift
monitor.pathUpdateHandler = { path in
if path.status == .satisfied {
// connected
self._onCallback("1")
} else {
// No connected
self._onCallback("0")
}
}
If you are connected using the NWPathMonitor instance (monitor), " 1 "
will be returned, and if you are disconnected, " 0 "
will be returned with a preset callback.
Objective-C ++ side
API_AVAILABLE(ios(12.0))
UniNWPathMonitor *_monitor;
Since iOS12 or later is required to use NWPathMonitor this time, declare that iOS12 or later is required with ʻAPI_AVAILABLE`.
UniNWPathMonitorBridge.mm
[_monitor setCallbackOnCallback:^(NSString * value) {
UnitySendMessage("UniNWPathMonitor", "Noti", [value UTF8String]);
}];
Set a callback for UniNWPathMonitor.
When the callback is returned, use ʻUnitySendMessage` to return the connection information to the Unity side.
For the description of Objective-C ++, please refer to the article here that I wrote earlier.
[Unity] Shortest implementation to run Swift from C # in recent Unity-Qiita
Unity side
This is how it is used on the Unity side.
Just run StartMonitor on UniNWPathMonitor and set the callback.
Sample.cs
void Start()
{
UniNWPathMonitor.StartMonitor();
UniNWPathMonitor.onChangeNetworkStatus += status =>
{
if (status == UniNWPathMonitor.NetworkStatus.satisfied)
//connecting
else
//Cutting
};
}
Click here for what I actually made. I turn Wifi on and off and receive callbacks on the Unity side. There seems to be a slight lag until the callback is returned to Unity after switching.
Finally
As I said at the beginning, this plugin is not required for Buchake Unity because ** Application.internetReachability ** exists. * I made it because I wanted to make it.
For me, I learned a lot by actually making it. I’m glad I had the opportunity to learn about Swift, which I’m currently studying, such as the Swift callback grammar that came out for the first time and how to make iOS 12 or later mandatory.
All sources are uploaded below, so please refer to them.
https://github.com/baobao/UniNWPathMonitor
Development environment
- Unity2019.4.4f1
- Xcode11.6
- iPhone6S iOS13.6