App Store visszatérítés: mit lát belőle a fejlesztő
Írta: Mehdi Azizi
Megjelent: , 8 p
Az App Store-os visszatérítésről egyedül az Apple dönt. Kapsz egy CONSUMPTION_REQUEST értesítést, 12 órán belül válaszolhatsz, a döntést a REFUND hozza.
Az App Store-ban a visszatérítést mindig az Apple adja meg vagy utasítja el, soha nem a fejlesztő. A vásárló az Apple oldalán vagy az appodból kéri. Ha bekötötted az Apple szerverértesítéseit, a kérés pillanatában kapsz egy CONSUMPTION_REQUEST értesítést, a döntéskor pedig egy REFUND vagy REFUND_DECLINED értesítést. A kettő között 12 órád van, hogy elküldd a fogyasztási adatokat és a preferenciádat, feltéve, hogy a vásárló ehhez hozzájárult.
A megadott visszatérítés kiveszi a vásárlást a vásárló aktív jogosultságai közül, és negatívként jelenik meg az értékesítési riportjaidban. Ez az útmutató részletezi az egyes lépéseket, hogy mit küldhetsz az Apple-nek, és mit tehetsz jogszerűen a visszaélésszerű kérések ellen. A szabályok az Apple 2026. november 3-án átnézett oldalairól származnak. A valós eset egy riasztásból jön, amit októberben kötöttem be az appjaimra.
Ki dönt az App Store-os visszatérítésről?
Az Apple, és csak az Apple. Az Apple támogatási oldala leírja a vásárló útját: belép a reportaproblem.apple.com oldalra, kiválasztja a „Request a refund” lehetőséget, megad egy okot, majd az érintett vásárlást. Az Apple azt tanácsolja neki, hogy 24-48 órát várjon a válaszra.
A vásárló az appodból is kérhet visszatérítést. A StoreKit erre egy kérési lapot kínál, iOS 15 óta. Az Apple azt javasolja, hogy a fiókbeállításokból vagy egy súgómenüből hívd meg. Megmutatja a vásárlást és az okok listáját, az Apple pedig legfeljebb 48 óra alatt dönt.
Egyik esetben sem kell semmit jóváhagynod. Csak információt és egy preferenciát adhatsz meg, ami az Apple döntésében több szempont közül az egyik.
Mit lát a két fél, lépésről lépésre
| Lépés | A vásárló oldalán | A fejlesztő oldalán |
|---|---|---|
| Kérés | Az Apple űrlapja vagy az appon belüli lap | CONSUMPTION_REQUEST értesítés |
| 12 órán belül | Várakozás | Elküldheted a fogyasztási adatokat |
| 48 órán belül | Az Apple válasza | REFUND vagy REFUND_DECLINED értesítés |
| Jóváhagyás után | A pénz visszamegy a fizetési módjára | A vásárlás kikerül az aktív jogosultságokból, negatív egységek |
| Vitatás után | Az Apple visszavonja a visszatérítést | REFUND_REVERSED értesítés, a hozzáférést vissza kell adni |
Az App Store Connect csak a már megadott visszatérítéseket mutatja, a Sales and Trends részben. Magáról a kérésről csak a szerverértesítésekből értesülsz. Nélkülük utólag tudod meg, hogy volt visszatérítés.
A visszatérítés szerverértesítései
Az App Store Server Notifications V2 öt, itt hasznos típust küld. Az App Store Connectben megadott HTTPS-címre érkeznek, egy a production, egy a sandbox környezethez.
| Értesítés | Mit jelez | Mit csinálsz |
|---|---|---|
CONSUMPTION_REQUEST | A vásárló visszatérítést kér | 12 órán belül válaszolsz, ha van hozzájárulás |
REFUND | Az Apple visszatérítette a tranzakciót | Elveszed a visszatérített tartalmat vagy hozzáférést |
REFUND_DECLINED | Az Apple elutasította a kérést | Semmit, a hozzáférés megmarad |
REFUND_REVERSED | Az Apple a vásárló vitatása után visszavon egy visszatérítést | Visszaadod, amit elvettél |
REVOKE | Egy Családi megosztással megosztott vásárlás már nem elérhető | Elveszed a családtag hozzáférését |
A szerverednek 200 és 206 közötti HTTP-kóddal kell válaszolnia. A szerverértesítésekre adott válaszokról szóló oldal szerint különben az Apple ötször próbálkozik újra, az előző kísérlet után 1, 12, 24, 48, majd 72 órával. Sandboxban csak egyszer küldi el.
A Consumption API: mit mondhatsz az Apple-nek
Amikor megjön a kérés, a Send Consumption Information segítségével válaszolhatsz. A szabály egy Apple-mondatban: „Respond within 12 hours of receiving the CONSUMPTION_REQUEST notification.” Az API 2-es verziója minden terméktípusra vonatkozik, az előfizetéseket is beleértve.
A kérés mezői:
| Mező | Kötelező | Mit mond az Apple-nek |
|---|---|---|
customerConsented | Igen | A vásárló hozzájárult az adatai megosztásához |
deliveryStatus | Igen | A vásárlást kézbesítették és működik, vagy hogy miért nem |
sampleContentProvided | Igen | Volt-e próbaverzió, részlet vagy leírás a vásárlás előtt |
consumptionPercentage | Nem | Az elfogyasztott rész, 0 és 100 000 között, ami 0-100 %-nak felel meg |
refundPreference | Nem | A preferenciád: DECLINE, GRANT_FULL vagy GRANT_PRORATED |
Két részlet számít. Ha a deliveryStatus nem DELIVERED, az elfogyasztott résznek nullának kell lennie. Előfizetés időarányos visszatérítésénél pedig kihagyod az elfogyasztott részt: azt az Apple számolja ki.
A hozzájárulás mindennek a feltétele. Az Apple így írja: „You must obtain valid consent from the customer before sharing their personal data with Apple in the Send Consumption Information API.” Hozzájárulás nélkül nem válaszolsz. Az Apple azt is megtiltja, hogy a hirdetési követés ablakával gyűjtsd be ezt a hozzájárulást: „Don't use the AppTrackingTransparency prompt to obtain consent”.
Ha RevenueCatet használsz
RevenueCattel ő kapja meg az Apple értesítéseit, és ő válaszol a kérésre, a Refund Control segítségével. Négy szabály közül választasz: teljes visszatérítés preferálása, elutasítás preferálása, csak a fogyasztási adatok küldése, vagy nincs válasz.
Az adatmegosztás bekapcsolása azt jelenti, hogy megerősíted: megvan a vásárlóid hozzájárulása. A RevenueCat maga mondja: „Enabling consumption data sharing confirms that you obtained consent from your Customers.” Azt is tanácsolja, hogy a „Prefer no refund” beállítást egy célzott csoportra tartsd fenn, és figyelmeztet, ha ez a preferencia a vásárlóid nagy részét érinti.
Ha a saját szervereden is meg akarod kapni az értesítéseket, a RevenueCat az app beállításaiban kínál egy „Apple Server Notification Forwarding URL” mezőt. Ezt az Apple értesítéseiről szóló oldala írja le. Én ezt használom. Az előfizetés RevenueCattel való felépítése itt van: RevenueCat és az iOS-es in-app előfizetés.
A hatás a bevételeidre és az előfizetésre
A hozzáférésre. A currentEntitlements dokumentációja szerint „Products that the App Store has refunded or revoked don't appear in the current entitlements”. Ha az appod a currentEntitlements segítségével ellenőrzi a jogosultságokat, a visszatérített hozzáférés magától eltűnik. A tranzakció tartalmazza a visszavonás dátumát és okát, a revocationDate és a revocationReason mezőkben.
A riportokra. Az értékesítési riport súgója szerint a visszatérítés negatív egységekkel és negatív vásárlói árral jelenik meg. Előfizetéseknél az előfizetési adatokról szóló oldal a teljes és részleges visszatérítéseket az események között számolja, és levonja őket a napi egységekből.
A hírnevedre. Az 5.6.4-es guideline a túlzott visszatérítési kéréseket a nem megfelelő minőség jelei között említi. A magas visszatérítési arány nem csak pénzveszteség: az Apple figyelembe veheti, amikor azt ítéli meg, betartod-e a magatartási kódexet.
Az én esetem: az appjaimra bekötött riasztás
- október 12-én bekötöttem egy riasztást az appjaimra. A RevenueCat továbbítja az Apple értesítéseit a devoria.fr egyik route-jára. Ez ellenőrzi az Apple aláírását, majd küld nekem egy riasztást, összeg nélkül. Látni akartam a kérést, amikor beérkezik, nem csak az eredményt.
Október 18-án megjött az első valódi kérés a TradaZenre, a tőzsdei szimulátoromra. Egy éves előfizetés, amit egy 7 napos ingyenes próbaidő végén fizettek ki. A megadott ok: nem szándékos vásárlás. Három tanulság:
- Ugyanaz a kérés többször is megérkezhet. Ugyanazon az estén háromszor kaptam meg ugyanazt a riasztást. Azóta minden riasztást deduplikálok az értesítés típusa és a tranzakcióazonosító alapján.
- A döntés kevesebb mint egy nap alatt megszületett. Az Apple nagyjából 22 órával a kérés után elutasította. A vásárló megtartotta a hozzáférését.
- Az elutasítás nem a vég. Ugyanaz a vásárló két nappal később újra kérte, ugyanarra a tranzakcióra.
Egy próbaidő végén „nem szándékos vásárlás” miatt beadott kérést nem az Apple-nek adott válaszban nyersz meg. Azt a paywallon előzöd meg, az első fizetés előtt.
A visszaélésszerű kérések visszaszorítása a szabályok megsértése nélkül
Ami megengedett:
- Minden kérésre pontos adatokkal válaszolni, ha a vásárló hozzájárult.
- Célzott preferenciát megadni, például elutasítást egy már elfogyasztott vásárlásra, nem pedig mindenkire.
- Minden
REFUNDértesítést egy vásárlói fiókhoz kötni. Az Apple visszatérítési értesítésekről szóló oldala ezt javasolja az ismétlődő visszatérítések kiszűrésére. - Vásárlás előtt világosan megmondani, mit vesz meg a felhasználó. A 3.1.2(c) guideline előírja, hogy írd le, mit kap a felhasználó az árért, mielőtt előfizetést ajánlasz neki.
Ami tilos:
- Hamis adatokat küldeni, hogy elutasítsák a kérést, vagy hozzájárulás nélkül válaszolni.
- A hirdetési követés ablakával begyűjteni a hozzájárulást, amit az Apple szó szerint kizár.
- Csapdába ejtő vásárlás. Az 5.6-os guideline tiltja, hogy nem kívánt vásárlásokra vedd rá a vásárlókat, vagy hogy olyasmiért számláznál, amit nem szállítasz.
- Nyomást gyakorolni egy vásárlóra, aki visszatérítést kér. Ugyanez a szabály tiszteletet követel az ügyfélszolgálatban, megfélemlítés nélkül.
A legjobb eszköz továbbra is az, ami előtte történik: egy paywall, amely megmondja az árat, az első fizetés dátumát és a lemondás módját. A kerülendő hibák a paywall-hibákról szóló cikkben vannak, a próbaidő szabályai pedig az App Store-os ingyenes próbaidőről szóló cikkben.
Tesztelés élesítés előtt
A kérések teszteléséről szóló oldal szerint a sandbox és az Xcode StoreKit-tesztjei is elfogadják a visszatérítési kéréseket. Sandboxban bármilyen ok automatikus jóváhagyást vált ki. Elutasítás szimulálásához válaszd az „Other” lehetőséget, és írd be: DECLINE. Időarányos visszatérítéshez írd be: GRANT_PRORATED. Sandboxban a fogyasztási válaszodnak öt percen belül el kell mennie.
Egy előfizetés, amit kevesebben kérnek vissza
Az iOS & Android Kit az appjaim kódjából indul, az onboarding, a paywall és az előfizetések már le vannak kódolva, és négy lépésben visz el az App Store-ig, a saját tempódban. A teljes felépítést az iOS-es in-app előfizetés oldal részletezi, az Apple előfizetési szabályait pedig a 3.1.2-es guideline-ról szóló cikk.
Mielőtt elindítod a paywallodat, végezd el az ingyenes diagnózist: megmondja, mi akasztja meg valójában a projektedet, és elküldi az Apple-elutasítások elleni ellenőrzőlistámat.
Gyakori kérdések
Elutasíthatja a fejlesztő az App Store-os visszatérítést?
Nem. Egyedül az Apple dönt. Küldhetsz fogyasztási adatokat és egy preferenciát, például DECLINE, ami több szempont közül az egyik. Az utolsó szó az Apple-é.
Értesül a fejlesztő a visszatérítési kérésről?
Igen, ha bekötötte az App Store Server Notifications V2-t. Az Apple a kérés pillanatában CONSUMPTION_REQUEST értesítést küld, a döntéskor pedig REFUND vagy REFUND_DECLINED értesítést. Értesítések nélkül csak a megadott visszatérítéseket látod, a riportjaidban.
Mennyi idő alatt dolgozza fel az Apple a visszatérítési kérést?
Az Apple 24-48 órát ígér a vásárlónak. A StoreKit dokumentációja legfeljebb 48 óráról beszél. Neked 12 órád van a fogyasztási adatok elküldésére.
Mi történik a hozzáféréssel visszatérítés után?
A visszatérített vásárlás kikerül a vásárló aktív jogosultságai közül: a StoreKit 2 már nem adja vissza a currentEntitlements listában. Ha az Apple később visszavonja a visszatérítést, REFUND_REVERSED értesítést kapsz, és vissza kell adnod a hozzáférést.
Kell a vásárló hozzájárulása ahhoz, hogy válaszolj az Apple-nek?
Igen. Az Apple érvényes hozzájárulást követel meg, mielőtt bármilyen adatot megosztasz a Consumption API-n keresztül. Enélkül nem válaszolsz az értesítésre. A hirdetési követés ablaka nem használható a begyűjtésére.
Az appom ellen számítanak a visszatérítések?
Számíthatnak. Az 5.6.4-es guideline a túlzott visszatérítési kéréseket a nem megfelelő minőség jelei között említi, és az Apple ezt figyelembe veheti, amikor a magatartási kódex betartását ítéli meg.

