Unity IAP는 플레이스먼트를 통해 IAP Promo 에셋을 표시할 수 있는 간단한 웹뷰 인터페이스를 제공합니다. 이러한 에셋에 대한 렌더링 프로세스를 제어하려면 네이티브 Promo를 사용하여 커스텀 프로모션 디스플레이를 구현하십시오.
네이티브 Promo를 사용하려면 에셋 스토어에서 최신 SDK(3.0+)를 다운로드하고 설치해야 합니다.
IAP 플레이스먼트, 제품 및 Promo를 설정하기 위한 지침을 따르십시오. 단, IAP 제품을 설정할 때는 크리에이티브 에셋을 업로드하면 안 됩니다.
이 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 콘텐츠를 위한 기능을 제공합니다.
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” 제품 타입을 지원합니다. |
Product 프로퍼티에 대한 자세한 내용은 제품 정의 문서를 참조하십시오.
이 함수를 통해 PromoAdPlacementContent
오브젝트를 전달하여 새로운 INativePromoAdapter
를 만드십시오. 예를 들면 다음과 같습니다.
INativePromoAdapter adapter = Monetization.CreateNativePromoAdapter (promoContent);
이 인터페이스는 프로모션 에셋과 사용자 간의 상호작용을 처리하기 위한 액세스 메서드를 제공합니다. 이 메서드를 사용하여 커스텀 에셋을 전달하고 예상 동작을 정의하십시오.
이 프로퍼티에는 어댑터를 통해 전달되는 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용 구매 통합 문서를 참조하십시오.
<a name="iOSPromoProduct"></a>
#### 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" 제품 타입을 지원합니다. |
제품 프로퍼티에 대한 자세한 내용은 [제품 정의](UnityIAPDefiningProducts.html) 문서를 참조하십시오.
<a name="iOSinitWithPromo"></a>
#### initWithPromo
이 함수를 통해 ```UMONPromoAdPlacementContent``` 오브젝트를 전달하여 새로운 ```UMONNativePromoAdapter```를 만드십시오.
-(instancetype) initWithPromo: (UMONPromoAdPlacementContent *) promo; ```
이 델리게이트는 프로모션 에셋과 사용자 간의 상호작용을 처리하기 위한 액세스 메서드를 제공합니다. 이 메서드를 사용하여 커스텀 에셋을 전달하고 예상 동작을 정의하십시오.
이 프로퍼티에는 어댑터를 통해 전달되는 UMONPromoAdPlacementContent
오브젝트에 관한 정보가 들어 있습니다.
@interface UMONPromoAdPlacementContent: UMONShowAdPlacementContent
-(instancetype) initWithPlacementId: (NSString *) placementId withParams: (NSDictionary *) params;
@property (nonatomic, strong, readonly) UMONPromoMetaData *metadata;
@end
Promo가 보이면 이 함수를 호출합니다. 프로모션 에셋을 표시하기 위한 커스텀 메서드를 포함해야 합니다.
-(void) promoDidShow;
-(void) promoDidShow: (UMONNativePromoShowType) showType;
<a name="iOSpromoDidClose"></a>
#### promoDidClose
플레이어가 Promo 제안을 거부하면 이 함수를 호출합니다.
-(void) promoDidClose; ```
promoDidClick
플레이어가 버튼을 클릭하여 제품을 구매하면 이 함수를 호출합니다. 구매 플로를 초기화해야 합니다.
-(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용 구매 통합 문서를 참조하십시오.
<a name="AndroidProduct"></a>
#### 제품
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" 제품 타입을 지원합니다. |
제품 프로퍼티에 대한 자세한 내용은 [제품 정의](UnityIAPDefiningProducts.html) 문서를 참조하십시오.
<a name="AndroidNativePromoAdapter"></a>
#### NativePromoAdapter
이 델리게이트는 프로모션 에셋과 사용자 간의 상호작용을 처리하기 위한 액세스 메서드를 제공합니다. 이 메서드를 사용하여 커스텀 에셋을 전달하고 예상 동작을 정의하십시오. ```NativePromoAdapter``` 함수를 통해 ```PromoAdPlacementContent``` 오브젝트를 전달하여 새로운 어댑터를 만드십시오. 예를 들어 다음과 같습니다.
final NativePromoAdapter nativePromoAdapter = new NativePromoAdapter (placementContent); ```
이 프로퍼티에는 어댑터를 통해 전달되는 PromoAdPlacementContent
오브젝트에 관한 정보가 포함되어 있습니다.
public PromoMetadata getMetadata ();
Promo가 표시되면 이 함수를 호출합니다. 프로모션 에셋을 표시하기 위한 커스텀 메서드를 포함해야 합니다.
public void onShown (NativePromoShowType type);
<a name="AndroidOnClosed"></a>
#### onClosed
플레이어가 Promo 제안을 거부하면 이 함수를 호출합니다.
public void onClicked ```
플레이어가 버튼을 클릭하여 제품을 구매하면 이 함수를 호출합니다. 구매 플로를 초기화해야 합니다.
public void promoClicked;