Google Play Refund Management

Google Play acknowledgement çağrısını atlarsanız satış üç gün içinde kendiliğinden çözülür

Bir satın alma tamamlanır, ardından üç gün sonra Google Play bu satın almayı iade edip geçersiz kılar; ne bir müşteri ne de bir destek temsilcisi işin içindedir, yalnızca sunucunuzun hiçbir zaman göndermediği bir callback vardır. İşte kuralın tam metni, satın almaların bu kuraldan nasıl kaçtığı ve kaybolan her satışın gerçekte size neye mal olduğu.

5 min read
Google Play acknowledgement çağrısını atlarsanız satış üç gün içinde kendiliğinden çözülür

Bir satın alma tamamlanır, müşteri ürününü alır ve üç gün sonra her şey ortadan kalkar. Google Play ödemeyi geri alır ve hakkı geri çeker; ne müşteri bunu talep eder ne de destek ekibinizden biri bir düğmeye dokunur. Satın alma sessizce başarısız olur, çünkü sunucunuz Google'a işlemin tamamlandığını hiç bildirmemiştir.

Kuralın tamamı bu kadar basit: bir Google Play satın almasını üç gün içinde acknowledge edin, yoksa Google bunu otomatik olarak iade eder ve geçersiz kılar. Her seferinde, istisnasız. İki mağazada da bir satışın geri dönebileceği tüm yollar arasında bu, tamamen kendi entegrasyonunuzun içinde yer alan çok az sayıdaki durumdan biridir; bu da onu gelir kaybetmenin en sessiz yollarından biri hâline getirir.

Bu bir dolandırıcılık kontrolü değildir, bir politika kararı da değildir. Hiç tetiklenmemiş bir callback'tir. Düzeltmesi küçüktür, ama bunu atlayarak kaybettiğiniz para küçük değildir; bu yüzden kuralın tam olarak ne dediğini, satın almaların bu kuraldan nasıl kaçtığını ve kaybolan her satışın beraberinde neyi sürüklediğini bilmekte fayda var.

Google'ın dokümantasyonu aslında neyi şart koşuyor

Play Billing, uygulamanızın hakkı tanıdıktan ve kullanıcıya satın almanın gerçekleştiğini bildirdikten sonra Google'a bunu bildirmesini şart koşar. Google'ın dokümantasyonu bunun için net bir rakam veriyor: bu bildirim, "satın almanın otomatik olarak iade edilmemesi ve hakkın geçersiz kılınmaması için üç gün içinde yapılmalıdır." Tek seferlik ürün dokümantasyonu da aynı ifadeyi hiç yumuşatmadan tekrarlıyor. Acknowledgement adımını atlarsanız "kullanıcı otomatik olarak iade alır ve Google Play satın almayı geçersiz kılar." Bir aboneliğin ilk satın alımı da aynı kurala tabidir.

Acknowledgement bir evrak işi değildir. Google'ın teslimatın gerçekten gerçekleştiğine dair sahip olduğu tek sinyaldir. Sinyal yoksa Google hiçbir şeyin teslim edilmediğini varsayar ve size danışmadan alıcı için tüm işlemi geri alır. Alıcı beklenmedik bir iade görür. Siz ise defterlerinizden silinmiş bir satış görürsünüz.

Önemli noktalar

  • Bir satışı 72 saat boyunca onaylanmamış bırakın, geri alma kendiliğinden gerçekleşir: alıcıya parası geri ödenir, hak geri çekilir, kimseye danışılmaz. Bunu tetikleyen bir alıcı değildir. Hiçbir şey söylemeyen backend'inizdir ve bunu önleyebilecek olan da aynı şekilde backend'inizdir.

  • Geri sayımı başlatan şey PURCHASED durumuna ulaşılmasıdır; bu da ödeme anını son teslim tarihiniz açısından önemsiz kılar. PENDING durumunda bekleyen hiçbir şeye zamanlayıcı bağlı değildir ve henüz bir onay çağrısını hak etmez.

  • İki çağrıdan biri bu yükümlülüğü yerine getirir. Tüketilebilir bir ürün için purchases.products.consume'u çalıştırın, tüketilebilir olmayan her şey için purchases.products.acknowledge ve purchases.subscriptions.acknowledge'a başvurun. Google her ikisini de ürünün teslim edildiğinin kanıtı olarak kabul eder.

  • Abonelikler bunu sizden yalnızca bir kez, kayıt sırasında ister. Sonrasındaki her fatura döngüsü Google'ın kendisi tarafından halledilir ve kodunuz parmağını bile kıpırdatmadan onaylanmış olarak işaretlenir.

  • Yedi günden kısa süren bir ön ödemeli plan mı satıyorsunuz? Süreniz, planın ne kadar sürdüğünün yüzde ellisine düşer. Ürün ne kadar kısaysa, fitil de o kadar kısadır.

  • Alıcıya yalnızca satış fiyatı geri gider. İşlem süresi, model API harcaması, depolama faturaları, içerik üreticisi ödemeleri: bu para, teslimat sırasında hesabınızdan çıkmıştır ve hiçbiri geri dönmez. Gerçek zarar, iade kaleminin gösterdiği rakamı aşar.

  • iOS'ta hiçbir şey bu şekilde işlemez. StoreKit, tamamlanmamış bir işlemi her açılışta yeniden sunar ve sabırla bekler, ödemeyi bir kez bile geri almaz. Bu özel risk yalnızca Google Play'de yaşar, başka hiçbir yerde değil.

Son teslim tarihi ödeme anında başlamaz

"Satın al"a dokunmak zamanlayıcıyı başlatmaz. Satın alma durumunun önce PURCHASED'a geçmesi gerekir ve bazı satın almalar bundan önce PENDING durumunda bekler. Nakit ödeme yöntemleri böyledir, yavaş banka havaleleri ve ebeveyn onayı istekleri de öyle. Google bunu doğrudan ifade ediyor: "Üç günlük acknowledgement penceresi yalnızca satın alma durumu PENDING'den PURCHASED'a geçtiğinde başlar."

Bu, akışı nasıl kurduğunuz açısından iki şey demek. Hakkı yalnızca durum PURCHASED olduğunda tanıyın, asla PENDING durumundayken tanımayın; aksi halde aslında hiç gelmeyebilecek bir para karşılığında ürün vermiş olursunuz. Ayrıca PENDING durumundaki bir satın almayı da acknowledge etmeyin, çünkü henüz onaylanacak bir şey yoktur. BillingClient'ı kurarken enablePendingPurchases()'ı çağırın, durum geçişini bekleyin ve saymaya yalnızca PURCHASED'a ulaştığında başlayın.

PENDING'i "henüz satılmadı" olarak okuyun. Hiçbir şey borçlu değilsiniz: ne hak, ne acknowledgement, ne de gelir olarak kaydedilen bir şey. PURCHASED'a döndüğü an, hem hak hem de üç günlük geri sayım sizin sorununuz hâline gelir.

Sattığınız şey için doğru API çağrısını seçmek

Son teslim tarihini temizleyen iki API yolu vardır ve hangisinin geçerli olduğu ne sattığınıza bağlıdır. İkisi de şartı eşit derecede karşılar. Aralarındaki fark, ürüne sonrasında başka ne yaptıklarıdır.

Tüketilebilir ürünler tüketilir. Bu, güvenli bir backend üzerinde purchases.products.consume veya istemci tarafında Play Billing Library'den consumeAsync() anlamına gelir. Tüketme işlemi çifte görev görür, çünkü hem acknowledgement şartını karşılar hem de ürünü yeniden satın alınabilir hâle getirir. Jetonlar, krediler veya müşterinin tekrar tekrar satın alabileceği tek seferlik bir üretim için istediğiniz şey tam olarak budur.

Tüketilemeyen ürünler ve abonelikler ise bunun yerine purchases.products.acknowledge, purchases.subscriptions.acknowledge veya istemci tarafında acknowledgePurchase() ile acknowledge edilir. Bu, son teslim tarihini temizler ama ürünü yeniden satın alınabilir hâle getirmez.

Her ürün türünün bir çağrı ve son teslim tarihiyle nasıl eşleştiği aşağıda:

  • Tüketilebilir bir ürün için purchases.products.consume veya consumeAsync()'i çağırın. Bu aynı zamanda ürünü yeniden satın alınabilir hâle getirir ve son teslim tarihiniz PURCHASED'dan itibaren üç gündür.

  • Tüketilemeyen bir ürün için purchases.products.acknowledge veya acknowledgePurchase()'i çağırın. Hak, yeniden satın alma olmadan onaylanır ve son teslim tarihiniz PURCHASED'dan itibaren üç gündür.

  • Bir aboneliğin ilk satın alımı için purchases.subscriptions.acknowledge veya acknowledgePurchase()'i çağırın. Bu, yeni aboneliği onaylar ve son teslim tarihiniz PURCHASED'dan itibaren üç gündür.

  • Abonelik yenilemesi için hiçbir çağrıya ihtiyacınız yoktur. Google bunu kendiliğinden acknowledge edilmiş olarak işaretler, dolayısıyla bir son teslim tarihi yoktur.

  • Bir haftadan kısa ön ödemeli bir plan için aynı acknowledgement çağrılarını kullanın, ama son teslim tarihiniz plan süresinin yarısına düşer.

Yükümlülük ilk ödemede sona erer

Abonelik yenilemelerinin acknowledgement'a hiç ihtiyacı yoktur. Google bunu doğrudan söylüyor: "abonelik yenilemelerini acknowledge etmeniz gerekmez" ve her birini kendiliğinden acknowledge edilmiş olarak işaretler. Beklemede bir acknowledgement durumunda gelen ve siz onu temizleyene kadar önünüzde duran şey, bir aboneliğin tam olarak ilk satın alımıdır. Harekete geçmeden önce acknowledgement durumunu sunucu tarafında kontrol edin veya istemci tarafında isAcknowledged()'ı kullanın. Bu şekilde asla aynı acknowledgement çağrısını iki kez göndermezsiniz.

Kısa süreli ön ödemeli planlar için daha dar bir süre

Bir hafta veya daha uzun süren ön ödemeli planlar standart üç günlük kuralı izler. Daha kısa olanlar izlemez. Google'ın dokümantasyonuna göre, süresi "bir haftadan kısa olan planlar, plan süresinin yarısı içinde acknowledge edilmelidir." Üç günlük bir ön ödemeli plan size tüm pencereyi değil, bir buçuk gün verir. Kataloğunuzda kısa ön ödemeli bakiye yüklemeleri varsa, acknowledgement yolu hızlı ve sunucu tarafından yönlendirilmeli, müşterinin uygulamayı yeniden açmasına asla bağlı olmamalıdır.

Acknowledgement çağrısı genellikle nerede kayboluyor

Kimse bu adımı bilerek atlamaz. Bu adım, acknowledgement mantığının yanlış bir tetikleyiciye bağlanması yüzünden kaybolur. Yaygın anti-pattern, yalnızca satın alma akışı ön plana döndüğünde acknowledge eden bir istemcidir. Bu, satın almayı tamamlayıp hemen ardından uygulamayı kullanmaya devam eden bir müşteriyi kapsar. Başka kimseyi kapsamaz.

Geliştiriciler buna sürekli rastlıyor. Google'ın kendi geliştirici topluluğundaki konular her seferinde aynı senaryoyu izliyor: bir kullanıcının satın almadan üç gün sonra otomatik olarak iade aldığının bir versiyonu ya da ödemelerin neden üçüncü günde kendiliğinden geri döndüğünü anlama çabası. Teşhis nadiren değişiyor: acknowledgement çağrısı, hiç gerçekleşmeyen bir kullanıcı eylemine bağlanmış, bu yüzden basitçe hiç tetiklenmemiş.

Ücretsiz denemeler ve uygulamayı bir daha hiç açmayan müşteri

Bunun en çirkin hâli, ücretsiz bir deneme ya da birinin uygulamanızı son kez kapatmadan hemen önceki anlarda yaptığı bir satın almadır. Acknowledgement bir sonraki uygulama açılışını beklediğinde ve o sonraki açılış hiç gerçekleşmediğinde, satın alma basitçe süresi dolarak geçersiz hâle gelir. Google üçüncü günde bunu iade eder ve geçersiz kılar. Dönüşüme doğru ilerleyen bir deneme için, hiç tahsil edemediğiniz ilk faturalandırmayı kaybedersiniz ve bir müşteri hakkı sessizce yanında buharlaşır. İkisi de destek kuyruğunuzda görünmez. Aramaya kalkarsanız, ikisi de geçersiz kılınmış (voided) bir satın alma olarak görünür.

Bir sonraki uygulama açılışına bağlı olan acknowledgement, bir müşteri üç gün boyunca uzak durduğunda her seferinde kaybettiğiniz bir satıştır. Denemeler ve tek dokunuşlu satın almalar, müşterilerin tam olarak uzak durduğu anlardır.

Acknowledge edilmemiş bir iadenin ardındaki gerçek fatura

İade kalemi, aslında ne kaybettiğinizi olduğundan az gösterir. Google satışı geri alır, siz fiyatı iade edersiniz ve herkesin gördüğü rakam budur. Ama bu faturanın tamamı değildir.

Birisi satın aldığı anda gerçek bir işi başlatan tüketilebilir bir ürünü ele alın. Bir grup görsel üretimi, bir model sağlayıcısının API'sine yapılan bir dizi çağrı, bir video dışa aktarma, bir içerik üreticisine borçlu olunan bir ödeme. Bu işlem gücünü, o API çağrılarını, o depolamayı ve o ödemeleri kullanım anında siz ödediniz. İade, satış fiyatını müşteriye geri verir. Size sağlayıcı faturasını geri vermez. Gerçek maliyet kapıdan çıktı ve karşılığında hiçbir şey geri dönmedi.

Abonelikler ve denemeler için kayıp, hiç tahsil edemediğiniz ilk faturalandırma artı daha başlamadan sona eren bir müşteri ilişkisidir. Ve bahisler artmak üzere. 3 Ağustos 2026'dan itibaren Google Play, bu tarihten sonra verilen siparişler için chargeback satın alma fiyatını ve banka ücretlerini geliştiricilere kaydırıyor; bu da önlenebilir herhangi bir sızıntıyı şimdi kapatmayı, sonraya bırakmaktan çok daha değerli kılıyor. Acknowledge edilmemiş bir iade bir chargeback değildir, ama aynı dersi öğretir. Zaten harcadığınız para, otomatik olarak elinizde kalan para değildir.

Atlanması imkânsız bir acknowledgement adımı kurmak

Güvenilir desen, uygulamanızı kritik yoldan tamamen çıkarır. Bunu backend'inizde, birinin bir ekranı yeniden açıp açmadığına değil, bildirimlere dayalı olarak çalıştırın.

  • Gerçek zamanlı geliştirici bildirimlerine abone olun. Tek seferlik bir ürün satın alma olayı ya da bir abonelik satın alma olayı, uygulama çalışıyor olsun ya da olmasın, Google satışı kaydettiği anda sunucunuza ulaşır.

  • Satın alma token'ını Play Developer API üzerinden doğrulayın ve durumun PENDING değil PURCHASED olduğunu teyit edin.

  • Hakkı, o müşterinin hesabına bağlı olarak kendi sisteminize kaydedin.

  • Gecikmeden tüketin ya da acknowledge edin. Tüketilebilir ürünler tüketilir, tüketilemeyen ürünler ve ilk abonelikler acknowledge edilir. Çağrının asla iki kez gitmemesi için önce acknowledgement durumunu okuyun.

  • İstemci tarafında bir backfill mekanizması tutun. onResume() içinde queryPurchasesAsync()'i çağırmak, uygulama kapalıyken tamamlanan her şeyi yakalar. Bunu ana yol olarak değil, bir sigorta olarak düşünün.

Buradaki esas nokta, acknowledgement'ın garanti edemeyeceğiniz bir kullanıcı eylemi yerine, Google'ın size verdiği bir olayla tetiklenmesidir. Bir kez satın alıp bir daha hiç geri dönmeyen biri bile tam olarak güvence altındadır, çünkü sunucunuz satın alma gerçekleştiği anda işi zaten yapmıştır.

Yine de sızanlar için bir güvence

Boru hattı ne kadar iyi kurulmuş olursa olsun, altında yine de bir güvenlik ağını hak eder. Google'ın Voided Purchases API'si, bir iade, geçersiz kılma veya chargeback ile sonuçlanan siparişleri listeler ve nedeninin "geliştirici tarafından hiç acknowledge edilmemiş ve bu yüzden geliştiricinin kayıtlarında bulunmayabilecek" bir satın alma olduğu özel senaryoyu ayrıca işaret eder. Bunu düzenli bir ritimle sorgularsanız, Google'ın sizin arkanızdan sessizce geri aldığı siparişlere sahip herkesin erişimini kaldırabilirsiniz. Ama sınırına dikkat edin: yalnızca son 30 gün geri alınabilir, bu da bunu her çeyrekte fırsat buldukça yapacağınız bir iş değil, zamanlanmış bir görev hâline getirir.

iOS, bunu size yapmak üzere hiç tasarlanmadı

App Store'a geçtiğinizde bunların hiçbiri geçerli değildir. Apple kendi kapanış adımını, bir işlemi tamamlama (finishing a transaction) adımını oluşturmuştur, ama bunu atlamanın cezası ters yönde işler. Tamamlanmamış bir işlem Apple'ın kuyruğunda bekletilmiş olarak kalır. Her uygulama açılışında ve observer her bağlandığında yeniden ortaya çıkar, size müşterinin ödediği şeyi teslim etmek için tekrar tekrar fırsat verir. Apple bunun için hiçbir geri alma işlemi yapmaz. O platformda 72 saatlik bir iade tetikleyicisine benzeyen hiçbir şey yoktur.

Tam olarak bu yüzden tek bir zihinsel model iki mağazayı birden kapsayamaz. Android size bir geri sayım ve kaybederseniz buharlaşan bir satış verir. iOS size kalıcı bir hatırlatıcı ve buna yanıt vermek için sınırsız zaman verir. iOS alışkanlıklarını bir Android kod tabanına taşıyın, er ya da geç ekipten kimsenin açıklayamadığı bir yığın geri alınmış siparişe bakakalırsınız.

Bu boşluğu kapatmak, tam olarak Refund Sensor'ün yaptığı iştir. Onay, mağaza bildirimi geldiği anda doğrudan ondan tetiklenir; bu sırada Voided Purchases API'sine karşı çalışan sürekli bir uzlaştırma geçişi, Google'ın arkanızdan zaten geri aldığı her siparişte erişimi kaldırır. Kaybedebileceğiniz bir geri sayım, siz kontrol etmeyi düşünmeden önce işaretlenmiş bir kutuya dönüşür.

Bu kuralların belgelendiği yerler

Sık sorulan sorular

Sunucunuz acknowledgement çağrısını zamanında hiç göndermedi. Bir satın alma, PURCHASED durumuna ulaşmasından itibaren üç günlük sınırı acknowledge edilmeden geçtiğinde, Google satışı geri alır ve hakkı otomatik olarak geri çeker. Bu, müşterinin yaptığı bir şey değildir ve Google tarafından uygulanan bir ceza da değildir. Eksik bir acknowledgement çağrısıdır ve mağaza bildiriminden sunucu tarafında acknowledge etmek bu sorunu tamamen ortadan kaldırır.

İkisi de üç günlük sayacı durdurur, ama ürünü farklı durumlarda bırakır. purchases.products.consume veya consumeAsync() yoluyla consume etmek, tüketilebilir ürünler içindir. Son teslim tarihini temizler ve ürünü yeniden satışa açar. purchases.products.acknowledge, purchases.subscriptions.acknowledge veya acknowledgePurchase() yoluyla acknowledge etmek ise tüketilemeyen ürünler ve abonelikler içindir. Ürünü yeniden satın almaya açmadan hakkı onaylar.

Hayır, yalnızca ilk satın alma. Google, yenilemelerin acknowledge edilmesini şart koşmaz ve bunları otomatik olarak acknowledge edilmiş olarak işaretler. Siz onu temizleyene kadar sorumluluğunuzda kalan şey, beklemede bir acknowledgement durumunda gelen yalnızca ilk abonelik satın alımıdır.

Hayır, PURCHASED'ı bekleyin. Bir nakit ödeme veya ebeveyn onayı isteği gibi PENDING durumundaki bir satın alma, üç günlük sayacı henüz hiç başlatmamıştır. Hakkı yalnızca durum gerçekten PENDING'den PURCHASED'a geçtiğinde tanıyın ve acknowledgement'ı yalnızca o zaman gönderin.

Hayır, ve Android ile iOS'un aynı şekilde davrandığını varsaymadan önce bunu bilmekte fayda var. Tamamlanmamış bir StoreKit işlemi, siz onu tamamlayana kadar her uygulama açılışında yeniden teslim edilir. Apple bunu asla otomatik olarak iade etmez. Üç günlük otomatik iade yalnızca Google Play'e özgüdür, bu yüzden iki platform farklı bir ele alış gerektirir.

İadenin kendisi geri alınamaz. Yapabileceğiniz şey uzlaştırmadır. Voided Purchases API, son 30 güne ait iade edilmiş ve geçersiz kılınmış satın almaları ortaya çıkarır ve özellikle hiç acknowledge edilmediği için geçersiz kılınanları işaretler, böylece tanıdığınız hakkı geri alabilirsiniz. Bundan sonra, bir sonrakinin elinizden kaçmasını önleyen şey mağaza bildiriminden acknowledge etmektir.

#billing#acknowledgement#refunds#in-app purchases#android
Refund SensorRefund Sensor TeamRefund defense for App Store and Google Play developers