Capacitor SDK ile mobil uygulamada satın alma yapma

Mobil uygulamanızda paywall’ları görüntülemek, kullanıcılara premium içerik veya hizmetlere erişim sunmanın temel adımlarından biridir. Ancak bir paywall, yalnızca Adapty’nin ekranı render ettiği durumlarda — yani bir flow veya eski Paywall Builder ile oluşturulmuş bir paywall söz konusu olduğunda — satın almaları kendi başına destekler.

Ekranı kendi kodunuzla render ediyorsanız, satın almayı tamamlamak ve istenen içeriğin kilidini açmak için .makePurchase() adlı ayrı bir yöntem 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 geçit işlevi görür.

Kullanıcının satın almaya çalıştığı ürün için paywall’ınızda aktif bir promosyon teklifi varsa, Adapty bunu satın alma sırasında otomatik olarak uygular.

Tek bir adımı bile atlamadan başlangıç yapılandırmasını tamamladığınızdan emin olun. Bu olmadan satın alımları doğrulayamayız.

Satın alma yap

Note

Adapty ekranınızı mı oluşturuyor? Bir flow veya Paywall Builder paywall için satın almalar otomatik olarak işlenir—bu adımı atlayabilirsiniz.

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


try {
  const result = await adapty.makePurchase({ product });
  
  if (result.type === 'success') {
    const isSubscribed = result.profile?.accessLevels?.['YOUR_ACCESS_LEVEL']?.isActive;
    
    if (isSubscribed) {
      // Grant access to the paid features
      console.log('User is now subscribed!');
    }
  } else if (result.type === 'user_cancelled') {
    console.log('Purchase cancelled by user');
  } else if (result.type === 'pending') {
    console.log('Purchase is pending');
  }
} catch (error) {
  console.error('Purchase failed:', error);
}

İstek parametreleri:

ParametreZorunlulukAçıklama
productzorunlugetPaywallProducts ile flow üzerinden alınan bir AdaptyPaywallProduct nesnesi.

Yanıt parametreleri:

ParametreAçıklama
resultSatın alma sonucunu belirten type alanı ('success', 'user_cancelled' veya 'pending') ve başarılı satın almalarda güncellenmiş AdaptyProfile içeren profile alanını barındıran bir AdaptyPurchaseResult nesnesi.

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 farklılık gösterir:

  • App Store’da abonelik, abonelik grubu içinde otomatik olarak güncellenir. Kullanıcı bir gruptan abonelik satın alırken başka bir grupta da aktif aboneliği varsa, her iki abonelik 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 biriyle değiştirmek için .makePurchase() metodunu ek parametre ile çağırın:


try {
  const result = await adapty.makePurchase({ 
    product,
    params: {
      android: {
        subscriptionUpdateParams: {
          oldSubVendorProductId: 'old_product_id',
          prorationMode: 'charge_prorated_price'
        },
        isOfferPersonalized: true
      }
    }
  });
  
  if (result.type === 'success') {
    const isSubscribed = result.profile?.accessLevels?.['YOUR_ACCESS_LEVEL']?.isActive;
    
    if (isSubscribed) {
      // Grant access to the paid features
      console.log('Subscription updated successfully!');
    }
  } else if (result.type === 'user_cancelled') {
    console.log('Purchase cancelled by user');
  } else if (result.type === 'pending') {
    console.log('Purchase is pending');
  }
} catch (error) {
  console.error('Purchase failed:', error);
}
ParametreVarlıkAçıklama
paramsisteğe bağlıMakePurchaseParamsInput türünde, platforma özgü satın alma parametrelerini içeren bir nesne.

MakePurchaseParamsInput yapısı şunları içerir:

{
  android: {
    subscriptionUpdateParams: {
      oldSubVendorProductId: 'old_product_id',
      prorationMode: 'charge_prorated_price'
    },
    isOfferPersonalized: true
  }
}

Google Geliştirici belgelerinde abonelikler ve değiştirme modları hakkında daha fazla bilgi edinebilirsiniz:

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

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

await adapty.activate({
  apiKey: 'YOUR_PUBLIC_SDK_KEY',
  params: {
    android: {
        pendingPrepaidPlansEnabled: true,
    },
  }
});

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 ekranını göstermek için:


try {
  await adapty.presentCodeRedemptionSheet();
} catch (error) {
  console.error('Failed to present code redemption sheet:', error);
}
Danger

Gözlemlerimize göre, bazı uygulamalarda Teklif Kodu Kullanma ekranı 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}

App Store’dan tanıtılan uygulama içi satın almalar

Info

Uygulamanız, SDK 4.1.1 sürümünden itibaren iOS 16.4 veya sonrasında tanıtılan uygulama içi satın almaları devralabilir. iOS 16.4 altında bu olay hiçbir zaman tetiklenmez ve tanıtılan satın almalar kendi kendine tamamlanır. Olay, Android’de de hiçbir zaman tetiklenmez.

Bir kullanıcı App Store ürün sayfanızdan satın alma işlemi başlattığında ve işlem uygulamanıza aktarıldığında, SDK bunu otomatik olarak tamamlar — Apple satın alma sistemi ekranı hemen görünür ve Adapty işlemi diğer satın almalar gibi işler. Bunun için tarafınızdan herhangi bir kod yazmanıza gerek yoktur.

Tanıtılan ürün bir abonelik teklifi içeriyorsa, SDK satın alma sırasında bunu otomatik olarak uygular. Teklif, App Store satın alma niyetinden okunur; bu bilgi iOS 18.0 ve sonrasında sunulmaktadır. iOS 16.4–17.x’te ise satın alma temel fiyat üzerinden gerçekleşir.

Tamamlamayı kendiniz devralmak için — örneğin önce kendi ekranınızı göstermek amacıyla — 'onPromotedPurchaseReceived' olayını dinleyin ve ürünü makePromotedPurchase’e geçirin:


const listener = await adapty.addListener('onPromotedPurchaseReceived', async ({ product }) => {
  const result = await adapty.makePromotedPurchase({ product });
  // process the purchase result
});
Warning

Dinleyiciniz kayıtlıyken SDK, promosyonlu satın almaları sizin adınıza tamamlamayı durdurur. Eğer işleyiciniz hiçbir zaman makePromotedPurchase çağırmazsa, satın alma gerçekleşmez: App Store ürünü uygulamanıza teslim eder ve bekler.

makePromotedPurchase hiçbir satın alma parametresi almaz — promosyonlu bir ürün paywall’dan değil, App Store’dan gelir; dolayısıyla herhangi bir paywall bağlamı taşımaz. makePurchase ile aynı AdaptyPurchaseResult değerini döndürür.

adapty.removeAllListeners() çağrısı, promosyon satın alma dinleyicinizi diğerleriyle birlikte kaldırır ve SDK’nın otomatik tamamlaması devreye girer. Uygulamanız tamamlamayı hâlâ yönetecekse dinleyiciyi yeniden kaydedin.