# User Reporting 구성

> Customize user reports with fields, metadata, attachments, and metrics to match your game's feedback needs.

User Reporting의 기본 설정은 일반적인 사용에 적합하지만 프로젝트가 발전함에 따라 필요에 맞게 변경해야 할 수도 있습니다. 애플리케이션에 어울리는 UI를 직접 만들어 커스텀 필드를 도입하거나 사용자 리포트 양식의 외관을 변경할 수 있습니다. 패키지에서 제공하는 샘플은 기능적이지만 단지 출발점일 뿐입니다.

사용자 리포트는 메타데이터, 이벤트, 샘플링된 지표, 스크린샷, 첨부 파일 등 유용한 정보를 포함합니다. 예를 들어 사용자의 게임 세이브 파일을 리포트에 첨부하거나, 플레이어가 특정 행동을 할 때마다 이벤트를 로깅할 수 있습니다. 또한 성능 소모가 큰 게임플레이 상황에서 성능 지표를 샘플링할 수도 있습니다.

API를 사용하여 리포트에서 각 데이터 유형의 최댓값을 구성하십시오. **UserReportExample** 파일(Unity 프로젝트로 임포트한 샘플에 있음)은 리포트에 데이터를 추가하는 다양한 수단을 보여 줍니다.

예를 들어 다음 설정을 커스터마이즈하여 리포트에서 특정 데이터 유형의 최댓값을 제한할 수 있습니다.

* `FramesPerMeasure`: 측정값은 지표의 수집된 각 샘플에서 처리하는 프레임 세트입니다. 기본 측정값 길이는 60프레임입니다.
* `MaximumMeasureCount`: 측정값은 지표 샘플에서 처리하는 프레임 세트이며, 리포트의 측정 최댓값을 계산합니다. 기본 측정값은 300입니다.
* `MaximumEventCount`: 이 제한은 리포트에 포함되는 이벤트 수에 적용됩니다. 기본값은 100입니다.
* `MaximumScreenshotCount`: 리포트에 첨부 가능한 스크린샷의 최대 개수입니다. 기본값은 10입니다.
* `MetricsGatheringMode`: 지표 수집 모드를 나타냅니다. 초당 프레임(Graphics.FramesPerSecond) 등 일부 지표는 기본 구성인 자동 모드를 사용하여 리포트에 포함될 수 있습니다. 수동 모드는 리포트에 커스텀 지표만 포함하며, 비활성화 모드는 샘플링된 지표를 리포트로 전혀 전송되지 않습니다.

이러한 설정에 제한은 없지만 높은 값을 설정하면 수집된 데이터가 리포트의 크기에 영향을 미칩니다. 특히 큰 고해상도 스크린샷은 리포트의 크기를 대폭 늘립니다.

사용자 리포트 설정을 구성하려면 `UserReportingService.Instance..Configure(UserReportingClientConfiguration configuration)` 메서드를 호출합니다.

```cs
var customConfig = new UserReportingClientConfiguration(5, 5, 100, 100, MetricsGatheringMode.Automatic);
UserReportingService.Instance.UserReporting.Configure(customConfig);
```

## 리포트 생성 및 전송##create-and-sending-reports

리포트를 생성하려면 `UserReportingService.Instance.UserReporting.CreateNewUserReport();`를 호출합니다.

리포트를 전송하려면 `UserReportingService.Instance.SendUserReport(Action<float> progressUpdate, Action<bool> result)`를 호출합니다.

행동 파라미터를 가장 잘 이해하려면 샘플 예시를 참고하십시오. 리포트 전송은 필수는 아니지만 권장 사항입니다.

## 메타데이터 추가##add-metadata

메타데이터를 사용하여 게임에 대한 특정 데이터를 수집합니다. 이 데이터는 사용자 리포트에 기본적으로 포함된 디바이스 메타데이터와 함께 나타납니다.

커스텀 메타데이터를 추가하려면 `UserReportingService.Instance.AddMetadata(string name, string value)` 메서드를 호출합니다.

메타데이터를 추가하는 것은 성능에 거의 영향을 미치지 않습니다.

## 이벤트 로깅##log-events

커스텀 이벤트를 로깅하려면 `UserReportingService.Instance.LogEvent(UserReportEventLevel level, string message)` 메서드를 호출합니다.

이벤트를 로깅하는 것은 성능에 거의 영향을 미치지 않습니다.

## 샘플링 지표 추가##add-sampling-metrics

커스텀 샘플링 지표를 추가하려면 `UserReportingService.Instance.SampleMetric(string name, double value)` 메서드를 호출합니다.

`SampleMetric` 메서드는 성능에 거의 영향을 미치지 않고 매 프레임마다 호출하도록 디자인되었습니다. 그러나 위 메서드를 매 프레임마다 호출하면 각각의 이름이 리포트에 상당한 크기를 더할 수 있습니다.

## 스크린샷 추가##add-screenshots

리포트에 스크린샷을 추가하려면 `UserReportingService.Instance.TakeScreenshot(int maximumWidth, int maximumHeight)` 메서드를 호출합니다. 스크린샷은 대시보드에서 리포트의 일부로 표시됩니다.

필요에 따라 `UserReportingService.Instance.TakeScreenshot(int maximumWidth, int maximumHeight, object source)`를 사용하여 Camera 또는 RenderTexture 등 스크린샷의 소스를 지정할 수 있습니다.

이미지는 소스와 상관없이 maximumWidth 및 maximumHeight 파라미터에 정의된 크기에 맞을 때까지 축소됩니다.

최대 너비와 최대 높이를 선택하면 사용자 리포트는 10MB 이하여야 합니다. 마지막으로 촬영된 스크린샷이 대시보드에서 리포트의 썸네일로 사용됩니다.

**참고**: 스크린샷 촬영은 성능에 영향을 미칩니다. 사용자가 영향을 받지 않게 하려면 플레이어가 대기 상태(idle)일 때와 같이 성능이 중요하지 않은 경우에 스크린샷을 촬영하십시오.

## 첨부 파일 추가##add-attachments

동영상, 씬 그래프 등 첨부 파일을 추가합니다.

첨부 파일은 Base64 오브젝트로 인코딩됩니다.

`UserReportingService.Instance.AddAttachmentToReport(string title, string filename, byte[] data)`를 사용하여 첨부 파일을 추가합니다.

## 리포트 차원 정렬##organize-report-dimensions

차원을 사용하여 Unity Dashboard에서 사용자 리포트를 필터링합니다. 리포트를 전송하기 전에 차원 프로퍼티에 항목을 추가하여 차원 및 지표를 추가할 수 있습니다. 각 차원 또는 지표에는 이름과 값이 있습니다. 다음을 호출하여 리포트에 새 차원을 추가할 수 있습니다.

`UserReportingService.Instance.AddDimensionValue(string dimension, string value);`

예를 들어 다음 차원이 있는 3개의 리포트를 살펴보겠습니다.

| **이름**           | **값**           |
| ---------------- | --------------- |
| Platform         | Android         |
| Version          | 2               |
| Category         | Graphics        |
| Platform         | WindowsPlayer   |
| Version          | 1               |
| Language         | English         |
| Platform         | WindowsPlayer   |
| Version          | 1               |
| Platform.Version | WindowsPlayer.1 |

대시보드에서 다음 필터링 옵션을 참고합니다.

| **차원 이름**        | **차원 값**         |
| ---------------- | ---------------- |
| Category         | Graphics         |
| Language         | English          |
| Platform         | Android          |
| Platform         | WindowsPlayer    |
| Platform.Version | WindowsPlayer: 1 |
| Version          | 1                |
| Version          | 2                |

리포트마다 다른 차원을 추가할 수도 있습니다. 예를 들어 현지화된 리포트에 SystemLanguage를 차원으로 추가할 수 있습니다.

사용자가 리포트 요약에 단일 해시태그를 추가할 수도 있습니다. 이 해시태그는 차원으로 나타납니다.

예를 들어 ‘바닥을 뚫고 떨어졌어요 #FloorBug’는 다음과 같습니다.

| **차원 이름** | **차원 값** |
| --------- | -------- |
| Hash Tag  | FloorBug |
