Unity IAP 提供了一个简单的 Webview 界面来通过广告位显示应用内购推荐资源。要控制这些资源的渲染过程,请使用原生推荐 (Native Promo) 来实现自定义推荐显示。
要使用原生推荐,必须从 Asset Store 下载并安装最新的 SDK (3.0+)。
按照相关说明设置 IAP 广告位、商品和推荐,但请注意在配置 IAP 商品时不应该上传广告素材资源。
SDK 提供了一个原生推荐适配器接口,其中包含处理推荐资源交互的方法。在自定义脚本中使用这些方法可以在推荐开始、完成和启动购买流程时通知 SDK。
每个开发人员的原生推荐实现方式有很大差异。以下抽象示例代码说明了一种实现。
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 ();
        // 使用 promoContent 的相关 Product ID(例如 adapter.metadata.premiumProduct.productID)来确定要展示的资源
        // 调用 adapter.OnShown () 来告知 SDK 已启动推荐,然后执行这些资源的自定义显示
        // 调用 adapter.OnClicked () 来告知 SDK 该玩家已点击购买按钮,并启动购买流程
        // 调用 adapter.OnClosed () 来告知 SDK 已结束推荐 
    }
    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);
    }
}
Extends the ShowAdPlacementContent class, providing functionality for IAP Promo content. 
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);
此接口提供用于处理用户与推荐资源交互的访问方法。使用这些方法可以传入自定义资源并定义预期行为。
此属性包含通过适配器传递的 PromoAdPlacementContent 对象的信息。
public struct PromoMetadata {
    public Product premiumProduct;
}
public PromoMetadata metadata { get; };
例如:
string cc = nativePromoAdapter.metadata.premiumProduct.isoCurrencyCode;
显示推荐时调用此函数。它应包含显示推荐资源的自定义方法。
void OnShown ();
玩家放弃推荐优惠时调用此函数。
void OnClosed ();
玩家点击按钮购买商品时调用此函数。它应该启动购买流程。
void OnClicked ();
每个开发人员的原生推荐实现方式有很大差异。以下抽象示例代码说明了一种实现。
@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];    
}
// 如果玩家点击了购买按钮:
(IBAction) purchaseButtonTapped: (id) sender {
    [self.nativePromoAdapter promoDidClick];
    [self.nativePromoAdapter promoDidClose];
    self.nativePromoView.hidden = YES;
}
// 如果玩家关闭了推荐资源:
-(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
     // 插入购买商品成功或失败的逻辑(请参阅购买集成文档)
}
请阅读 iOS 购买集成文档,了解有关此处引用的 USRVUnityPurchasingDelegate 类的更多详细信息。
扩展 UMONShowAdPlacementContent 类的功能以支持应用内购推荐 (IAP Promo) 内容。
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;
此委托提供用于处理用户与推荐资源交互的访问方法。使用这些方法可以传入自定义资源并定义预期行为。
此属性包含通过适配器传递的 UMONPromoAdPlacementContent 对象的信息。
@interface UMONPromoAdPlacementContent: UMONShowAdPlacementContent
-(instancetype) initWithPlacementId: (NSString *) placementId withParams: (NSDictionary *) params;
@property (nonatomic, strong, readonly) UMONPromoMetaData *metadata;
@end
显示推荐时调用此函数。它应包含显示推荐资源的自定义方法。
-(void) promoDidShow;
-(void) promoDidShow: (UMONNativePromoShowType) showType;
可以传递 UMONNativePromoShowType 枚举值来引用推荐资源的预览类型。kNativePromoShowTypeFull 表示完整推荐视图,而 kNativePromoShowTypePreview 表示可以扩展来显示完整推荐的最小化视图。
玩家放弃推荐优惠时调用此函数。
-(void) promoDidClose;
promoDidClick玩家点击按钮购买商品时调用此函数。它应该启动购买流程。
-(void) promoDidClick;
每个开发人员的原生推荐实现方式有很大差异。以下抽象示例代码说明了一种实现。
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));
        }
    });
}
请阅读 Android 购买集成文档,了解有关此处引用的 UnityPurchasingAdapter 类的更多详细信息。
扩展 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) 商品类型。 | 
如需了解商品属性的更多详细信息,请参阅有关定义商品的文档。
此委托提供用于处理用户与推荐资源交互的访问方法。使用这些方法可以传入自定义资源并定义预期行为。通过 NativePromoAdapter 函数传递 PromoAdPlacementContent 对象以创建新的适配器。例如:
final NativePromoAdapter nativePromoAdapter = new NativePromoAdapter (placementContent);
此属性包含通过适配器传递的 PromoAdPlacementContent 对象的信息。
public PromoMetadata getMetadata ();
显示推荐时调用此函数。它应包含显示推荐资源的自定义方法。
public void onShown (NativePromoShowType type);
可以传递 NativePromoShowType 枚举值来引用推荐资源的预览类型。FULL 表示完整推荐视图,而 PREVIEW 表示可以扩展来显示完整推荐的最小化视图。
玩家放弃推荐优惠时调用此函数。
public void onClicked
玩家点击按钮购买商品时调用此函数。它应该启动购买流程。
public void promoClicked;