Unity IOS с помощью https не может сделать выноску покоя - PullRequest
0 голосов
/ 31 мая 2018

Я могу заставить 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
        }
    }
}

1 Ответ

0 голосов
/ 01 июня 2018

Я понял это.Проблема заключалась в том, что URL содержал знак%, и IOS, очевидно, не может справиться с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...