Her App Store satın alımına bir appAccountToken ekleyin, yoksa iadeyi savunamazsınız
Bir müşteri iade istediğinde Apple sunucunuza bir CONSUMPTION_REQUEST gönderir, ancak işlem kim olduğunu asla söylemez. appAccountToken, bir satın alımı kullanıcınıza geri bağlayan UUID'dir. Onu ayarlayın ve Apple'a gerçek verilerle yanıt verebilirsiniz. Atlayın ve tahmin yürütmek zorunda kalırsınız.

Önemli noktalar
- appAccountToken, bir App Store satın alımına eklediğiniz ve sonuçtaki işlemin kendi sisteminizdeki tam kullanıcıya geri işaret etmesini sağlayan bir UUID'dir. Apple onu işlemde saklar ve o işlemin göründüğü her yerde geri döndürür.
- Apple'ın uyguladığı tek biçimlendirme kuralı, değerin geçerli bir UUID olmasıdır. Başka bir şey geçirin, bir id, bir e-posta, birleştirilmiş bir dize, ve StoreKit onu sessizce düşürür ve appAccountToken'ı nil olarak döndürür.
- StoreKit 2'de onu tek bir satın alma seçeneğiyle ayarlarsınız, Product.PurchaseOption.appAccountToken(_:), o hesap için oluşturup sakladığınız kararlı bir UUID kullanarak.
- Onu orijinal satın alımda bir kez ayarlayın, Apple aynı token'ı abonelik zincirindeki her yenileme, her faturalandırma yeniden denemesi ve her yükseltme boyunca taşır.
- 2025'ten beri Set App Account Token uç noktası, sunucunuzun teklif kodu kullanımları ve tanıtılan satın alımlar gibi uygulamanız dışında yapılan ve uygulama içi akışın asla ulaşamayacağı satın alımlara bir token eklemesine olanak tanır.
- appAccountToken, Apple'ın CONSUMPTION_REQUEST'ini yanıtlanabilir kılan şeydir. Onsuz, iadeyi 12 saatlik pencere içinde kullanımını tanımlamanız gereken müşteriyle eşleştiremezsiniz.
- Kimliğini belirleyemediğiniz bir iade, savunamadığınız bir iadedir. Elinizde tutmaya delil bulunan satın alımlara para geri verirsiniz, artı onları sağlamak için zaten harcadığınız işlem gücü, API çağrıları ve ödemeler.
Bir müşteri Apple'dan iade ister, Apple sunucunuza bir CONSUMPTION_REQUEST gönderir ve o kişinin ürünü nasıl kullandığına dair gerçek verilerle yanıt vermek için on iki saatiniz vardır. Sonra bildirimi açarsınız ve onun kim olduğu hakkında hiçbir fikriniz olmadığını fark edersiniz. İşlem bir originalTransactionId ve bir ürün id'si taşır, ancak kendi veritabanınızdaki hesaba işaret eden hiçbir şey taşımaz. appAccountToken'ın kapattığı boşluk tam olarak budur ve onu satın alma anında ayarlamadıysanız, o satış için sonradan kapatamazsınız.
appAccountToken, sonuçtaki App Store işleminin sisteminizdeki tam kullanıcıya geri bir işaretçi taşımasını sağlamak için bir satın alıma eklediğiniz bir UUID'dir. Onu ayarlayın, Apple'ın o müşteri hakkında soracağı her iade sorusu kimlik ekli olarak gelir. Atlayın, tahmin yürütmek zorunda kalırsınız. İşte bu alanın ne olduğu, nasıl ayarlanacağı, uygulamanız dışında yapılan satın alımları kurtaran yeni uç nokta ve bir iade geldiğinde eksik bağlantının gerçekte size neye mal olduğu.
appAccountToken aslında nedir
appAccountToken, satın alma anında oluşturup StoreKit'e geçirdiğiniz opak bir UUID'dir. Apple onu işlemde saklar ve o satın alımın işlem bilgisinde geri döndürür, ve orada kalır. Apple'ın deyimiyle, "işlemi kendi hizmetinizdeki kullanıcının hesabıyla ilişkilendiren UUID"dir. Tek biçimlendirme kuralı, onun bir UUID olması gerektiğidir. Apple onu okumaz, neye eşlendiğini doğrulamaz ve sizin tarafınızda ne anlama geldiğini umursamaz. O, sizin kontrol ettiğiniz bir bağlantıdır.
İşlemde yaşadığı için, işlemin gittiği her yere geri gelir. Bir sunucu bildirimindeki imzalı işlem, App Store Server API'nin Get Transaction Info yanıtı ve bir abonelik zincirindeki her yenileme, onu orijinal satın alımda ayarladıysanız hepsi aynı token'ı taşır. Bir kez eklenen tek bir UUID, ilişkinin ömrü boyunca müşterinin faturalandırmasını takip eder.
Gerçek bir UUID olması gerekir, yoksa sessizce kaybolur
Apple'ın uyguladığı tek kural biçimdir. StoreKit 2 bir RFC 4122 UUID gerektirir. Birleştirilmiş bir dize, bir tamsayı id'si veya bir e-posta adresi geçirirseniz, StoreKit hata fırlatmaz. Değeri düşürür ve işlem appAccountToken nil olarak ayarlanmış şekilde geri gelir. Geliştiriciler buna sürekli takılır ve belirti her zaman aynıdır, Apple'ın kendi forumlarında "appAccountToken işlem yükünde eksik" ifadesinin bir varyantı, neredeyse her zaman geçirilen değerin geçerli bir UUID olmaması nedeniyle. Sunucu tarafında gerçek bir UUID oluşturun, onu hesaba karşı saklayın ve StoreKit'e asla başka bir şey vermeyin.
Satın alma anında nasıl ayarlanır
StoreKit 2'de bu tek bir satın alma seçeneğidir. Kullanıcı kaydolduğunda veya ilk kez ödemeye ulaştığında sunucunuzda UUID'yi oluşturun, onu hesap kaydına saklayın ve aynı değeri satın alma çağrısına geçirin.
İmza Product.PurchaseOption.appAccountToken(_ token: UUID) şeklindedir ve bir satın alım try await product.purchase(options: [.appAccountToken(token)]) gibi görünür. İşlem geri geldiğinde, App Store Server API aracılığıyla doğrulanmış veya bir sunucu bildirimiyle teslim edilmiş olarak, o UUID'yi taşır ve sunucunuz müşteriyi tek bir sorguda bulur.
Hesap başına bir kararlı token kullanın
Aynı kullanıcının her satın alımı için yeni bir token oluşturmayın. Apple, aynı zincirdeki yenilemelerde, faturalandırma yeniden denemelerinde ve yükseltmelerde token'ı döndürür, bu yüzden hesap başına kararlı bir UUID size ilk satın alımdan gelecekteki her olaya kadar temiz bir iplik verir. Satın alım başına değişen bir token o ipliği koparır ve tüm amacı boşa çıkarır. Bir hesap, bir token, o hesap her satın aldığında yeniden kullanılan.
Uygulama dışı satın alımları kurtaran uç nokta
2025'e kadar bir boşluk vardı. Bir müşteri bir teklif kodu kullanır veya doğrudan App Store'dan tanıtılan bir uygulama içi satın alım yaparsa, uygulamanız satın alma akışını asla çalıştırmazdı, dolayısıyla appAccountToken'ı ayarlayacak hiçbir yer yoktu. O işlemler anonim gelirdi ve öyle kalırdı.
WWDC 2025 bu boşluğu Set App Account Token uç noktasıyla kapattı. Sunucunuz App Store Server API'de gövdede UUID ile PUT /inApps/v1/transactions/{originalTransactionId}/appAccountToken çağırır ve Apple token'ı o işlemde ayarlar. Her ürün türü için çalışır, teklif kodu kullanımlarını ve tanıtılan satın alımları kapsar ve gönderdiğiniz değer işlemde zaten bulunan herhangi bir token'ı geçersiz kılar. Artık bir satın alımı sonradan, sunucunuzdan, uygulamanızdan hiç geçmeden ilişkilendirebilirsiniz.

| Satın alma kanalı | appAccountToken'ı nerede ayarlarsınız | Notlar |
|---|---|---|
| Uygulama içi satın alım | Satın alma anında StoreKit satın alma seçeneği | Product.PurchaseOption.appAccountToken(UUID) |
| Teklif kodu kullanımı | Set App Account Token uç noktası, sunucu tarafında | Bağlanacak uygulama içi akış yok, bu yüzden sonradan ayarlayın |
| App Store'dan tanıtılan uygulama içi satın alım | Set App Account Token uç noktası, sunucu tarafında | Satın alma uygulamanız dışında gerçekleşir |
| Abonelik yenilemesi | Yapılacak bir şey yok | Orijinal satın alımdan otomatik olarak taşınır |
Eksik bağlantının size nerede paraya mal olduğu
Token'ın amacı düzenli kayıtlar değildir. Amaç, Apple'ın geliştiriciler için tek iade sorusu olan CONSUMPTION_REQUEST'in, yalnızca hakkında olduğu müşteriyi bulabilirseniz yanıtlanabilir olmasıdır.
Bir alıcı bir tüketilebilir veya yenilenmeyen bir abonelik için iade istediğinde, Apple sunucunuza bir CONSUMPTION_REQUEST bildirimi gönderir ve Send Consumption Information ile yanıt vermeniz için size on iki saat verir. Yanıtınız o belirli müşteri hakkında verilerdir: ürünün ne kadarını tükettikleri, hesap kıdemleri, yaşam boyu harcamaları, teslimat durumları. appAccountToken bu isteğin alanlarından biridir ve daha da önemlisi, bildirimin işleminin, kullanımını tanımlamak üzere olduğunuz hesaba nasıl eşlendiğidir. Token yok, arama yok, doğru yanıt yok.
Boş bir yanıtın gerçekte neye mal olduğu
Kimliği belirlenemeyen bir iade kötü bir seçime zorlar. Tüketim isteğini hiçbir şeyle yanıtlayabilirsiniz, ki bu düşük tüketim olarak okunur ve Apple'ı ürünü yoğun kullanan müşteriler de dahil olmak üzere iadeyi onaylamaya iter. Ya da tahmin yürütebilirsiniz. Her iki durumda da, savunmaya deliliniz olan satın alımlara iade yapıyorsunuz ve onları sunmanın gerçek maliyetini zaten ödediniz.
O maliyet satış fiyatı değildir. Bir grup model API çağrısı çalıştıran, görüntü üreten, bir video dışa aktaran veya bir içerik üretici ödemesini tetikleyen bir tüketilebilir, teslim edildiği anda gerçek para harcadı. İade, müşterinin ödemesini geri verir. Sağlayıcı faturasını geri vermez. Kimliği belirlenemeyen bir müşteriyi, dosyaladıkları her iadeyle ve kim olduklarını bilmediğinize güvenen her seri iadeciyle çarpın, ve atladığınız token, hiç yazmadığınız en pahalı kod satırı haline gelir.
Aynı fikir Android'de, başka bir adla var
Google Play aynı sorunu setObfuscatedAccountId ile çözer, ki bu bir satın alıma bir hesap tanımlayıcısı ekler, böylece Google'ın orders.reviewrefund üzerinden ters ibraz incelemesi gerçek bir kullanıcıya karşı yanıtlanabilir. Farklı mağaza, farklı mekanik, aynı ders: satın alma anında kimlik ekleyin yoksa anlaşmazlığı daha sonra savunamazsınız. App Store'da o araç appAccountToken'dır ve bir UUID olması gerekir.
Token'ı yerinde tutan üç alışkanlık
- Hesap başına bir UUID oluşturun ve saklayın. Müşteri başına bir kararlı token, kaydolduklarında veya ilk ödemede oluşturulmuş, kaydına kaydedilmiş ve her satın alım için yeniden kullanılmış.
- Geçirmeden önce doğrulayın. Satın alma kodunuzda değerin gerçek bir UUID olduğunu teyit edin, böylece hatalı biçimlendirilmiş bir id işlemde asla sessizce nil bir token'a dönüşemez.
- Uygulama dışı satın alımları geriye doldurun. Bir teklif kodu kullanımı veya tanıtılan bir satın alım için token olmadan bir sunucu bildirimi geldiğinde, doğru olanı eklemek için Set App Account Token uç noktasını çağırın.
Bu üçünü yapın, Apple'ın size gönderdiği her işlem, iade istekleri dahil, ait olduğu müşteriye zaten bağlı olarak gelir.
RefundHalt'ın dayandığı temel budur. appAccountToken'ı her işlemden ve sunucu bildiriminden okuyoruz, onu o hesap için zaten takip ettiğimiz kullanıma bağlıyoruz ve Apple'ın tüketim isteğini on iki saatlik pencere içinde müşterinin gerçek rakamlarıyla yanıtlıyoruz. Token o ipliktir. Onu bir kez ayarlayın ve iade savunmanızın tutunacak bir şeyi olur.
Sık sorulan sorular
- App Store'da appAccountToken nedir?
- appAccountToken, oluşturup StoreKit aracılığıyla bir satın alıma eklediğiniz ve sonuçtaki App Store işleminin kendi sisteminizdeki belirli bir kullanıcı hesabına geri işaret etmesini sağlayan bir UUID'dir. Apple onu işlemde saklar ve işlem bilgisinde, sunucu bildirimlerinde ve aynı zincirdeki her yenilemede geri döndürür, ki bu da bir iade isteği dahil gelecekteki herhangi bir olayı doğru müşteriye bağlamanıza olanak tanır.
- appAccountToken'ım neden nil veya eksik?
- Neredeyse her zaman geçirdiğiniz değerin geçerli bir UUID olmaması nedeniyle. StoreKit 2 bir RFC 4122 UUID gerektirir ve başka her şeyi sessizce düşürür, bu yüzden birleştirilmiş bir dize, bir tamsayı id'si veya bir e-posta, satın alım yine de başarılı olurken nil bir appAccountToken olarak geri döner. Diğer yaygın neden, token'ı ayarlamak için hiçbir uygulama içi akışın çalışmadığı, teklif kodu kullanımı gibi uygulamanız dışında yapılan bir satın alımdır.
- appAccountToken'ı satın alımdan sonra, teklif kodları için ayarlayabilir miyim?
- Evet, 2025'ten beri. App Store Server API'deki Set App Account Token uç noktası, sunucunuzun gövdede UUID ile PUT /inApps/v1/transactions/{originalTransactionId}/appAccountToken çağırarak mevcut bir işlemdeki token'ı eklemesine veya üzerine yazmasına olanak tanır. Her ürün türü için çalışır ve teklif kodu kullanımları ve tanıtılan uygulama içi satın alımlar gibi uygulamanız dışında yapılan satın alımlar için tasarlanmıştır.
- appAccountToken'ın bir UUID olması gerekir mi?
- Evet. Apple'ın uyguladığı tek biçimlendirme kuralı, değerin geçerli bir UUID olmasıdır. Aksi halde opaktır, bu yüzden sizin tarafınızda istediğiniz herhangi bir hesap anahtarına eşlenebilir, ancak bir UUID değilse StoreKit onu saklamaz ve işlem appAccountToken nil olarak ayarlanmış şekilde geri gelir.
- appAccountToken iadelere nasıl yardımcı olur?
- Bir müşteri iade istediğinde, Apple bir CONSUMPTION_REQUEST gönderir ve o belirli alıcı hakkında verilerle yanıt vermeniz için size on iki saat verir. appAccountToken, bildirimin işlemini kullanımını raporlamanız gereken hesapla eşleştirme şeklinizdir ve tüketim isteğinin kendisindeki alanlardan biridir. Onsuz gerçek kullanımla yanıt veremezsiniz, bu yüzden Apple, itiraz etmeye deliliniz olan iadeleri onaylamaya eğilim gösterir.
- appAccountToken her satın alım için farklı mı olmalı?
- Hayır. Hesap başına bir kararlı UUID kullanın ve o kullanıcının yaptığı her satın alım için yeniden kullanın. Apple token'ı bir abonelik zincirindeki yenilemeler ve yükseltmeler boyunca taşır, bu yüzden kararlı bir token size zaman içinde temiz bir bağlantı verir. Satın alım başına değişen bir token o bağlantıyı koparır ve işlemleri aynı müşteriye geri bağlamayı zorlaştırır.
Kaynaklar ve ek okumalar
- Apple Developer: appAccountToken (StoreKit Transaction)
- Apple Developer: Product.PurchaseOption.appAccountToken(_:)
- Apple Developer: Set App Account Token (App Store Server API)
- Apple Developer: appAccountToken (App Store Server API)
- Apple Developer: ConsumptionRequest (Send Consumption Information)
- Apple Developer: Send Consumption Information
- WWDC25: Dive into App Store server APIs for In-App Purchase
RefundHalt
App Store ve Google Play için geri ödeme otomatik pilotu
Okumaya devam edin
Bir Google Play satın alımını üç gün içinde onaylamazsanız Google iade eder, işte bunun size maliyeti
Google Play, sunucunuzun üç gün içinde onaylamadığı her satın alımı otomatik olarak iade eder ve geri alır. Bu bir müşteri kararı değil, bir entegrasyon hatasıdır ve tamamen önlenebilir. İşte tam kural, neden tetiklendiği ve kaybedilen her satışın gerçek maliyeti.
Seri iade istismarı size iki kez pahalıya patlar, işte mağazaların karşılık vermenize izin verdiği yol
Tekrar tekrar iade alan müşteri bir kaza değildir. İade istismarı size hem geri verdiğiniz parayı hem de daha önce harcadığınız işlem gücünü kaybettirir, ve her iki mağaza da bu deseni birbirine bağlamanız için bir kimlik sinyali verir, Apple'ın appAccountToken değeri ve Google'ın gizlenmiş hesap kimliği.