Flutter SDK ile mobil uygulamada satın alma yapma

Uygulamanızda paywall’ları göstermek, kullanıcılara premium içerik veya hizmetlere erişim sunmanın önemli bir adımıdır. Ancak paywall’larınızı özelleştirmek için Paywall Builder kullanıyorsanız, satın alma işlemlerini desteklemek için yalnızca bu paywall’ları göstermek yeterlidir.

Paywall Builder kullanmıyorsanız, satın alma işlemini tamamlamak ve istenen içeriğin kilidini açmak için .makePurchase() adlı ayrı bir yöntemi kullanmanız gerekir. Bu yöntem, kullanıcıların paywall’larla etkileşime geçmesi ve istedikleri işlemleri gerçekleştirmesi için bir köprü görevi görür.

Paywall’ınızda, kullanıcının satın almak istediği ürün için aktif bir promosyon teklifi varsa, Adapty bunu satın alma sırasında otomatik olarak uygular.

Warning

Başlangıç teklifinin otomatik olarak uygulanabilmesi için Paywall Builder kullanılarak oluşturulmuş paywallların kullanılması gerektiğini unutmayın.

Diğer durumlarda, iOS’ta başlangıç teklifi uygunluğunu doğrulamanız gerekecektir. Bu adımı atlamak, yayın sırasında uygulamanızın reddedilmesine yol açabilir. Bunun yanı sıra, başlangıç teklifine hak kazanan kullanıcılardan tam ücret alınmasına neden olabilir.

Başlangıç yapılandırmasını tek bir adımı atlamadan tamamladığınızdan emin olun. Bu olmadan satın almaları doğrulayamayız.

Satın alma işlemi gerçekleştirme

Note

Paywall Builder kullanıyor musunuz? Satın alma işlemleri otomatik olarak gerçekleştirilir; bu adımı atlayabilirsiniz.

Adım adım rehber mi arıyorsunuz? Tam bağlamıyla uçtan uca uygulama talimatları için hızlı başlangıç kılavuzuna göz atın.

try {
  final purchaseResult = await Adapty().makePurchase(product: product);
    switch (purchaseResult) {
      case AdaptyPurchaseResultSuccess(profile: final profile):
        if (profile.accessLevels['premium']?.isActive ?? false) {
          // Grant access to the paid features
        }
        break;
      case AdaptyPurchaseResultPending():
        break;
      case AdaptyPurchaseResultUserCancelled():
        break;
      default:
        break;
    }
} on AdaptyError catch (adaptyError) {
    // Handle the error
} catch (e) {
    // Handle the error
}

İstek parametreleri:

ParametreZorunlulukAçıklama
ProductzorunluPaywall’dan alınan bir AdaptyPaywallProduct nesnesi.

Yanıt parametreleri:

ParametreAçıklama
Profile

İstek başarılı olursa yanıt bu nesneyi içerir. Bir AdaptyProfile nesnesi, kullanıcının uygulama içindeki access level’ları, abonelikleri ve tek seferlik satın almaları hakkında kapsamlı bilgi sağlar.

Kullanıcının uygulamaya gerekli erişime sahip olup olmadığını belirlemek için access level durumunu kontrol edin.

Warning

Not: Apple’ın StoreKit sürümü v2.0’ın altında ve Adapty SDK sürümü v2.9.0’ın altında kullanıyorsanız, bunun yerine Apple App Store paylaşılan sırrı sağlamanız gerekir. Bu yöntem şu anda Apple tarafından kullanımdan kaldırılmıştır.

Satın alma sırasında aboneliği değiştirme

Bir kullanıcı mevcut aboneliğini yenilemek yerine yeni bir abonelik seçtiğinde, bu işlemin nasıl gerçekleşeceği uygulama mağazasına göre değişir:

  • App Store’da abonelik, abonelik grubu içinde otomatik olarak güncellenir. Kullanıcı bir gruptan abonelik satın alırken başka bir gruptan aktif aboneliği varsa, her iki abonelik de aynı anda aktif olur.
  • Google Play’de abonelik otomatik olarak güncellenmez. Geçişi aşağıda açıklandığı şekilde mobil uygulama kodunuzda yönetmeniz gerekir. Android’de aboneliği başka bir abonelikle değiştirmek için .makePurchase() metodunu ek parametre ile çağırın:
try {
  final subscriptionUpdateParams = AdaptyAndroidSubscriptionUpdateParameters(
    'OLD_PRODUCT_ID',
    AdaptyAndroidSubscriptionUpdateReplacementMode.immediateWithTimeProration,
  );

  final result = await Adapty().makePurchase(
    product: product,
    parameters: AdaptyPurchaseParameters(
      subscriptionUpdateParams: subscriptionUpdateParams,
    ),
  );
  
  // başarılı çapraz yükseltme
} on AdaptyError catch (adaptyError) {
  // Hatayı işle
} catch (e) {
  // Hatayı işle
}

Ek istek parametresi:

ParametreZorunlulukAçıklama
parameterszorunlusubscriptionUpdateParams alanı bir AdaptyAndroidSubscriptionUpdateParameters nesnesine ayarlanmış AdaptyPurchaseParameters nesnesi.
Google Developer belgelerinde abonelikler ve değiştirme modları hakkında daha fazla bilgi edinebilirsiniz:

iOS’ta teklif kodlarını kullanma

Teklif kodları hakkında

Teklif kodları, belirli kullanıcılara indirim veya ücretsiz deneme sunmanızı sağlar. Otomatik olarak uygulanan normal tekliflerin aksine, teklif kodları uygulama dışında — e-posta kampanyaları, sosyal medya veya basılı materyaller aracılığıyla — dağıtılır. Kullanıcılar bu kodları App Store’a girerek, bir kullanım URL’si aracılığıyla veya uygulama içi bir diyalog üzerinden kullanabilir.

Teklif kodlarını ayarlamak için App Store Connect’te bir aboneliği açın ve Offer Codes bölümüne gidin. Üç tür teklif kodu oluşturabilirsiniz:

  • Free — abonelik belirli bir süre boyunca ücretsizdir; sonraki yenilemede tam fiyat uygulanır.
  • Pay as you go — kullanıcı, belirli bir süre boyunca her fatura döngüsünde indirimli fiyat öder; ardından abonelik tam fiyatla yenilenir.
  • Pay up front — kullanıcı, tüm teklif süresi için tek seferlik indirimli bir fiyat öder; ardından abonelik tam fiyatla yenilenir.

Teklif kodlarını Adapty’ye eklemenize gerek yoktur. Apple, teklif süresi boyunca gerçekleşen her işlemi teklif kodu kategorisiyle etiketler. Bu, ilk kullanımı ve sonraki tüm indirimli yenilemeleri kapsar. Adapty bu etiketi algılar ve her işlemi offer_code teklif kategorisiyle kaydeder. Teklif süresi sona erip abonelik tam fiyatla yenilendiğinde etiket artık mevcut olmaz. Adapty Kontrol Paneli’nde Offer Code teklif türüne göre analizleri filtreleyebilirsiniz.

Gelir tutarsızlığı sorun giderme

Bir teklif kodu işleminin Adapty’de indirimli teklif fiyatı yerine tam ürün fiyatıyla göründüğünü fark ederseniz App Store Connect’te aşağıdakileri doğrulayın:

  • Teklif kodunun, kullanıcıların kullanabileceği tüm bölgeler için doğru fiyatlandırmanın yapılandırıldığından emin olun.
  • Teklif fiyatının, kullanıcının bulunduğu ülke veya bölge için ayarlandığından emin olun. Apple, işlemde bölgesel fiyatı gönderir. Teklif için bölgesel bir fiyat yapılandırılmamışsa Apple tam ürün fiyatını gönderebilir.

Adapty Kontrol Paneli’nde Offer Code teklif türü ve Offer Discount Type filtreleriyle teklif kodu işlemlerini filtreleyip doğrulayabilirsiniz.

Eski promosyon kodları (kullanımdan kaldırıldı)

Warning

Apple, Mart 2026’da uygulama içi satın almalar için promosyon kodlarını kullanımdan kaldırdı. Teklif kodları, yapılandırılabilir uygunluk koşulları, son kullanma tarihleri ve çeyrek başına 1 milyona kadar kod gibi daha fazla özellikle bunların yerini alıyor. Uygulama içi satın almalar için daha önce promosyon kodu kullandıysanız App Store Connect’te teklif kodlarına geçiş yapın.

Eski promosyon kodları (uygulama başına sürüm başına 100 ile sınırlı), bir aboneliğe ücretsiz erişim sağlıyordu. Teklif kodlarının aksine, Apple promosyon kodu işlemlerine indirim bilgisi eklemiyordu — makbuzda tam ürün fiyatını gönderiyordu. Sonuç olarak Adapty bu işlemleri tam fiyat üzerinden kaydetti ve bu durum Adapty analizleri ile App Store Connect arasında gelir tutarsızlıklarına yol açtı.

Ücretsiz olması gereken ancak geçmişte tam fiyatla kaydedilmiş işlemler görüyorsanız bunlar büyük olasılıkla eski promosyon kodlarından kaynaklanmaktadır. Bu kodlar artık kullanımdan kaldırıldığından, doğru gelir takibi için teklif kodlarına geçiş yapın.

Uygulamanızda kod kullanma sayfasını görüntülemek için:

try {
  await Adapty().presentCodeRedemptionSheet();
} on AdaptyError catch (adaptyError) {
  // handle the error
} catch (e) {
  // handle the error
}
Danger

Gözlemlerimize göre, bazı uygulamalarda Teklif Kodu Kullanma sayfası güvenilir şekilde çalışmayabilir. Kullanıcıyı doğrudan App Store’a yönlendirmenizi öneririz. Bunu yapmak için aşağıdaki formattaki URL’yi açmanız gerekir: https://apps.apple.com/redeem?ctx=offercodes&id={apple_app_id}&code={code}

Ön ödemeli planları yönetme (Android)

Uygulama kullanıcılarınız ön ödemeli plan satın alabiliyorsa (örneğin, birkaç aylık yenilenemez bir abonelik), ön ödemeli planlar için beklemedeki işlemleri etkinleştirebilirsiniz.

await Adapty().activate(
  configuration: AdaptyConfiguration(apiKey: 'YOUR_PUBLIC_SDK_KEY')
    ..withGoogleEnablePendingPrepaidPlans(true),
);