У меня есть приложение Xamarin, которое в основном подключается к локальному WIFI-маршрутизатору (без доступа к Интернету) для связи с некоторыми локальными аппаратными устройствами. А для некоторых функций приложение использует NSUrlSessionMultipathServiceType.Handover (мобильная сотовая сеть) для подключения к интернет-API. Все это прекрасно работает, используя приведенный ниже код:
/// <summary>
/// Downloads file from dropbox
/// </summary>
/// <param name="filepath"></param>
/// <returns></returns>
public Task<string> GetFile(string filepath)
{
TaskCompletionSource<string> tcs = new TaskCompletionSource<string>();
NSUrl url = NSUrl.FromString(AppConfig.DropboxFileDownloadBaseUrl + AppConfig.DropboxFileDownloadEndpointUrl);
try
{
NSUrlRequest req = new NSUrlRequest(url);
var BearerToken = "Bearer " + AppConfig.DropboxAccessToken;
var DropboxPathHeader = "{\"path\":\"" + filepath + "\"}";
if (!string.IsNullOrEmpty(BearerToken))
{
NSMutableUrlRequest mutableRequest = new NSMutableUrlRequest(url);
try
{
NSMutableDictionary dictionary = new NSMutableDictionary();
dictionary.Add(new NSString("Authorization"), new NSString(BearerToken));
dictionary.Add(new NSString("Dropbox-API-Arg"), new NSString(DropboxPathHeader));
mutableRequest.Headers = dictionary;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
mutableRequest.HttpMethod = "POST";
req = (NSUrlRequest)mutableRequest.Copy();
}
NSUrlSession session = null;
NSUrlSessionConfiguration myConfig = NSUrlSessionConfiguration.DefaultSessionConfiguration;
myConfig.MultipathServiceType = NSUrlSessionMultipathServiceType.Handover;
session = NSUrlSession.FromConfiguration(myConfig);
NSUrlSessionTask task = session.CreateDataTask(req, (data, response, error) =>
{
if (response is NSHttpUrlResponse)
{
var objNSHttpUrlResponse = response as NSHttpUrlResponse;
Console.WriteLine(objNSHttpUrlResponse.StatusCode);
if (objNSHttpUrlResponse.StatusCode == 200)
{
//Console.WriteLine(data);
byte[] dataBytes = new byte[data.Length];
Marshal.Copy(data.Bytes, dataBytes, 0, Convert.ToInt32(data.Length));
string enc_json = Encoding.Unicode.GetString(dataBytes);
//tell the TaskCompletionSource that we are done here:
tcs.TrySetResult(enc_json);
}
else
{
//tell the TaskCompletionSource that we are done here:
tcs.TrySetResult(null);
}
}
else
{
//tell the TaskCompletionSource that we are done here:
tcs.TrySetResult(null);
}
});
task.Resume();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
//tell the TaskCompletionSource that we are done here:
tcs.TrySetResult(null);
}
return tcs.Task;
}
Но теперь у меня есть требование для аутентификации пользователей с помощью Dropbox OAuth API с использованием SFSafariViewController. Я знаю, как использовать SFSafariViewController, когда я нахожусь в Wi-Fi WIFI или сотовой сети.
Но я не могу найти способ автоматически переключиться на сотовую сеть iPhone, когда iPhone подключен к «без интернета» WIFI роутер, когда яхотите открыть какой-нибудь URL-адрес OAuth (пример URL-адреса OAuth ниже) или любой URL-адрес (например, https://www.google.com) с использованием SFSafariViewController.
OAuth URL: https://www.dropbox.com/oauth2/authorize?client_id=DROPBOX_KEY&response_type=code&redirect_uri=REDIRECT_URL
Пожалуйста, сообщите. Спасибо.