# 문제 해결하기

Source: https://docs.buzzvil.com/docs/buzzbenefit-ios/v6/troubleshooting
Platform: iOS
SDK major version: v6
Language: Korean (ko)

## 오류 코드가 나타납니다

BuzzvilSDK 메소드 호출 시 오류가 발생하면 `onFailure` 콜백으로 `Error`가 전달됩니다. 아래의 오류 코드 표를 참고하여 문제의 원인을 파악하고 오류를 해결할 수 있습니다.

> ✏️  **참고**\
> Buzzvil SDK에서 발생하는 오류의 도메인은 `BuzzErrorDomain`입니다.

| 오류 코드                     | 원인                                                                                                         | 해결 방법                                  |
| ------------------------- | ---------------------------------------------------------------------------------------------------------- | -------------------------------------- |
| `serverError`             | 버즈빌 서버에서 오류가 발생했습니다.                                                                                       | 버즈빌 담당자에게 오류 코드를 전달하세요.                |
| `clientError`             | 요청이 요구 사항을 충족하지 않았습니다. (예: 사용자 로그인 전에 광고 요청을 시도함)                                                          | 요청의 인자로 올바른 값을 전달하는지 확인하세요.            |
| `connectionTimeout`       | 네트워크 요청이 제한된 시간을 초과했습니다.                                                                                   | 네트워크 연결 상태를 확인하세요.                     |
| `emptyResponse`           | 네트워크 응답이 비어 있습니다. (예: 광고 요청에 성공했지만 응답으로 받은 광고의 개수가 '0'임)                                                   | 버즈빌 담당자에게 오류 코드를 전달하세요.                |
| `waitingForResponse`      | 베네핏허브 지면에서 광고의 프리로드(preload) 요청을 처리 중일 때 프리로드를 다시 요청하면 발생할 수 있는 오류입니다. 이 오류 코드가 발생하더라도 광고 할당은 정상적으로 처리됩니다. | 프리로드를 중복으로 요청하지 않았는지 확인하세요.            |
| `agePolicy`               | 사용자의 나이가 플랫폼 정책상 광고를 받을 수 있는 나이보다 어립니다.                                                                    | 로그인 시 나이를 15세 이상으로 설정해 주세요.            |
| `privacyPolicyNotGranted` | 사용자가 개인정보 처리보호방침에 동의하지 않았습니다.                                                                              | 광고를 요청하기 전에 개인정보 처리보호방침에 동의하였는지 확인하세요. |
| `unknown`                 | 식별이 불가능한 오류입니다.                                                                                            | SDK 연동과 앱 빌드 과정에서 오류가 없었는지 점검해 보세요.    |

다음은 네이티브 광고 요청 시 오류를 처리하는 예시입니다.

**Swift**

```swift
let native = BuzzNative(unitId: "YOUR_NATIVE_UNIT_ID")

native.load(
  onSuccess: { nativeAd in
    // 할당된 광고가 있으면 호출됩니다.
  },
  onFailure: { error in
    guard let error = error as? BuzzError else {
      // BuzzErrorDomain에 속하지 않는 오류를 처리합니다.
      return
    }

    switch error {
      case .serverError:
        print("server error")
      case .clientError:
        print("client error")
      case .connectionTimeout:
        print("connection timeout")
      case .emptyResponse:
        print("empty response")
      case .waitingForResponse:
        print("waiting for response")
      case .agePolicy:
        print("age policy")
      case .privacyPolicyNotGranted:
        print("privacy policy not granted")
      case .unknown:
        print("unknown error")
      @unknown default:
        break
    }
  }
)
```

**Objective-C**

```objectivec
BuzzNative *native = [[BuzzNative alloc] initWithUnitId:@"YOUR_NATIVE_UNIT_ID"];
[native loadWithOnSuccess:^(BuzzNativeAd * _Nonnull nativeAd) {
  // 할당된 광고가 있으면 호출됩니다.
} onFailure:^(NSError * _Nonnull error) {
  if ([error.domain isEqualToString:BuzzErrorDomain]) {
    switch (error.code) {
      case BuzzErrorCodeServerError:
        NSLog(@"server error");
        break;
      case BuzzErrorCodeClientError:
        NSLog(@"client error");
        break;
      case BuzzErrorCodeConnectionTimeout:
        NSLog(@"connection timeout");
        break;
      case BuzzErrorCodeEmptyResponse:
        NSLog(@"empty response");
        break; 
      case BuzzErrorCodeWaitingForResponse:
        NSLog(@"waiting for response");
        break;
      case BuzzErrorCodeAgePolicy:
        NSLog(@"age policy");
        break;
      case BuzzErrorCodePrivacyPolicyNotGranted:
        NSLog(@"privacy policy not granted");
        break;
      case BuzzErrorCodeUnknown:
        NSLog(@"unknown error");
        break;
      default:
        break;
    }
  } else {
    // BuzzErrorDomain에 속하지 않는 오류를 처리합니다.
  }
}];
```
