Я могу сделать выноску https без проблем на android и редакторе единства, но он не работает на 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
Из того, что я прочитал, похоже, что список необходимо отредактировать, чтобы разрешить это соединение, но я не уверен, как это сделать. Мой код редактирования списка в настоящее время выглядит так:
[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? дает решение для редактирования списка, но я не уверен, правильно ли я делаю это через единство. Я также попытался вручную отредактировать список в xcode, но он все еще не работал. Я также не уверен, что это вообще проблема, поэтому любые другие предложения будут оценены.
Обновлено: использование xcode версии 9.4 и версии Unity 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
}
}
}
Я разобрался в этой проблеме. Проблема заключалась в том, что в строке apiKey был знак%, и iOS явно не справлялась с этим, но все остальное может. Это был потраченный впустую день. Единственная другая проблема, с которой я столкнулся, - это то, что реклама Unity больше не работает на iOS. Есть догадки, почему?
Думаю, я тоже это понял. Похоже, что Unity сменила проект на другой. Не уверен, почему, но я буду разбираться в этом.





Я понял это. Проблема заключалась в том, что URL-адрес содержал знак%, и iOS, по-видимому, не может с этим справиться.
Я добавил код для одной из выноски. их много, но я тестировал именно этот. Также добавлены версия Unity и версия xcode. Этот код отлично работает в android. Константы.URIBase - это базовый домен, который похож на api.game1.mydomain.net.