Я могу заставить https получить вызов без проблем на Android и редакторе Unity, но он не работает на IOS.Обратите внимание, что URL использует HTTPS, а не HTTP.При попытке подключиться к xcode я получаю следующую ошибку.
You are using download over http. Currently Unity adds
NSAllowsArbitraryLoads to Info.plist to simplify transition, but it will be
removed soon. Please consider updating to https.
NSURLConnection finished with error - code -1002
Из того, что я прочитал, похоже, что plist нужно отредактировать, чтобы разрешить это соединение, но я не уверен, как это сделать.Мой код редактирования plist в настоящее время выглядит следующим образом:
[PostProcessBuild]
static void OnPostprocessBuild(BuildTarget buildTarget, string path)
{
// Read plist
var plistPath = Path.Combine(path, "Info.plist");
var plist = new PlistDocument();
plist.ReadFromFile(plistPath);
// Update value
PlistElementDict rootDict = plist.root;
rootDict.SetString("NSPhotoLibraryAddUsageDescription", "Used for saving high score screenshots");
rootDict.SetBoolean("NSIncludesSubdomains", true);
rootDict.SetBoolean("NSTemporaryExceptionAllowsInsecureHTTPLoads", true);
rootDict.SetString("NSTemporaryExceptionMinimumTLSVersion", "TLSv1.1");
// Write plist
File.WriteAllText(plistPath, plist.WriteToString());
}
Верхний ответ на Как я могу добавить NSAppTransportSecurity в мой файл info.plist? дает решение для редактирования plist, но я не уверенесли я делаю это правильно через единство.Я также попытался вручную отредактировать plist в xcode, и он все еще не работал.Я также не уверен, что это даже проблема, поэтому любые другие предложения будут оценены.
РЕДАКТИРОВАТЬ: Использование xcode версии 9.4 и Unity version 2018.1.2f1 personal.код для выноски (один из них) ниже:
IEnumerator getHighscores() {
loadingObject.SetActive(true);
string username = GameManager.loggedInUser;
using (UnityWebRequest request = UnityWebRequest.Get(Constants.uriBase + "/scores?username=" + username + "&apiKey=" + Constants.apiKey)) {
yield return request.SendWebRequest();
loadingObject.SetActive(false);
if (request.isNetworkError) {
ErrorMessage.text = "Unable to connect"; //THIS IS THE OUTCOME OF THE IOS CALLOUT
ErrorMessage.enabled = true;
} else if( request.isHttpError) {
if(request.responseCode == 406) {
string modifiedResponse = request.downloadHandler.text.Replace("\"", "");
ErrorMessage.text = modifiedResponse;
ErrorMessage.enabled = true;
} else {
ErrorMessage.text = "Unknown Error";
ErrorMessage.enabled = true;
}
} else {
ErrorMessage.enabled = false;
string jsonResponse = request.downloadHandler.text;
//process successful response here
}
}
}