- 
                Notifications
    You must be signed in to change notification settings 
- Fork 0
Native Promo
Unity IAP는 플레이스먼트를 통해서 IAP 프로모션 에셋을 표시할 수 있는 간편한 웹 보기 인터페이스를 제공합니다. 네이티브 Promo를 이용해 커스텀 프로모션 디스플레이를 구현하는 방법으로 이 에셋의 렌더링 프로세스를 제어할 수 있습니다.
네이티브 Promo를 사용하려면, 에셋 스토어에서 최신 SDK(3.0+)를 다운로드해야 합니다.
다음 지침을 따라 IAP 플레이스먼트, 제품 및 Promo를 설정하십시오. 참고로 IAP 제품을 구성할 때 Creative 에셋을 업로드해서는 안 됩니다.
SDK는 네이티브 Promo 어댑터 인터페이스와 프로모션 에셋 상호작용을 핸들링할 수 있는 메서드를 제공합니다. 커스텀 스크립트에서 이 메서드를 사용하여 Promo 시작, 완료, 구매 플로 초기화 시점을 SDK에 알릴 수 있습니다.
개발자마다 네이티브 Promo 구현 방식은 각양각색입니다. 다음의 추상 샘플 코드는 구현 내용을 설명합니다.
using UnityEngine.Monetization;
public class NativePromoDisplay : MonoBehaviour {    
    PlacementContent placementContent = Monetization.GetPlacementContent (placementId);
    PromoAdPlacementContent promoContent = placementContent as PromoAdPlacementContent;
    INativePromoAdapter adapter = Monetization.CreateNativePromoAdapter (promoContent);
    void ShowPromo () {
        LogPromoInfo ();
        // Use promoContent’s associated Product ID (e.g. adapter.metadata.premiumProduct.productID) to determine which assets to show
        // Call adapter.OnShown () to tell the SDK the Promo has started, then execute your custom display for those assets
        // Call adapter.OnClicked () to tell the SDK the player clicked the purchase button and to initiate the purchase flow
        // Call adapter.OnClosed () to tell the SDK the Promo has ended      
    }
    void LogPromoInfo () {
        Debug.LogFormat ("Product ID: \t{0}", adapter.metadata.premiumProduct.productId);
        Debug.LogFormat ("Localized Title: \t{0}", adapter.metadata.premiumProduct.localizedTitle);
        Debug.LogFormat ("Localized Description: \t{0}", adapter.metadata.premiumProduct.localizedDescription);
        Debug.LogFormat ("ISO Currency Code: \t{0}", adapter.metadata.premiumProduct.isoCurrencyCode);
        Debug.LogFormat ("Localized Price: \t{0}", adapter.metadata.premiumProduct.localizedPrice);
        Debug.LogFormat ("Localized Price String: \t{0}", adapter.metadata.premiumProduct.localizedPriceString);
    }
}ShowAdPlacementContent 클래스를 확장하여 IAP Promo 콘텐츠에 대한 기능을 제공합니다.
Product
Unity IAP 제품 오브젝트
| 프로퍼티 | 가져오기 메서드 | 설명 | 
|---|---|---|
| string productId | GetProductId () | 제품의 내부 레퍼런스 ID입니다. | 
| string localizedTitle | GetlocalizedTitle () | 소비자가 스토어 UI에서 보는 제품 이름입니다. | 
| string localizedPriceString | GetLocalizedPriceString () | 소비자가 스토어 UI에서 보는 가격 문자열이며 화폐 기호가 포함됩니다. | 
| double localizedPrice | GetLocalizedPrice () | 제품 가격의 내부 시스템 값입니다. | 
| string isoCurrencyCode | GetIsoCurrencyCode () | 제품의 현지 화폐의 ISO 코드입니다. | 
| string localizedDescription | GetLocalizedDescription () | 소비자가 스토어 UI에서 보는 제품 설명입니다. | 
| string productType | GetProductType () | Unity는 “Consumable(소모품)”과 “Non-Consumable(비소모품)”, 그리고 “Subscription(구독)” 제품 유형을 지원합니다. | 
제품 속성에 대한 자세한 내용은 제품 정의 참고 문서를 참조하세요.
이 함수를 통해서 PromoAdPlacementContent 오브젝트를 전달하여 새로운 INativePromoAdapter를 생성합니다. 예를 들면 다음과 같습니다.
INativePromoAdapter adapter = Monetization.CreateNativePromoAdapter (promoContent);
이 인터페이스는 사용자의 프로모션 에셋 상호작용을 위한 액세스 메서드를 제공합니다. 이 메서드를 사용하여 커스텀 메서드에서 전달하고 예상 행동을 정의할 수 있습니다.
PromoMetadata
이 프로퍼티는 어댑터를 통해서 전달되는 PromoAdPlacementContent 오브젝트에 대한 정보를 포함합니다.
public struct PromoMetadata {
    public Product premiumProduct;
}
public PromoMetadata metadata { get; };예를 들면 다음과 같습니다.
string cc = nativePromoAdapter.metadata.premiumProduct.isoCurrencyCode;Promo가 표시될 때 이 함수를 호출합니다. 프로모션 에셋을 표시하는 커스텀 메서드가 포함되어야 합니다.
void OnShown ();플레이어가 Promo 상품을 닫을 때 이 함수를 호출합니다.
void OnClosed ();플레이어가 버튼을 클릭하여 제품을 구매할 때 이 함수를 호출합니다. 이를 통해 구매 플로가 시작됩니다.
void OnClicked ();개발자마다 네이티브 Promo 구현 방식은 각양각색입니다. 다음의 추상 샘플 코드는 구현 내용을 설명합니다.
@interface ViewController: UIViewController <USRVUnityPurchasingDelegate>
-(void) showPromo: (UMONPromoAdPlacementContent *) placementContent {
    self.nativePromoAdapter = [[UMONNativePromoAdapter alloc] initWithPromo: placementContent];
    UMONPromoMetaData *metaData = placementContent.metadata;
    UPURProduct *product = metaData.premiumProduct;
    NSString *price = (product == nil || product.localizedPriceString == nil) ? @"$0.99": product.localizedPriceString;
    self.nativePromoView.hidden = NO;
    NSString *title = [NSString stringWithFormat: @"Buy for only %@", price];
    [self.purchaseButton setTitle: title forState: UIControlStateNormal];
    [self.nativePromoAdapter promoDidShow];    
}
// If the player clicked the purchase button:
(IBAction) purchaseButtonTapped: (id) sender {
    [self.nativePromoAdapter promoDidClick];
    [self.nativePromoAdapter promoDidClose];
    self.nativePromoView.hidden = YES;
}
// If the player closed the promotional asset:
-(IBAction) promoCloseButtonTapped: (id) sender {
    self.nativePromoView.hidden = YES;
    [self.nativePromoAdapter promoDidClose];
}
- (void) loadProducts: (UnityPurchasingLoadProductsCompletionHandler) completionHandler {
    // Retrieve your Products list (see purchasing integration docs) 
}
- (void) purchaseProduct: (NSString *) productId
     // Insert logic for successful or failed product purchase (see purchasing integration docs) 
}여기에서 참조한 USRVUnityPurchasingDelegate 클래스에 대한 자세한 내용은 iOS 구매 통합 참고 문서에서 확인할 수 있습니다.
UMONShowAdPlacementContent 클래스를 확장하여, IAP Promo 콘텐츠에 대한 기능을 제공합니다.
UMONPromoProduct
Unity IAP 제품 오브젝트
프로퍼티 | 설명
@property (strong, nonatomic, readonly) NSString *productId | 제품의 내부 레퍼런스 ID입니다.
@property (strong, nonatomic, readonly) NSString *localizedTitle | 소비자가 스토어 UI에서 보는 제품 이름입니다.
@property (strong, nonatomic, readonly) NSString *localizedPriceString | 소비자가 스토어 UI에서 보는 가격 문자열이며 화폐 기호가 포함됩니다.
@property (nonatomic, readonly) double *localizedPrice | 제품 가격의 내부 시스템 값입니다.
@property (strong, nonatomic, readonly) NSString *isoCurrencyCode | 제품의 현지 화폐의 ISO 코드입니다.
@property (strong, nonatomic, readonly) NSString *localizedDescription | 소비자가 스토어 UI에서 보는 제품 설명입니다.
@property (strong, nonatomic, readonly) NSString *productType` | Unity는 “Consumable(소모품)”과 “Non-Consumable(비소모품)”, 그리고 “Subscription(구독)” 제품 유형을 지원합니다.
제품 속성에 대한 자세한 내용은 제품 정의 참고 문서를 참조하세요.
이 함수를 통해서 UMONPromoAdPlacementContent 오브젝트를 전달하여 새로운 UMONNativePromoAdapter를 생성합니다.
-(instancetype) initWithPromo: (UMONPromoAdPlacementContent *) promo;이 델리게이트는 사용자의 프로모션 에셋 상호작용을 위한 액세스 메서드를 제공합니다. 이 메서드를 사용하여 커스텀 메서드에서 전달하고 예상 행동을 정의할 수 있습니다.
UMONPromoMetaData
이 프로퍼티는 어댑터를 통해서 전달되는 UMONPromoAdPlacementContent 오브젝트에 대한 정보를 포함합니다.
@interface UMONPromoAdPlacementContent: UMONShowAdPlacementContent
-(instancetype) initWithPlacementId: (NSString *) placementId withParams: (NSDictionary *) params;
@property (nonatomic, strong, readonly) UMONPromoMetaData *metadata;
@endPromo가 표시될 때 이 함수를 호출합니다. 프로모션 에셋을 표시하는 커스텀 메서드가 포함되어야 합니다.
-(void) promoDidShow;
-(void) promoDidShow: (UMONNativePromoShowType) showType;UMONNativePromoShowType enum 값을 전달하여 Promo 에셋의 미리보기 유형을 참조할 수 있습니다. kNativePromoShowTypeFull은 전체 프로모션 view를 나타내며 kNativePromoShowTypePreview는 확장하여 전체 Promo를 표시할 수 있는 최소화된 view를 나타냅니다.
플레이어가 Promo 상품을 닫을 때 이 함수를 호출합니다.
-(void) promoDidClose;플레이어가 버튼을 클릭하여 제품을 구매할 때 이 함수를 호출합니다. 이를 통해 구매 플로가 시작됩니다.
-(void) promoDidClick;개발자마다 네이티브 Promo 구현 방식은 각양각색입니다. 다음의 추상 샘플 코드는 구현 내용을 설명합니다.
UnityPurchasing.setAdapter (new UnityPurchasingAdapter ());
private class UnityPurchasingAdapter implements IPurchasingAdapter {
    @Override
    public void retrieveProducts (IRetrieveProductsListener listener) {
        // Retrieve your Products list (see purchasing integration docs)    
    }
    @Override
    public void onPurchase (String productID, ITransactionListener listener, Map<String, Object> extras) {
        // Insert logic for successful or failed product purchase (see purchasing integration docs)
    }
    private void showPromo (final PromoAdPlacementContent placementContent) {
        final NativePromoAdapter nativePromoAdapter = new NativePromoAdapter (placementContent);
        PromoMetadata metadata = placementContent.getMetadata ();
        Product product = metadata.getPremiumProduct ();
        String price = product == null ? "$0.99": product.getLocalizedPriceString ();
        final View root = getLayoutInflater ().inflate (R.layout.unitymonetization_native_promo, (ViewGroup) findViewById (R.id.unityads_example_layout_root));
        Button buyButton = root.findViewById(R.id.native_promo_buy_button);
        Button closeButton = root.findViewById (R.id.native_promo_close_button);
        buyButton.setText ("Buy now for only " + price + "!");
        nativePromoAdapter.onShown();
        buyButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick (View v) {
            // Do purchase then call
            nativePromoAdapter.onClosed ();
            ((ViewGroup)root).removeView (findViewById (R.id.native_promo_root));
        }
    });
    closeButton.setOnClickListener (new View.OnClickListener () {
        @Override
        public void onClick(View v) {
            nativePromoAdapter.onClosed ();
            ((ViewGroup)root).removeView (findViewById (R.id.native_promo_root));
        }
    });
}여기에서 참조한 UnityPurchasingAdapter 클래스에 대한 자세한 내용은 Android 구매 통합 참고 문서에서 확인할 수 있습니다.
ShowAdPlacementContent 클래스를 확장하여 IAP Promo 콘텐츠에 대한 기능을 제공합니다.
Product
Unity IAP 제품 오브젝트
프로퍼티 | 가져오기 메서드 | 설명
String productId | getProductId () | 제품의 내부 레퍼런스 ID입니다.
String localizedTitle | getlocalizedTitle () | 소비자가 스토어 UI에서 보는 제품 이름입니다.
String localizedPriceString | getLocalizedPriceString () | 소비자가 스토어 UI에서 보는 가격 문자열이며 화폐 기호가 포함됩니다.
Double localizedPrice | getLocalizedPrice () | 제품 가격의 내부 시스템 값입니다.
String isoCurrencyCode | getIsoCurrencyCode () | 제품의 현지 화폐의 ISO 코드입니다.
String localizedDescription | getLocalizedDescription () | 소비자가 스토어 UI에서 보는 제품 설명입니다.
String productType | getProductType () | Unity는 “Consumable(소모품)”과 “Non-Consumable(비소모품)”, 그리고 “Subscription(구독)” 제품 유형을 지원합니다.
제품 속성에 대한 자세한 내용은 제품 정의 참고 문서를 참조하세요.
이 델리게이트는 사용자의 프로모션 에셋 상호작용을 위한 액세스 메서드를 제공합니다. 이 메서드를 사용하여 커스텀 메서드에서 전달하고 예상 행동을 정의할 수 있습니다. PromoAdPlacementContent 오브젝트를 NativePromoAdapter 함수를 통해 전달하여 새로운 어댑터를 생성합니다. 예를 들면 다음과 같습니다.
final NativePromoAdapter nativePromoAdapter = new NativePromoAdapter (placementContent);PromoMetaData
이 프로퍼티는 어댑터를 통해서 전달되는 PromoAdPlacementContent 오브젝트에 대한 정보를 포함합니다.
public PromoMetadata getMetadata ();Promo가 표시될 때 이 함수를 호출합니다. 프로모션 에셋을 표시하는 커스텀 메서드가 포함되어야 합니다.
public void onShown (NativePromoShowType type);NativePromoShowType 열거형 값을 전달하여 Promo 에셋의 미리보기 유형을 참조할 수 있습니다. FULL은 전체 프로모션 view를 나타내며 PREVIEW는 확장하여 전체 Promo를 표시할 수 있는 최소화된 view를 나타냅니다.
플레이어가 Promo 상품을 닫을 때 이 함수를 호출합니다.
public void onClicked플레이어가 버튼을 클릭하여 제품을 구매할 때 이 함수를 호출합니다. 이를 통해 구매 플로가 시작됩니다.
public void promoClicked;