# APS 연동 (legacy)

> APS 계정을 구성하고 아이언소스와의 통합을 설정하여 Amazon 퍼블리셔 서비스 (APS)를 Unity 레벨플레이와 통합할 수 있습니다.

> **Important:**
>
> 다음 기술 자료는 Unity가 개발하거나, 소유하거나, 운영하지 않는 제품 또는 서비스('타사 제품')에 관한 내용입니다.
> 이 정보는 오래되었거나 불완전할 수 있으며 편의를 위해 제공됩니다.
> 타사 제품을 사용하는 경우 해당 제품의 약관이 적용됩니다.
> Unity는 이러한 제품에 대해 어떠한 보증도 하지 않으며, 타사 제공자의 콘텐츠, 광고 또는 머티리얼과 관련된 문제를 포함하여 제품 사용으로 인한 손해나 손실에 대해서도 책임지지 않습니다.

> **Note:**
>
> 이 가이드는 레거시 레벨플레이 SDK 버전(8.0.0 이상)에 적용됩니다. 버전 9.0.0 이상에 대한 최신 기술 자료는 [APS 통합](aps-v9)을 참조하십시오.

> **Note:**
>
> 이 Mediation 네트워크의 어댑터 변경 기록을 보려면 [Android용 Mediation 네트워크](/grow/levelplay/sdk/android/mediation-networks.md.md#integrate-network-adapters)를 참조하십시오.

## 필수 조건

Amazon 퍼블리셔 서비스(APS)는 초대만 프로그램입니다. APS를 통합하려면 레벨플레이 SDK와 APS SDK를 모두 통합하고 초기화해야 합니다. 아래에 설명된 대로 전체 연동 플로를 수행하여 애플리케이션 APS 광고를 표시해야 합니다.

## 1단계. APS 계정 생성

1. 앱 계정을 설정하려면 APS에 도달률. APS 계정을 생성하려면 [APS 웹사이트](https://aps.amazon.com/aps/contact-us/)로 이동하여 \*\* 문의하기\*\*를 선택하고 요청을 엽니다.
2. APS 요청이 승인되면 APS에 가입하고 계정을 만드는 초대 링크가 표시됩니다.
3. 레벨플레이 APS를 설정하려면 위 단계를 완료해야 합니다. 

## 2단계. APS 네트워크에서 슬롯 설정

1. 앱 메뉴에서 올바른 애플리케이션을 선택하고 **설정**을 선택합니다.
2. 수익화 서비스 설정 메뉴로 **IronSource 레벨플레이**를 선택합니다.
3. 각 슬롯에 슬롯을 추가하고 정의합니다.
   1. Name
   2. 광고 크기
   3. 가격 지점 (자동/매뉴얼)
4. 모든 슬롯을 추가하고 자격 증명을 수집합니다.
   1. 앱 ID 가져오기
   2. 가격대 CSV 파일 다운로드

## 3단계. APS 네트워크 활성화

Ironsource 플랫폼 내에서 SDK 네트워크 설정에 액세스, 접근 레벨플레이 계정에 APS 파라미터를 설정.

1. 위에서 언급한 자격 증명을 보유한 후 레벨플레이 계정에 로그인하고 **수익화** > **설정** > **SDK** ****네트워크****&#xB85C; 이동합니다.
2. **사용 가능한 네트워크** 표에서 APS를 선택하고 **활성화**를 선택합니다.

![APS를 선택하고 활성화](/api/media?file=/grow/media/images/Screen-Shot-2021-12-30-at-8.45.52.png)를 선택합니다.

3. 광고 네트워크 목록에서 APS를 선택하고 **설정**을 선택합니다.

![APS를 선택하고 설정 을 선택합니다.](/api/media?file=/grow/media/images/Screen-Shot-2021-12-30-at-8.47.04.png)

4. APS 앱 ID를 입력하고 CSV 파일을 그대로 업로드합니다.

![앱 ID 입력 및 CSV 업로드](/api/media?file=/grow/media/images/Screen-Shot-2021-12-29-at-22.46.02.png)

## 4단계. 빌드 APS 어댑터 추가##step-4.-add-the-aps-adapter-to-your-build

### Gradle##gradle

1. 앱 모듈의 Gradle다음 Maven URL이 있는지 확인합니다.

   ```java
   repositories {
   	mavenCentral()
   }
   ```

2. 어댑터 Maven 이름을 앱 모듈의 Gradle추가합니다.
   ```java
   dependencies {
   implementation 'com.unity3d.ads-mediation:aps-adapter:4.3.17'
   implementation 'com.amazon.android:aps-sdk:11.0.0+'
   implementation 'com.iabtcf:iabtcf-decoder:2.0.10'
   }
   ```

## 5단계 AndroidManifest.xml 업데이트##step-5.-update-androidmanifest.xml

**매니페스트 사용 권한:**

```xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
```

**매니페스트 활동:**

```xml
<activity android:name="com.amazon.device.ads.DTBInterstitialActivity"/>
<activity android:name="com.amazon.device.ads.DTBAdActivity"/>
```

### ProGuard 사용자 전용##for-proguard-users-only

ProGuard를 APS 어댑터와 함께 사용하는 경우 다음 코드를 ProGuard 파일에 추가해야 합니다.

```java
-keep class com.amazon.device.ads.** { *; }
```

## 6단계. **Init APS SDK**##step-6.-**init-aps-sdk**

APS 네트워크를 사용하려면 APS 광고를 표시하려면 Ironsource 및 APS SDK를 모두 초기화해야 합니다. 

애플리케이션 열리자마자 그리고 레벨플레이 SDK를 초기화하기 전에 APS SDK를 초기화합니다. APS 설정 2단계에 정의된 APS 앱 ID를 사용합니다. 

```java
AdRegistration.getInstance(APS_APP_ID, this);
//Where 'this' is an activity context.
```

## 7단계 광고당 레벨플레이 Mediation 함께 APS 단가 정보를 공유합니다.##step-7.-share-aps-bid-info-with-levelplay-mediation-per-ad

각 광고를 로드하기 전에 APS API 호출 레벨플레이 SDK가 광고를 로드하는 데 필요한 로드 정보를 가져옵니다.

다음은 필수 단계입니다. 

1. 각 Ironsource 광고 유닛 로드 전에 APS 광고 요청을 로드합니다.  
2. SetNetworkData를 호출 APS 단가 정보를 Ironsource 공유합니다.
3. 레벨플레이 Mediation API를 사용하여 관련 광고 유닛을 로드합니다.

> **Note:**
>
> APS Android SDK 10.0.0 이상부터 **DTBAdRequest** 오브젝트 **DTBAdNetworkInfo**라는 새 파라미터 사용합니다. 다음 예시에서 구현 차이를 참고.

### 배너/MREC 광고 로드##load-banner/mrec-ads

1. 각 Ironsource 광고 유닛 로드 전에 APS 배너 광고 요청을 호출. 로드 광고 요청을 생성할 때 Slot UUID를 사용합니다.
   * APS Android SDK **10.0.0+**:

     ```java
     DTBAdNetworkInfo adNetworkInfo = new DTBAdNetworkInfo(DTBAdNetwork.UNITY_LEVELPLAY); 
     final DTBAdRequest loader = new DTBAdRequest(adNetworkInfo);
     loader.setSizes(new DTBAdSize(SLOT_WIDTH, SLOT_HEIGHT, "Your_Slot_UUID"));
     loader.loadAd(new DTBAdCallback());
     ```

   * APS Android SDK **10.0.0 미만**:

     ```java
     최종 DTBAdRequest 로더 = 새로운 DTBAdRequest();
     loader.setSizes(new DTBAdSize(SLOT_WIDTH, SLOT_HEIGHT, "Your_Slot_UUID"));
     loader.loadAd(new DTBAdCallback()); 
     ```

2. APS 광고가 성공적으로 로드되면 광고 데이터를 Ironsource 공유합니다. 여기에는 다음 파라미터가 포함되어야 합니다.

   1. 단가 정보: Amazon 광고 표시에 필요한 정보
   2. 가격대 인코딩: APS에서 반환된 낙찰 광고 가격
   3. UUID: 슬롯 고유 식별자
   4. 너비: 배너 너비
   5. 높이: 배너 높이

   ```java
   public void onSuccess(DTBAdResponse dtbAdResponse) {
       // Append the APS bid parameters to LevelPlay mediation to add APS to the next ad request 
       JSONObject apsDataJsonBN = new JSONObject();
       apsDataJsonBN.put("bidInfo", SDKUtilities.getBidInfo(dtbAdResponse));
       apsDataJsonBN.put("pricePointEncoded", SDKUtilities.getPricePoint(dtbAdResponse));
       apsDataJsonBN.put("uuid", slotUUID);
       apsDataJsonBN.put("width", dtbAdResponse.getDTBAds().get(0).getWidth());
       apsDataJsonBN.put("height", dtbAdResponse.getDTBAds().get(0).getHeight());

       // Define APS data per interstitial ad unit 
       JSONObject apsDataJson = new JSONObject(); 
       apsDataJson.put(IronSource.AD_UNIT.BANNER.toString(), apsDataJsonBN);
       IronSource.setNetworkData("APS", apsDataJson);
   }
   ```

   APS가 보여줄 광고 없음(no fill) 반환하면 레벨플레이 loadBanner()를 호출.

3. Ironsource 배너 광고를 로드합니다. 자세히 알아보기 [여기](/grow/levelplay/sdk/android/banner-integration.md).

> **Note:**
>
> Ironsource 자동 새로고침 메커니즘을 사용하는 경우 노출마다 APS 로드 광고를 호출 합니다.  그러면 APS 배너도 다음 경매에 참여할 수 있습니다. 이 로직을 유지하고 싶지 않은 경우 새로고침 메커니즘을 취소하고 이전 광고를 삭제한 후 각 광고를 수동으로 로드합니다.

### 인터스티셜 광고 로드##load-interstitial-ads

1. 각 Ironsource 광고 유닛 로드 전에 APS 인터스티셜 광고 요청 호출 로드 광고 요청을 생성할 때 Slot UUID를 사용합니다.
   * APS Android SDK **10.0.0+**:

     ```java
     DTBAdNetworkInfo adNetworkInfo = new DTBAdNetworkInfo(DTBAdNetwork.UNITY_LEVELPLAY); 
     final DTBAdRequest loader = new DTBAdRequest(adNetworkInfo);
     loader.setSizes(new DTBAdSize.DTBInterstitialAdSize(YOUR_INTERSTITIAL_UUID));
     loader.loadAd(new DTBAdCallback());
     ```

   * APS Android SDK **10.0.0 미만**:

     ```java
     최종 DTBAdRequest 로더 = 새로운 DTBAdRequest();
     loader.setSizes(new DTBAdSize.DTBInterstitialAdSize(YOUR_INTERSTITIAL_UUID));
     loader.loadAd(new DTBAdCallback());
     ```

2. 레벨플레이 APS 어댑터 4.3.3부터 APS 인터스티셜 광고 비디오 광고를 지원합니다. 인터스티셜 광고 비디오를 로드하려면 앱이 세로 모드인 경우 다음 메서드를 호출.

   * APS Android SDK **10.0.0+**:

     ```java
     DTBAdNetworkInfo adNetworkInfo = new DTBAdNetworkInfo(DTBAdNetwork.UNITY_LEVELPLAY); 
     final DTBAdRequest loader = new DTBAdRequest(adNetworkInfo);
     loader.setSizes(new DTBAdSize.DTBVideo(320, 480, YOUR_INTERSTITIAL_VIDEO_UUID)); 
     loader.loadAd(new DTBAdCallback());
     ```

   * APS Android SDK **10.0.0 미만**:

     ```java
     최종 DTBAdRequest 로더 = 새로운 DTBAdRequest();
     loader.setSizes(new DTBAdSize.DTBVideo(320, 480, YOUR_INTERSTITIAL_VIDEO_UUID));
     loader.loadAd(new DTBAdCallback());
     ```

   앱이 랜드스케이프 모드인 경우:

   * APS Android SDK **10.0.0+**:

     ```java
     DTBAdNetworkInfo adNetworkInfo = new DTBAdNetworkInfo(DTBAdNetwork.UNITY_LEVELPLAY); 
     final DTBAdRequest loader = new DTBAdRequest(adNetworkInfo);
     loader.setSizes(new DTBAdSize.DTBVideo(480, 320, YOUR_INTERSTITIAL_VIDEO_UUID));
     loader.loadAd(new DTBAdCallback());
     ```

   * APS Android SDK **10.0.0 미만**:

     ```java
     최종 DTBAdRequest 로더 = 새로운 DTBAdRequest();
     loader.setSizes(new DTBAdSize.DTBVideo(480, 320, YOUR_INTERSTITIAL_VIDEO_UUID));
     loader.loadAd(new DTBAdCallback());
     ```

3. APS 광고가 성공적으로 로드되면 광고 데이터를 Ironsource 공유합니다. 여기에는 다음 파라미터가 포함되어야 합니다.

   1. 단가 정보: Amazon 광고 표시에 필요한 정보
   2. 가격대 인코딩: APS에서 반환된 낙찰 광고 가격
   3. UUID: 슬롯 고유 식별자

   ```java
   public void onSuccess(DTBAdResponse dtbAdResponse) {
       // Append the APS bid parameters to LevelPlay mediation to add APS to the next ad request 
       JSONObject apsDataJsonIS = new JSONObject(); 
       apsDataJsonIS.put("bidInfo", SDKUtilities.getBidInfo(dtbAdResponse));
       apsDataJsonIS.put("pricePointEncoded", SDKUtilities.getPricePoint(dtbAdResponse));
       apsDataJsonIS.put("uuid", slotUUID);

       // Define APS data per interstitial ad unit 
       JSONObject apsDataJson = new JSONObject(); 
       apsDataJson.put(IronSource.AD_UNIT.INTERSTITIAL.toString(), apsDataJsonIS);
       IronSource.setNetworkData("APS", apsDataJson);
    }
   ```

   APS가 보여줄 광고 없음(no fill) 반환하면 레벨플레이 loadInterstitial()을 호출.

4. 로드 ironSource 인터스티셜 광고. 자세히 알아보기 [여기](/grow/levelplay/sdk/android/interstitial-integration.md).

### 보상형 광고##rewarded-ads

APS 통합은 앱에서 구현하는 보상형 광고 작업 모드에 따라 다릅니다. 

1. 매뉴얼 로딩 모드: APS와 연동하는 데 권장되는 설정입니다. 이렇게 하면 각 보상형 광고 로드 전에 APS 광고 요청을 호출 합니다.
2. 보상형 광고 기본 모드(자동): 보상형 광고 광고를 표시하기 위해 레벨플레이 기본 모드를 사용하는 경우, 레벨플레이 SDK를 초기화하기 전에 APS SDK를 초기화한 후 첫 번째 APS 광고를 로드해야 합니다. 또한 각 쇼 전에 다음 APS 로드 요청을 호출하여 다음 워터폴 요청에 영향을 줄 것을 권장합니다.

**보상형 광고 로드**

1. 각 Ironsource 광고 유닛 로드 전에(또는 자동 모드에서 쇼 전에) APS 보상형 광고 광고 요청을 호출. 로드 광고 요청을 생성할 때 Slot UUID를 사용합니다. 앱이 세로 모드인 경우 다음을 수행합니다.
   * APS Android SDK **10.0.0+**:

     ```java
     DTBAdNetworkInfo adNetworkInfo = new DTBAdNetworkInfo(DTBAdNetwork.UNITY_LEVELPLAY); 
     final DTBAdRequest loader = new DTBAdRequest(adNetworkInfo);
     loader.setSizes(new DTBAdSize.DTBVideo(320, 480, YOUR_REWARDED_VIDEO_UUID)); 
     loader.loadAd(new DTBAdCallback());
     ```

   * APS Android SDK **10.0.0 미만**:

     ```java
     최종 DTBAdRequest 로더 = 새로운 DTBAdRequest();
     loader.setSizes(new DTBAdSize.DTBVideo(320, 480, YOUR_REWARDED_VIDEO_UUID));
     loader.loadAd(new DTBAdCallback());
     ```

앱이 랜드스케이프 모드인 경우:

1. * APS Android SDK **10.0.0+**:

     ```java
     DTBAdNetworkInfo adNetworkInfo = new DTBAdNetworkInfo(DTBAdNetwork.UNITY_LEVELPLAY); 
     final DTBAdRequest loader = new DTBAdRequest(adNetworkInfo);
     loader.setSizes(new DTBAdSize.DTBVideo(480, 320, YOUR_REWARDED_VIDEO_UUID)); 
     loader.loadAd(new DTBAdCallback());
     ```

   * APS Android SDK **10.0.0 미만**:

     ```java
     최종 DTBAdRequest 로더 = 새로운 DTBAdRequest();
     loader.setSizes(new DTBAdSize.DTBVideo(480, 320, YOUR_REWARDED_VIDEO_UUID));
     loader.loadAd(new DTBAdCallback());
     ```

2. APS 광고가 성공적으로 로드되면 광고 데이터를 Ironsource 공유합니다. 여기에는 다음 파라미터가 포함되어야 합니다.
   1. 단가 정보: Amazon 광고 표시에 필요한 정보
   2. 가격대 인코딩: APS에서 반환된 낙찰 광고 가격
   3. UUID: 슬롯 고유 식별자

      ```java
      public void onSuccess(DTBAdResponse dtbAdResponse) {
          // Append the APS bid parameters to LevelPlay mediation to add APS to the next ad request 
          JSONObject apsDataJsonRV = new JSONObject(); 
          apsDataJsonRV.put("bidInfo", SDKUtilities.getBidInfo(dtbAdResponse));
          apsDataJsonRV.put("pricePointEncoded", SDKUtilities.getPricePoint(dtbAdResponse));
          apsDataJsonRV.put("uuid", slotUUID);
          // Define APS data per rewarded ad unit 
          JSONObject apsDataJson = new JSONObject(); 
          apsDataJson.put(IronSource.AD_UNIT.REWARDED_VIDEO.toString(), apsDataJsonRV);
          IronSource.setNetworkData("APS", apsDataJson);
       }
      ```

      APS가 보여줄 광고 없음(no fill) 반환하면 레벨플레이 loadManualRewardedVideo()를 호출.
