Paywall olaylarını yönet

Bu rehber; satın alma, geri yükleme, ürün seçimi ve paywall render işlemlerine ait olay yönetimini kapsar. Ayrıca buton işlemlerini de (paywallı kapatma, bağlantı açma vb.) uygulamanız gerekir. Ayrıntılar için buton aksiyonlarını yönetme rehberimize bakın.

Paywall Builder ile yapılandırılan paywall’lar, satın alma ve geri yükleme işlemleri için ek kod gerektirmez. Ancak uygulamanızın yanıt verebileceği bazı olaylar üretirler. Bu olaylar; buton tıklamaları (kapat butonları, URL’ler, ürün seçimleri vb.) ve paywall üzerinde gerçekleştirilen satın alma ile ilgili aksiyonlara dair bildirimleri kapsar. Bu olaylara nasıl yanıt vereceğinizi aşağıda öğrenebilirsiniz.

Bu rehber yalnızca Adapty SDK v3.3.0 veya üzerini gerektiren yeni Paywall Builder paywall’ları içindir.

Adapty SDK’nın bir mobil uygulamaya nasıl entegre edildiğini gerçek bir örnekle görmek ister misiniz? Tam kurulumu, paywall’ların gösterimini, satın alma işlemlerini ve diğer temel işlevleri içeren örnek uygulamalarımıza göz atın.

Olayları yönetme

Mobil uygulamanızdaki paywall ekranında gerçekleşen süreçleri kontrol etmek veya izlemek için AdaptyPaywallsEventsListener arayüzünü uygulayın:

using UnityEngine;
using AdaptySDK;

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

    // Implement all required interface methods below
}

Kullanıcı kaynaklı olaylar

Paywall göründü

Paywall görünümü ekranda gösterildiğinde tetiklenir.

iOS’ta, kullanıcı bir paywall içindeki web paywall butonuna dokunduğunda ve uygulama içi tarayıcıda bir web paywall açıldığında da tetiklenir.

public void PaywallViewDidAppear(AdaptyUIPaywallView view) { }

Paywall kayboldu

Paywall görünümü ekrandan kapatıldığında tetiklenir.

iOS’ta, bir paywalldan uygulama içi tarayıcıda açılan web paywall ekrandan kaybolduğunda da tetiklenir.

public void PaywallViewDidDisappear(AdaptyUIPaywallView view) { }

Ürün seçimi

Kullanıcı ya da sistem tarafından satın alma için bir ürün seçildiğinde tetiklenir.

public void PaywallViewDidSelectProduct(
    AdaptyUIPaywallView view, 
    string productId
) { }
Olay örneği (Genişletmek için tıklayın)
{
  "productId": "premium_monthly"
}

Satın alma başladı

Kullanıcı satın alma sürecini başlattığında tetiklenir.

public void PaywallViewDidStartPurchase(
    AdaptyUIPaywallView view, 
    AdaptyPaywallProduct product
) { }
Olay örneği (Genişletmek için tıklayın)
{
  "product": {
    "vendorProductId": "premium_monthly",
    "localizedTitle": "Premium Monthly",
    "localizedDescription": "Premium subscription for 1 month",
    "localizedPrice": "$9.99",
    "price": 9.99,
    "currencyCode": "USD"
  }
}

Başarılı, iptal edilmiş veya beklemedeki satın alma

Satın alma başarılı olursa, kullanıcı iptal ederse veya satın alma beklemede kalırsa bu metod tetiklenir. Kullanıcı iptalleri ve beklemedeki ödemeler (örn. ebeveyn onayı gerekli) PaywallViewDidFailPurchase yerine bu metodu tetikler.

public void PaywallViewDidFinishPurchase(
    AdaptyUIPaywallView view, 
    AdaptyPaywallProduct product, 
    AdaptyPurchaseResult purchasedResult
) { }
Olay örnekleri (Genişletmek için tıklayın)
// 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"
  }
}

Bu durumda ekranı kapatmanızı öneririz.

Başarısız satın alma

Bir hata nedeniyle satın alma başarısız olursa bu metod tetiklenir. StoreKit/Google Play Billing hataları (ödeme kısıtlamaları, geçersiz ürünler, ağ hataları), işlem doğrulama hataları ve sistem hataları buna dahildir. Kullanıcı iptallerinin iptal sonucuyla PaywallViewDidFinishPurchase’i, beklemedeki ödemelerin ise bu metodu tetiklemediğini unutmayın.

public void PaywallViewDidFailPurchase(
    AdaptyUIPaywallView view, 
    AdaptyPaywallProduct product, 
    AdaptyError error
) { }
Olay örneği (Genişletmek için tıklayın)
{
  "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"
    }
  }
}

Geri yükleme başladı

Kullanıcı geri yükleme sürecini başlattığında tetiklenir:

public void PaywallViewDidStartRestore(AdaptyUIPaywallView view) { }

Başarılı geri yükleme

Satın alma geri yüklemesi başarılı olduğunda tetiklenir:

public void PaywallViewDidFinishRestore(
    AdaptyUIPaywallView view, 
    AdaptyProfile profile
) { }
Olay örneği (Genişletmek için tıklayın)
{
  "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"
      }
    ]
  }
}

Kullanıcının gerekli accessLevel’a sahip olması durumunda ekranı kapatmanızı öneririz. Bunu nasıl kontrol edeceğinizi öğrenmek için Abonelik durumu konusuna bakın.

Başarısız geri yükleme

Satın alma geri yüklemesi başarısız olduğunda tetiklenir:

public void PaywallViewDidFailRestore(
    AdaptyUIPaywallView view, 
    AdaptyError error
) { }
Olay örneği (Genişletmek için tıklayın)
{
  "error": {
    "code": "restore_failed",
    "message": "Purchase restoration failed",
    "details": {
      "underlyingError": "No previous purchases found"
    }
  }
}

Web ödeme navigasyonu tamamlandı

Satın alma için bir web paywall açılmaya çalışıldıktan sonra (başarılı ya da başarısız), bu metod tetiklenir:

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

Parametreler:

  • product: Web paywallın açıldığı (veya açılmaya çalışıldığı) ürün
  • error: Web paywall başarıyla açıldıysa null, başarısız olduysa bir AdaptyError
Olay örnekleri (Genişletmek için tıklayın)
// 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"
    }
  }
}

Veri çekme ve render işlemleri

Ürün yükleme hataları

Ürün yükleme başarısız olduğunda tetiklenir ve AdaptyError döndürür. Başlatma sırasında ürün dizisini geçmediyseniz AdaptyUI gerekli nesneleri sunucudan kendi alır. Bu işlem başarısız olabilir; AdaptyUI hatayı bu metodu çağırarak bildirir:

public void PaywallViewDidFailLoadingProducts(
    AdaptyUIPaywallView view, 
    AdaptyError error
) { }
Olay örneği (Genişletmek için tıklayın)
{
  "error": {
    "code": "products_loading_failed",
    "message": "Failed to load products from the server",
    "details": {
      "underlyingError": "Network timeout"
    }
  }
}

Render hataları

Arayüz render sırasında bir hata oluştuğunda tetiklenir ve AdaptyError döndürür:

public void PaywallViewDidFailRendering(
    AdaptyUIPaywallView view, 
    AdaptyError error
) { }
Olay örneği (Genişletmek için tıklayın)
{
  "error": {
    "code": "rendering_failed",
    "message": "Failed to render paywall interface",
    "details": {
      "underlyingError": "Invalid paywall configuration"
    }
  }
}

Normal koşullarda bu tür hatalar yaşanmamalıdır; böyle bir hatayla karşılaşırsanız lütfen bize bildirin.