我在Xamarin中有一个多平台应用程序,出于某些目的,它可以连接到Internet(使用Phone的蜂窝网络),然后出于其他目的,可以与本地WIFI网络(不使用Internet访问)进行通信。我想与用户无缝地进行此网络切换(无需用户交互)。
对于我的应用程序的Android部分,我成功使用以下方法实现了这一点:
NetworkRequest.Builder request = new NetworkRequest.Builder();
request.AddTransportType(TransportType.Cellular);
然后再这样:
ConnectivityManager.BindProcessToNetwork(network)
我在这里提供完整的解释: How to connect to local network first instead of internet in C# Xamarin Android app?
但是我无法理解如何在应用程序中为iOS实现相同的功能。我已阅读以下链接:
https://developer.apple.com/documentation/foundation/urlsessionconfiguration/multipathservicetype
并为我的应用启用了多路径TCP授权。
有人可以在整个iOS应用程序生命周期中将NSUrlSession对象设置为NSUrlSessionMultipathServiceType.Handover的方式/位置方面指导我正确的方向。
我知道我无法提供很多信息,但是在正确方向上的任何帮助都将受到赞赏。
更新: 根据@SushiHangover的答案添加以下代码后
var config = NSUrlSessionConfiguration.DefaultSessionConfiguration;
config.MultipathServiceType = NSUrlSessionMultipathServiceType.Handover;
最终工作更新: 经过大量尝试,我发现由于某种原因,Xamarin没有正确将Enum值映射到其编号。所以我不得不手动设置Enum值,现在切换(即多路径TCP)工作正常。更新的代码:
public void GetDataFromInternet(string strURL)
{
NSUrl url = new NSUrl(strURL);
NSUrlRequest request = new NSUrlRequest(url);
NSUrlSession session = null;
NSUrlSessionConfiguration config = NSUrlSessionConfiguration.DefaultSessionConfiguration;
//config.MultipathServiceType = NSUrlSessionMultipathServiceType.Handover; //for some reason this does not work!!
config.MultipathServiceType = (NSUrlSessionMultipathServiceType)2; //but this works!!
session = NSUrlSession.FromConfiguration(config);
NSUrlSessionTask task = session.CreateDataTask(request, (data, response, error) => {
Console.WriteLine(data);
});
task.Resume();
}
答案 0 :(得分:1)
在整个iOS应用程序生命周期中,如何/在何处将NSUrlSession对象设置为NSUrlSessionMultipathServiceType.Handover。
您可以通过DefaultSessionConfiguration
更改默认的NSUrl会话:
var config = NSUrlSessionConfiguration.DefaultSessionConfiguration;
config.MultipathServiceType = NSUrlSessionMultipathServiceType.Handover;
注意:假设您希望在应用程序生命周期中尽早进行此操作,即在AppDelegate.FinishedLaunching
覆盖中进行操作。
P.S。这与您在Android上执行的操作不同,并且确实要求您的服务器(很有可能是服务器前面的路由器)启用了多路径TCP,才能处理传入路径之间的自动切换< / p>