【发布时间】:2019-12-20 12:05:28
【问题描述】:
我在 Xamarin 中有一个多平台应用程序,它出于某些目的连接到互联网(使用手机的蜂窝网络),然后出于其他目的与本地 WIFI 网络(没有互联网访问权限)通信。我想从用户那里无缝地进行这个网络切换(不需要用户交互)。
对于我的应用程序的 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 值映射到它的数字。所以我不得不手动设置枚举值,现在切换(即多路径 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();
}
【问题讨论】:
-
"用本机编程" :/
-
嗨@Fattie 我刚刚更新了工作代码。现在一切都很好。
-
我很高兴听到这个消息,伙计!
标签: ios xamarin networking tcp wifi