ÿÿ ペイウォールイベントã®å‡¦ç† | Unity SDK | Adapty ドキュメント

ペイウォールイベントã®å‡¦ç†

ã“ã®ã‚¬ã‚¤ãƒ‰ã§ã¯ã€è³¼å…¥ãƒ»å¾©å…ƒãƒ»ãƒ—ãƒ­ãƒ€ã‚¯ãƒˆé¸æŠžãƒ»ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã®ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã«é–¢ã™ã‚‹ã‚¤ãƒ™ãƒ³ãƒˆå‡¦ç†ã‚’説明ã—ã¾ã™ã€‚ボタンæ“作(ペイウォールを閉ã˜ã‚‹ã€ãƒªãƒ³ã‚¯ã‚’é–‹ããªã©ï¼‰ã®å®Ÿè£…ã‚‚å¿…è¦ã§ã™ã€‚詳細ã¯ãƒœã‚¿ãƒ³ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã®å‡¦ç†ã‚¬ã‚¤ãƒ‰ã‚’ã”覧ãã ã•ã„。

ペイウォールビルダーã§è¨­å®šã•れãŸãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã¯ã€è³¼å…¥ã‚„復元ã®ãŸã‚ã«è¿½åŠ ã‚³ãƒ¼ãƒ‰ã¯ä¸è¦ã§ã™ã€‚ãŸã ã—ã€ã‚¢ãƒ—リãŒå¿œç­”ã§ãã‚‹ã„ãã¤ã‹ã®ã‚¤ãƒ™ãƒ³ãƒˆãŒç”Ÿæˆã•れã¾ã™ã€‚ã“れらã®ã‚¤ãƒ™ãƒ³ãƒˆã«ã¯ã€ãƒœã‚¿ãƒ³æ“作(閉ã˜ã‚‹ãƒœã‚¿ãƒ³ã€URLã€ãƒ—ãƒ­ãƒ€ã‚¯ãƒˆé¸æŠžãªã©ï¼‰ã‚„ã€ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ä¸Šã§è¡Œã‚れãŸè³¼å…¥é–¢é€£ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¸ã®é€šçŸ¥ãŒå«ã¾ã‚Œã¾ã™ã€‚以下ã§ã“れらã®ã‚¤ãƒ™ãƒ³ãƒˆã¸ã®å¯¾å¿œæ–¹æ³•を説明ã—ã¾ã™ã€‚

ã“ã®ã‚¬ã‚¤ãƒ‰ã¯ã€Adapty SDK v3.3.0 以é™ãŒå¿…è¦ãªæ–°ã—ã„ペイウォールビルダーã®ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«å°‚用ã§ã™ã€‚

Adapty SDK ãŒãƒ¢ãƒã‚¤ãƒ«ã‚¢ãƒ—リã«ã©ã®ã‚ˆã†ã«çµ±åˆã•れã¦ã„ã‚‹ã‹ã€å®Ÿéš›ã®ä¾‹ã‚’見ã¦ã¿ã¾ã›ã‚“ã‹ï¼Ÿãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã®è¡¨ç¤ºã€è³¼å…¥å‡¦ç†ã€ãã®ä»–ã®åŸºæœ¬æ©Ÿèƒ½ã‚’å«ã‚€å®Œå…¨ãªã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—を実演ã—ã¦ã„るサンプルアプリをã”覧ãã ã•ã„。

イベントã®å‡¦ç†

モãƒã‚¤ãƒ«ã‚¢ãƒ—リ内ã®ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ç”»é¢ã§ç™ºç”Ÿã™ã‚‹ãƒ—ロセスを制御・監視ã™ã‚‹ã«ã¯ã€AdaptyPaywallsEventsListener インターフェースを実装ã—ã¾ã™ã€‚

using UnityEngine;
using AdaptySDK;

public class PaywallEventsHandler : MonoBehaviour, AdaptyPaywallsEventsListener
{
    void Start()
    {
        Adapty.SetPaywallsEventsListener(this);
    }

    // Implement all required interface methods below
}

ユーザーãŒç”Ÿæˆã™ã‚‹ã‚¤ãƒ™ãƒ³ãƒˆ

ペイウォールã®è¡¨ç¤º

ペイウォールビューãŒç”»é¢ã«è¡¨ç¤ºã•れãŸã¨ãã«å‘¼ã³å‡ºã•れã¾ã™ã€‚

iOS ã§ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«å†…ã®ã‚¦ã‚§ãƒ–ペイウォールボタンをタップã—ã¦ã€ã‚¤ãƒ³ã‚¢ãƒ—リブラウザã§ã‚¦ã‚§ãƒ–ペイウォールãŒé–‹ã„ãŸã¨ãã«ã‚‚呼ã³å‡ºã•れã¾ã™ã€‚

public void PaywallViewDidAppear(AdaptyUIPaywallView view) { }

ペイウォールã®éžè¡¨ç¤º

ペイウォールビューãŒç”»é¢ã‹ã‚‰é–‰ã˜ã‚‰ã‚ŒãŸã¨ãã«å‘¼ã³å‡ºã•れã¾ã™ã€‚

iOS ã§ã¯ã€ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‹ã‚‰ã‚¤ãƒ³ã‚¢ãƒ—リブラウザã§é–‹ã„ãŸã‚¦ã‚§ãƒ–ペイウォールãŒç”»é¢ã‹ã‚‰æ¶ˆãˆãŸã¨ãã«ã‚‚呼ã³å‡ºã•れã¾ã™ã€‚

public void PaywallViewDidDisappear(AdaptyUIPaywallView view) { }

ãƒ—ãƒ­ãƒ€ã‚¯ãƒˆé¸æŠž

プロダクトãŒè³¼å…¥å¯¾è±¡ã¨ã—ã¦é¸æŠžã•れãŸã¨ã(ユーザーã¾ãŸã¯ã‚·ã‚¹ãƒ†ãƒ ã«ã‚ˆã‚‹ï¼‰ã«å‘¼ã³å‡ºã•れã¾ã™ã€‚

public void PaywallViewDidSelectProduct(
    AdaptyUIPaywallView view, 
    string productId
) { }
イベント例(クリックã—ã¦å±•開)
{
  "productId": "premium_monthly"
}

購入開始

ユーザーãŒè³¼å…¥ãƒ—ロセスを開始ã—ãŸã¨ãã«å‘¼ã³å‡ºã•れã¾ã™ã€‚

public void PaywallViewDidStartPurchase(
    AdaptyUIPaywallView view, 
    AdaptyPaywallProduct product
) { }
イベント例(クリックã—ã¦å±•開)
{
  "product": {
    "vendorProductId": "premium_monthly",
    "localizedTitle": "Premium Monthly",
    "localizedDescription": "Premium subscription for 1 month",
    "localizedPrice": "$9.99",
    "price": 9.99,
    "currencyCode": "USD"
  }
}

購入æˆåŠŸãƒ»ã‚­ãƒ£ãƒ³ã‚»ãƒ«ãƒ»ä¿ç•™

è³¼å…¥ãŒæˆåŠŸã—ãŸå ´åˆã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒè³¼å…¥ã‚’キャンセルã—ãŸå ´åˆã€ã¾ãŸã¯è³¼å…¥ãŒä¿ç•™ä¸­ã«ãªã£ãŸå ´åˆã«ã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ãŒå‘¼ã³å‡ºã•れã¾ã™ã€‚ユーザーã«ã‚ˆã‚‹ã‚­ãƒ£ãƒ³ã‚»ãƒ«ã‚„ä¿ç•™ä¸­ã®æ”¯æ‰•ã„(ä¿è­·è€…ã®æ‰¿èªãŒå¿…è¦ãªå ´åˆãªã©ï¼‰ã¯ã€PaywallViewDidFailPurchase ã§ã¯ãªãã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’トリガーã—ã¾ã™ã€‚

public void PaywallViewDidFinishPurchase(
    AdaptyUIPaywallView view, 
    AdaptyPaywallProduct product, 
    AdaptyPurchaseResult purchasedResult
) { }
イベント例(クリックã—ã¦å±•開)
// Successful purchase
{
  "product": {
    "vendorProductId": "premium_monthly",
    "localizedTitle": "Premium Monthly",
    "localizedDescription": "Premium subscription for 1 month",
    "localizedPrice": "$9.99",
    "price": 9.99,
    "currencyCode": "USD"
  },
  "purchaseResult": {
    "type": "Success",
    "profile": {
      "accessLevels": {
        "premium"ÿÿ;: {
          "id": "premium",
          "isActive": true,
          "expiresAt": "2024-02-15T10:30:00Z"
        }
      }
    }
  }
}

// Cancelled purchase
{
  "product": {
    "vendorProductId": "premium_monthly",
    "localizedTitle": "Premium Monthly",
    "localizedDescription": "Premium subscription for 1 month",
    "localizedPrice": "$9.99",
    "price": 9.99,
    "currencyCode": "USD"
  },
  "purchaseResult": {
    "type": "UserCancelled"
  }
}

// Pending purchase
{
  "product": {
    "vendorProductId": "premium_monthly",
    "localizedTitle": "Premium Monthly",
    "localizedDescription": "Premium subscription for 1 month",
    "localizedPrice": "$9.99",
    "price": 9.99,
    "currencyCode": "USD"
  },
  "purchaseResult": {
    "type": "Pending"
  }
}

ãã®å ´åˆã¯ç”»é¢ã‚’é–‰ã˜ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚

購入失敗

エラーã«ã‚ˆã‚Šè³¼å…¥ãŒå¤±æ•—ã—ãŸå ´åˆã«ã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ãŒå‘¼ã³å‡ºã•れã¾ã™ã€‚StoreKit/Google Play Billing ã®ã‚¨ãƒ©ãƒ¼ï¼ˆæ”¯æ‰•ã„制é™ã€ç„¡åйãªãƒ—ロダクトã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯éšœå®³ï¼‰ã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³æ¤œè¨¼ã®å¤±æ•—ã€ã‚·ã‚¹ãƒ†ãƒ ã‚¨ãƒ©ãƒ¼ãŒå«ã¾ã‚Œã¾ã™ã€‚ãªãŠã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚ˆã‚‹ã‚­ãƒ£ãƒ³ã‚»ãƒ«ã¯ã‚­ãƒ£ãƒ³ã‚»ãƒ«çµæžœã¨ã—㦠PaywallViewDidFinishPurchase をトリガーã—ã€ä¿ç•™ä¸­ã®æ”¯æ‰•ã„ã¯ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’トリガーã—ã¾ã›ã‚“。

public void PaywallViewDidFailPurchase(
    AdaptyUIPaywallView view, 
    AdaptyPaywallProduct product, 
    AdaptyError error
) { }
イベント例(クリックã—ã¦å±•開)
{
  "product": {
    "vendorProductId": "premium_monthly",
    "localizedTitle": "Premium Monthly",
    "localizedDescription": "Premium subscription for 1 month",
    "localizedPrice": "$9.99",
    "price": 9.99,
    "currencyCode": "USD"
  },
  "error": {
    "code": "purchase_failed",
    "message": "Purchase failed due to insufficient funds",
    "details": {
      "underlyingError": "Insufficient funds in account"
    }
  }
}

復元開始

ユーザーãŒå¾©å…ƒãƒ—ロセスを開始ã—ãŸã¨ãã«å‘¼ã³å‡ºã•れã¾ã™ã€‚

public void PaywallViewDidStartRestore(AdaptyUIPaywallView view) { }

復元æˆåŠŸ

購入ã®å¾©å…ƒãŒæˆåŠŸã—ãŸã¨ãã«å‘¼ã³å‡ºã•れã¾ã™ã€‚

public void PaywallViewDidFinishRestore(
    AdaptyUIPaywallView view, 
    AdaptyProfile profile
) { }
イベント例(クリックã—ã¦å±•開)
{
  "profile": {
    "accessLevels": {
      "premium": {
        "id": "premium",
        "isActive": true,
        "expiresAt": "2024-02-15T10:30:00Z"
      }
    },
    "subscriptions": [
      {
        "vendorProductId": "premium_monthly",
        "isActive": true,
        "expiresAt": "2024-02-15T10:30:00Z"
      }
    ]
  }
}

ユーザーãŒå¿…è¦ãª accessLevel ã‚’æŒã£ã¦ã„ã‚‹å ´åˆã¯ã€ç”»é¢ã‚’é–‰ã˜ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚ç¢ºèªæ–¹æ³•ã«ã¤ã„ã¦ã¯ã€ã‚µãƒ–スクリプションã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。

復元失敗

購入ã®å¾©å…ƒãŒå¤±æ•—ã—ãŸã¨ãã«å‘¼ã³å‡ºã•れã¾ã™ã€‚

public void PaywallViewDidFailRestore(
    AdaptyUIPaywallView view, 
    AdaptyError error
) { }
イベント例(クリックã—ã¦å±•開)
{
  "error": {
    "code": "restore_failed",
    "message": "Purchase restoration failed",
    "details": {
      "underlyingError": "No previous purchases found"
    }
  }
}

ウェブ支払ã„ナビゲーション完了

購入ã®ãŸã‚ã«ã‚¦ã‚§ãƒ–ペイウォールを開ã“ã†ã¨ã—ãŸå¾Œï¼ˆæˆåŠŸãƒ»å¤±æ•—ã«é–¢ã‚らãšï¼‰ã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ãŒå‘¼ã³å‡ºã•れã¾ã™ã€‚

public void PaywallViewDidFinishWebPaymentNavigation(
    AdaptyUIPaywallView view, 
    AdaptyPaywallProduct product, 
    AdaptyError error
) { }

パラメータ:

  • product: ウェブペイウォールãŒé–‹ã‹ã‚ŒãŸï¼ˆã¾ãŸã¯é–‹ã“ã†ã¨ã—ãŸï¼‰ãƒ—ロダクト
  • error: ã‚¦ã‚§ãƒ–ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ãŒæ­£å¸¸ã«é–‹ã„ãŸå ´åˆã¯ nullã€å¤±æ•—ã—ãŸå ´åˆã¯ AdaptyError
イベント例(クリックã—ã¦å±•開)
// Successful navigation
{
  "product": {
    "vendorProductId": "premium_monthly",
    "localizedTitle": "Premium Monthly",
    "localizedDescription": "Premium subscription for 1 month",
    "localizedPrice": "$9.99",
    "price": 9.99,
    "currencyCode": "USD"
  },
  "error": null
}

// Failed navigation
{
  "product": {
    "vendorProductId": "premium_monthly",
    "localizedTitle": "Premium Monthly",
    "localizedDescription": "Premium subscription for 1 month",
    "localizedPrice": "$9.99",
    "price": 9.99,
    "currencyCode": "USD"
  },
  "error": {
    "code": "wrong_param",
    "message": "Current method is not available for this product",
    "details": {
      "underlyingError": "Product not configured for web purchases"
    }
  }
}

データå–å¾—ã¨ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°

プロダクト読ã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼

プロダクトã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã€AdaptyError ãŒæä¾›ã•れãŸã¨ãã«å‘¼ã³å‡ºã•れã¾ã™ã€‚åˆæœŸåŒ–時ã«ãƒ—ロダクトé…列を渡ã•ãªã‹ã£ãŸå ´åˆã€AdaptyUI ã¯ã‚µãƒ¼ãƒãƒ¼ã‹ã‚‰å¿…è¦ãªã‚ªãƒ–ジェクトを自動的ã«å–å¾—ã—ã¾ã™ã€‚ã“ã®å‡¦ç†ãŒå¤±æ•—ã—ãŸå ´åˆã€AdaptyUI ã¯ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’呼ã³å‡ºã—ã¦ã‚¨ãƒ©ãƒ¼ã‚’報告ã—ã¾ã™ã€‚

public void PaywallViewDidFailLoadingProducts(
    AdaptyUIPaywallView view, 
    AdaptyError error
) { }
イベント例(クリックã—ã¦å±•開)
{
  "error": {
    "code": "products_loading_failed",
    "message": "Failed to load products from the server",
    "details": {
      "underlyingError": "Network timeout"
    }
  }
}

レンダリングエラー

インターフェースã®ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã€AdaptyError ãŒæä¾›ã•れãŸã¨ãã«å‘¼ã³å‡ºã•れã¾ã™ã€‚

public void PaywallViewDidFailRendering(
    AdaptyUIPaywallView view, 
    AdaptyError error
) { }
イベント例(クリックã—ã¦å±•開)
{
  "error": {
    "code": "rendering_failed",
    "message": "Failed to render paywall interface",
    "details": {
      "underlyingError": "Invalid paywall configuration"
    }
  }
}

通常ã®çжæ³ã§ã¯ã“ã®ã‚ˆã†ãªã‚¨ãƒ©ãƒ¼ã¯ç™ºç”Ÿã—ãªã„ã¯ãšã§ã™ã€‚ã‚‚ã—é­é‡ã—ãŸå ´åˆã¯ãŠçŸ¥ã‚‰ã›ãã ã•ã„。

ÿÿÿÿ