ÿÿ ペイウォールã®è¡¨ç¤º | Unity SDK | Adapty ドキュメント

Unity SDK ã®ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’使ã£ã¦è³¼å…¥ã‚’有効ã«ã™ã‚‹

アプリ内課金を有効ã«ã™ã‚‹ã«ã¯ã€3 ã¤ã®é‡è¦ãªæ¦‚念をç†è§£ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚

  • プロダクト – ユーザーãŒè³¼å…¥ã§ãã‚‹ã‚‚ã®ï¼ˆã‚µãƒ–ã‚¹ã‚¯ãƒªãƒ—ã‚·ãƒ§ãƒ³ã€æ¶ˆè€—åž‹ã‚¢ã‚¤ãƒ†ãƒ ã€æ°¸ç¶šã‚¢ã‚¯ã‚»ã‚¹ãªã©ï¼‰
  • ペイウォール – ã©ã®ãƒ—ロダクトをæä¾›ã™ã‚‹ã‹ã‚’定義ã™ã‚‹è¨­å®šã§ã™ã€‚Adapty ã§ã¯ã€ãƒ—ロダクトã®å–å¾—ã¯ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’通ã˜ã¦ã®ã¿è¡Œãˆã¾ã™ã€‚ã“ã®è¨­è¨ˆã«ã‚ˆã‚Šã€ã‚¢ãƒ—リã®ã‚³ãƒ¼ãƒ‰ã‚’変更ã›ãšã«ã‚ªãƒ•ァー内容ã€ä¾¡æ ¼ã€ãƒ—ロダクトã®çµ„ã¿åˆã‚ã›ã‚’変更ã§ãã¾ã™ã€‚
  • プレースメント – アプリ内ã§ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’表示ã™ã‚‹å ´æ‰€ã¨ã‚¿ã‚¤ãƒŸãƒ³ã‚°ï¼ˆmainã€onboardingã€settings ãªã©ï¼‰ã€‚ダッシュボードã§ãƒ—レースメントã«å¯¾ã—ã¦ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’設定ã—ã€ã‚³ãƒ¼ãƒ‰å†…ã§ãƒ—レースメント ID を使ã£ã¦ãƒªã‚¯ã‚¨ã‚¹ãƒˆã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€A/B テストã®å®Ÿæ–½ã‚„ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã”ã¨ã«ç•°ãªã‚‹ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã®è¡¨ç¤ºãŒå®¹æ˜“ã«ãªã‚Šã¾ã™ã€‚

Adapty ã§ã¯ã€ã‚¢ãƒ—リ内ã§è³¼å…¥ã‚’有効ã«ã™ã‚‹ 3 ã¤ã®æ–¹æ³•ã‚’æä¾›ã—ã¦ã„ã¾ã™ã€‚アプリã®è¦ä»¶ã«å¿œã˜ã¦é¸æŠžã—ã¦ãã ã•ã„。

実装方法複雑ã•使用場é¢
Adapty ペイウォールビルダー✅ ç°¡å˜ãƒŽãƒ¼ã‚³ãƒ¼ãƒ‰ãƒ“ルダーã§å®Œå…¨ãªè³¼å…¥å¯¾å¿œãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’作æˆã—ã¾ã™ã€‚Adapty ãŒè‡ªå‹•çš„ã«ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã—ã€è¤‡é›‘ãªè³¼å…¥ãƒ•ローã€ãƒ¬ã‚·ãƒ¼ãƒˆæ¤œè¨¼ã€ã‚µãƒ–スクリプション管ç†ã‚’ã™ã¹ã¦è£å´ã§å‡¦ç†ã—ã¾ã™ã€‚
手動作æˆã®ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ðŸŸ¡ 中程度ペイウォール㮠UI をアプリã®ã‚³ãƒ¼ãƒ‰ã§å®Ÿè£…ã—ã¾ã™ãŒã€ãƒ—ãƒ­ãƒ€ã‚¯ãƒˆã‚ªãƒ•ã‚¡ãƒ¼ã®æŸ”軟性をä¿ã¤ãŸã‚ã€Adapty ã‹ã‚‰ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚ªãƒ–ジェクトをå–å¾—ã—ã¾ã™ã€‚ガイドをå‚ç…§ã—ã¦ãã ã•ã„。
オブザーãƒãƒ¼ãƒ¢ãƒ¼ãƒ‰ðŸ”´ 難ã—ã„独自ã®è³¼å…¥å‡¦ç†ã‚¤ãƒ³ãƒ•ãƒ©ã‚’æ—¢ã«æŒã£ã¦ãŠã‚Šã€ãれを引ãç¶šã使用ã—ãŸã„å ´åˆã«é¸ã³ã¾ã™ã€‚オブザーãƒãƒ¼ãƒ¢ãƒ¼ãƒ‰ã«ã¯ Adapty ã«ãŠã‘る制é™ãŒã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。記事をå‚ç…§ã—ã¦ãã ã•ã„。

ä»¥ä¸‹ã®æ‰‹é †ã¯ã€Adapty ペイウォールビルダーã§ä½œæˆã—ãŸãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã®å®Ÿè£…方法を示ã—ã¦ã„ã¾ã™ã€‚

ペイウォールビルダーを使用ã—ãªã„å ´åˆã¯ã€æ‰‹å‹•作æˆãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã§ã®è³¼å…¥å‡¦ç†ã‚¬ã‚¤ãƒ‰ã‚’å‚ç…§ã—ã¦ãã ã•ã„。

Adapty ペイウォールビルダーã§ä½œæˆã—ãŸãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’表示ã™ã‚‹ã«ã¯ã€ã‚¢ãƒ—リã®ã‚³ãƒ¼ãƒ‰ã§ä»¥ä¸‹ã®æ‰‹é †ã‚’実行ã™ã‚‹ã ã‘ã§ã™ã€‚

  1. ペイウォールをå–å¾—ã™ã‚‹: Adapty ã‹ã‚‰ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’å–å¾—ã—ã¾ã™ã€‚
  2. ペイウォールを表示ã™ã‚‹ï¼ˆè³¼å…¥å‡¦ç†ã¯ Adapty ãŒè¡Œã„ã¾ã™ï¼‰: å–å¾—ã—ãŸãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚³ãƒ³ãƒ†ãƒŠã‚’アプリã«è¡¨ç¤ºã—ã¾ã™ã€‚
  3. ボタンアクションを処ç†ã™ã‚‹: ペイウォール上ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼æ“作ã¨ã‚¢ãƒ—リã®ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã‚’ç´ä»˜ã‘ã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒœã‚¿ãƒ³ã‚’クリックã—ãŸã¨ãã«ãƒªãƒ³ã‚¯ã‚’é–‹ã„ãŸã‚Šã€ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’é–‰ã˜ãŸã‚Šã—ã¾ã™ã€‚

å§‹ã‚ã‚‹å‰ã«

å§‹ã‚ã‚‹å‰ã«ã€ä»¥ä¸‹ã®æ‰‹é †ã‚’完了ã—ã¦ãã ã•ã„。

  1. Adapty ダッシュボードã§ã‚¢ãƒ—リを App Store ãŠã‚ˆã³/ã¾ãŸã¯ Google Play ã«æŽ¥ç¶šã—ã¾ã™ã€‚
  2. Adapty ã§ãƒ—ロダクトを作æˆã—ã¾ã™ã€‚
  3. ペイウォールを作æˆã—ã¦ãƒ—ロダクトを追加ã—ã¾ã™ã€‚
  4. プレースメントを作æˆã—ã¦ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’追加ã—ã¾ã™ã€‚
  5. アプリã®ã‚³ãƒ¼ãƒ‰ã« Adapty SDK をインストールã—ã¦æœ‰åŠ¹åŒ–ã—ã¾ã™ã€‚

ã“ã‚Œã‚‰ã®æ‰‹é †ã‚’最短ã§å®Œäº†ã™ã‚‹ã«ã¯ã€ã‚¯ã‚¤ãƒƒã‚¯ã‚¹ã‚¿ãƒ¼ãƒˆã‚¬ã‚¤ãƒ‰ã«å¾“ã†ã‹ã€Developer CLI を使ã£ã¦ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã¨ãƒ—レースメントを作æˆã—ã¦ãã ã•ã„。

1. ペイウォールをå–å¾—ã™ã‚‹

ペイウォールã¯ãƒ€ãƒƒã‚·ãƒ¥ãƒœãƒ¼ãƒ‰ã§è¨­å®šã—ãŸãƒ—レースメントã«ç´ä»˜ã‘られã¦ã„ã¾ã™ã€‚プレースメントを使ã†ã¨ã€ç•°ãªã‚‹ã‚ªãƒ¼ãƒ‡ã‚£ã‚¨ãƒ³ã‚¹ã«å¯¾ã—ã¦åˆ¥ã€…ã®ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’表示ã—ãŸã‚Šã€A/B テストを実施ã—ãŸã‚Šã§ãã¾ã™ã€‚

Adapty ペイウォールビルダーã§ä½œæˆã—ãŸãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®æ‰‹é †ã‚’実行ã—ã¾ã™ã€‚

  1. GetPaywall メソッドを使ã£ã¦ãƒ—レースメント ID ã‹ã‚‰ paywall オブジェクトをå–å¾—ã—ã€HasViewConfiguration プロパティã§ãƒ“ルダーã§ä½œæˆã•れãŸãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚

  2. CreatePaywallView メソッドを使ã£ã¦ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ãƒ“ューを作æˆã—ã¾ã™ã€‚ã“ã®ãƒ“ューã«ã¯ã€ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’表示ã™ã‚‹ãŸã‚ã«å¿…è¦ãª UI è¦ç´ ã¨ã‚¹ã‚¿ã‚¤ãƒ«ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚

ビュー設定をå–å¾—ã™ã‚‹ã«ã¯ã€ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ãƒ“ルダー㧠Show on device トグルをオンã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚オフã®ã¾ã¾ã«ã™ã‚‹ã¨ã€ç©ºã®ãƒ“ュー設定ãŒè¿”ã•れã€ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ãŒè¡¨ç¤ºã•れã¾ã›ã‚“。

Adapty.GetPaywall("YOUR_PLACEMENT_ID", (paywall, error) => {
    if(error != null) {
        // handle the error
        return;
    }
    
    // Create paywall view parameters
    var parameters = new AdaptyUICreatePaywallViewParameters();
    
    // Create the paywall view
    AdaptyUI.CreatePaywallView(paywall, parameters, (view, error) => {
        if(error != null) {
            // handle the error
            return;
        }
        
        // view - the paywall view ready to be presented
    });
});

ã“ã®ã‚¯ã‚¤ãƒƒã‚¯ã‚¹ã‚¿ãƒ¼ãƒˆã¯ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’表示ã™ã‚‹ãŸã‚ã®æœ€å°é™ã®è¨­å®šã‚’æä¾›ã—ã¦ã„ã¾ã™ã€‚高度ãªè¨­å®šã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã®å–å¾—ã«é–¢ã™ã‚‹ã‚¬ã‚¤ãƒ‰ã‚’å‚ç…§ã—ã¦ãã ã•ã„。

2. ペイウォールを表示ã™ã‚‹

ペイウォール設定をå–å¾—ã—ãŸã‚‰ã€æ•°è¡Œè¿½åŠ ã™ã‚‹ã ã‘ã§ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’表示ã§ãã¾ã™ã€‚

ペイウォールを表示ã™ã‚‹ã«ã¯ã€CreatePaywallView メソッドã§ä½œæˆã—㟠view ã«å¯¾ã—㦠view.Present() メソッドを呼ã³å‡ºã—ã¾ã™ã€‚å„ view ã¯ä¸€åº¦ã—ã‹ä½¿ç”¨ã§ãã¾ã›ã‚“。ペイウォールをå†åº¦è¡¨ç¤ºã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€CreatePaywallView ã‚’ã‚‚ã†ä¸€åº¦å‘¼ã³å‡ºã—ã¦æ–°ã—ã„ view インスタンスを作æˆã—ã¦ãã ã•ã„。

view.Present((error) => {
  // handle the error
});

ペイウォールã®è¡¨ç¤ºæ–¹æ³•ã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€ã‚¬ã‚¤ãƒ‰ã‚’å‚ç…§ã—ã¦ãã ã•ã„。

3. ボタンアクションを処ç†ã™ã‚‹

ユーザーãŒãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«å†…ã®ãƒœã‚¿ãƒ³ã‚’クリックã™ã‚‹ã¨ã€Unity SDK ãŒè³¼å…¥ã¨å¾©å…ƒã‚’自動的ã«å‡¦ç†ã—ã¾ã™ã€‚ãŸã ã—ã€ã‚«ã‚¹ã‚¿ãƒ ã¾ãŸã¯äº‹å‰å®šç¾©ã•れ㟠ID ã‚’æŒã¤ãã®ä»–ã®ãƒœã‚¿ãƒ³ã«ã¤ã„ã¦ã¯ã€ã‚³ãƒ¼ãƒ‰ã§ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’処ç†ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚

ãŸã¨ãˆã°ã€ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã«ã¯é€šå¸¸ã€é–‰ã˜ã‚‹ãƒœã‚¿ãƒ³ã‚„é–‹ãã¹ã URL(利用è¦ç´„やプライãƒã‚·ãƒ¼ãƒãƒªã‚·ãƒ¼ãªã©ï¼‰ãŒã‚りã¾ã™ã€‚ã“れらã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’処ç†ã™ã‚‹ã«ã¯ã€ã‚¯ãƒ©ã‚¹ãŒ AdaptyPaywallsEventsListener インターフェースを実装ã—ã€ãƒªã‚¹ãƒŠãƒ¼ã¨ã—ã¦ç™»éŒ²ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚

ボタンã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¨ã‚¤ãƒ™ãƒ³ãƒˆã®å‡¦ç†æ–¹æ³•ã«ã¤ã„ã¦ã¯ã€å„ガイドをå‚ç…§ã—ã¦ãã ã•ã„。

public class YourClass : MonoBehaviour, AdaptyPaywallsEventsListener
{
    void Start()
    {
        // Register this class as the paywall events listener
        Adapty.SetPaywallsEventsListener(this);
    }

    // AdaptyPaywallsEventsListener method - handles button actions
    public void PaywallViewDidPerformAction(
        AdaptyUIPaywallView view,
        AdaptyUIUserAction action
    ) {
        switch (action.Type) {
            case AdaptyUIUserActionType.Close:
                view.Dismiss(null);
                break;
            case AdaptyUIUserActionType.OpenUrl:
                Application.OpenURL(action.Value);
                break;
            default:
                break;
        }
    }
}

次ã®ã‚¹ãƒ†ãƒƒãƒ—

ã”質å•ã‚„ãŠå›°ã‚Šã®ã“ã¨ãŒã‚れã°ã€ã‚µãƒãƒ¼ãƒˆãƒ•ォーラムをã”覧ãã ã•ã„。よãã‚る質å•ã¸ã®å›žç­”を見ã¤ã‘ãŸã‚Šã€ã”自身ã®è³ªå•を投稿ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãƒãƒ¼ãƒ ã¨ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãŒã‚µãƒãƒ¼ãƒˆã„ãŸã—ã¾ã™ï¼

ペイウォールをアプリã«è¡¨ç¤ºã™ã‚‹æº–å‚™ãŒæ•´ã„ã¾ã—ãŸã€‚App Store サンドボックスã¾ãŸã¯ Google Play ストアã§ãƒ†ã‚¹ãƒˆè³¼å…¥ã‚’行ã„ã€ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‹ã‚‰ãƒ†ã‚¹ãƒˆè³¼å…¥ã‚’完了ã§ãã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。

次ã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã‚¢ã‚¯ã‚»ã‚¹ãƒ¬ãƒ™ãƒ«ã‚’確èªã—ã€é©åˆ‡ãªãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’表示ã—ãŸã‚Šã€æœ‰æ–™æ©Ÿèƒ½ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’付与ã—ãŸã‚Šã§ãるよã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚

完全ãªå®Ÿè£…例

以下ã¯ã€ã™ã¹ã¦ã®æ‰‹é †ã‚’アプリã«çµ±åˆã—ãŸå ´åˆã®ä¾‹ã§ã™ã€‚

using System;
using UnityEngine;
using AdaptySDK;

public class PaywallManager : MonoBehaviour, AdaptyPaywallsEventsListener
{
    [SerializeField] private string placementId = "YOUR_PLACEMENT_ID";
    
    private AdaptyUIPaywallView currentPaywallView;
    
    void Start()
    {
        // Register for paywall events
        Adapty.SetPaywallsEventsListener(this);
        GetAndDisplayPaywall();
    }
    
    private void GetAndDisplayPaywall()
    {
        Adapty.GetPaywall(placementId, (paywall, error) => {
            if (error != null) {
                Debug.LogError("Error getting paywall: " + error.Message);
                return;
            }
            
            if (paywall.HasViewConfiguration) {
                CreateAndPresentPaywallView(paywall);
            } else {
                Debug.LogWarning("Paywall was not created using the builder");
            }
        });
    }
    
    private void CreateAndPresentPaywallView(AdaptyPaywall paywall)
    {
        var parameters = new AdaptyUICreatePaywallViewParameters();
        
        AdaptyUI.CreatePaywallView(paywall, parameters, (view, error) => {
            if (error != null) {
                Debug.LogError("Error creating paywall view: " + error.Message);
                return;
            }
            
            currentPaywallView = view;
            
            view.Present((presentError) => {
                if (presentError != null) {
                    Debug.LogError("Error presenting paywall: " + presentError.Message);
                    return;
                }
                
                Debug.Log("Paywall presented successfully");
            });
        });
    }
    
    // AdaptyPaywallsEventsListener implementation
    public void PaywallViewDidPerformAction(
        AdaptyUIPaywallView view, 
        AdaptyUIUserAction action
    ) {
        switch (action.Type) {
            case AdaptyUIUserActionType.Close:
                Debug.Log("Close button pressed");
                view.Dismiss(null);
                break;
            case AdaptyUIUserActionType.OpenUrl:
                Application.OpenURL(action.Value);
                break;
            default:
                break;
        }
    }
    
    // Required interface methods (implement as needed)
    public void PaywallViewDidAppear(AdaptyUIPaywallView view) { }
    public void PaywallViewDidDisappear(AdaptyUIPaywallView view) { }
    public void PaywallViewDidSelectProduct(AdaptyUIPaywallView view, string productId) { }
    public void PaywallViewDidStartPurchase(AdaptyUIPaywallView view, AdaptyPaywallProduct product) { }
    public void PaywallViewDidFinishPurchase(AdaptyUIPaywallView view, AdaptyPaywallProduct product, AdaptyPurchaseResult purchasedResult) { }
    public void PaywallViewDidFailPurchase(AdaptyUIPaywallView view, AdaptyPaywallProduct product, AdaptyError error) { }
    public void PaywallViewDidStartRestore(AdaptyUIPaywallView view) { }
    public void PaywallViewDidFinishRestore(AdaptyUIPaywallView view, AdaptyProfile profile) { }
    public void PaywallViewDidFailRestore(AdaptyUIPaywallView view, AdaptyError error) { }
    public void PaywallViewDidFailRendering(AdaptyUIPaywallView view, AdaptyError error) { }
    public void PaywallViewDidFailLoadingProducts(AdaptyUIPaywallView view, AdaptyError error) { }
    public void PaywallViewDidFinishWebPaymentNavigation(AdaptyUIPaywallView view, AdaptyPaywallProduct product, AdaptyError error) { }
    
    public void ShowPaywall()
    {
        GetAndDisplayPaywall();
    }
    
    void OnDestroy()
    {
        if (currentPaywallView != null) {
            currentPaywallView.Dismiss(null);
        }
    }
}
ÿÿÿÿ