Unity/Unity 이슈

[Addressable] JSON parse error: Invalid value.

lipnus 2022. 2. 27. 17:31
반응형

Problem

ArgumentException: JSON parse error: Invalid value.

Bundle사이즈를 체크하는 과정에서 위 에러가 발생. (이 경우는 BOM관련 문제는 아님.)

 

    public IEnumerator CheckBundle()
    {
        AsyncOperationHandle<long> downloadSize = Addressables.GetDownloadSizeAsync(assetLabel.labelString);
        yield return downloadSize;

        if (downloadSize.Result > 0)
        {
            DownloadBundle();
        }
        else {
            LoadLoginScene();
        }
    }

 

 

Solution

addressable Package안에 들어있는 코드임

TextDataProvider.cs 

private void RequestOperation_completed(AsyncOperation op)
            {
                if (m_Complete)
                    return;

                var webOp = op as UnityWebRequestAsyncOperation;
                string textResult = null;
                Exception exception = null;
                if (webOp != null)
                {
                    var webReq = webOp.webRequest;
                    if (!UnityWebRequestUtilities.RequestHasErrors(webReq, out UnityWebRequestResult uwrResult)) {
                        
                        Debug.Log($"#### url: {webReq.url}");
                        Debug.Log($"#### text: {webReq.downloadHandler.text}");

                        // textResult = System.Text.Encoding.UTF8.GetString(webReq.downloadHandler.data, 3, webReq.downloadHandler.data.Length - 3);
                        
                        textResult = webReq.downloadHandler.text;
                    }
                    else
                        exception = new RemoteProviderException($"{nameof(TextDataProvider)} : unable to load from url : {webReq.url}", m_PI.Location, uwrResult);
                }
                else
                {
                    exception = new RemoteProviderException(nameof(TextDataProvider) + " unable to load from unknown url", m_PI.Location);
                }

                CompleteOperation(textResult, exception);
            }

에러발생 부분을 코드를 따라가보면, 여기서 받는 데이터가 문제.

url로그를 찍어보면 bundle을 올린 구글 클라우드 경로가 뜬다.

 

첫번째로 catalog의 hash를 확인하고, 두번째로 catalog의 json확인. (실패 시 한번 더 시도)

 

로그찍어보면 webReq.downloadHandler.text 가 내용물 텍스트인데,

이상하게 text 내용이 HTML이다.

 

json이 들어와야 하는데 html이 오니까 당연히 파싱이 안되어서 에러 발생.

<!DOCTYPE html>
<html lang="ko">
  <head>
  <meta charset="utf-8">
  <meta content="width=300, initial-scale=1" name="viewport">
  <meta name="google-site-verification" content="LrdTUW9psUAMbh4Ia074-BPEVmcpBxF6Gwf0MSgQXZs">
  <title>로그인 - Google 계정</title>
<style>
  html, body {
  font-family: Arial, sans-serif;
  background: #fff;
  margin: 0;
  padding: 0;
  border: 0;
  position: absolute;

// ...

번들을 Google Cloud에 올렸는데, 접속 시 로그인을 하라는 페이지인듯.

전체공개 URL로 변경한 다음 재시도 하니까 정상동작.

 

원래는 HTML이 아니라 이렇게 catalog의 json이 받아져야 정상.

 

 

반응형