Wszystkie artykuły
Deep dive8 min czytania

Zwrot w ramach Family Sharing cofa jedną płatność, ale może zostawić pięć innych osób nadal korzystających z Twojej aplikacji, a tylko Twój serwer może odciąć im dostęp

Zwrot w ramach Family Sharing cofa jedną płatność, ale może zostawić nawet pięciu członków rodziny nadal korzystających z Twoich płatnych funkcji. Apple wysyła REVOKE i oczekuje, że Twój serwer zakończy ten dostęp. Oto jak działają zwroty w ramach udostępniania rodzinnego i ile kosztuje jeden z nich.

Pojedynczy papierowy paragon na środku stołu nakrytego dla sześciu osób, obrazujący, jak jedna płatność stojąca za zwrotem w ramach Family Sharing może objąć sześć osób

Najważniejsze wnioski

  • Apple oznacza każdą transakcję udostępnioną rodzinie wartością inAppOwnershipType równą FAMILY_SHARED, a każdy bezpośredni zakup wartością PURCHASED. To pole pojawia się tylko przy niekonsumowalnych zakupach w aplikacji i subskrypcjach automatycznie odnawialnych, dwóch typach produktów, które Family Sharing obsługuje.
  • Pojedynczy zakup możliwy do udostępnienia rodzinie może uprawniać nawet sześć osób, kupującego plus pięciu członków rodziny, więc jedna płatność może pociągnąć za sobą wart sześciu osób nakład mocy obliczeniowej, wywołań API, pamięci i wypłat, który Twój produkt ponosi, aby go dostarczyć.
  • Gdy Apple zwraca pieniądze osobie, która kupiła udostępniony zakup, wysyła powiadomienie REVOKE App Store Server Notification, a cofnięcie dostępu, w tym każdej udostępnionej rodzinie kopii, to zadanie Twojego serwera. Apple zwraca pieniądze, ale nie kończy za Ciebie Twoich uprawnień.
  • Transakcja FAMILY_SHARED w REVOKE niesie revocationDate tylko wtedy, gdy cofnięcie było spowodowane zwrotem dla kupującego. Jeśli członek rodziny po prostu opuszcza grupę, ten sam REVOKE przychodzi bez revocationDate, według samych inżynierów Apple.
  • Apple celowo opóźnia nowy zakup udostępniony rodzinie o około godzinę, zanim dotrze on do członków rodziny, aby kupujący miał czas wyłączyć udostępnianie, zanim ktokolwiek inny uzyska dostęp.
  • Włączenia Family Sharing dla zakupu w aplikacji w App Store Connect nie da się cofnąć, więc gdy produkt staje się udostępnialny, pozostaje udostępnialny, a Twoja obsługa zwrotów musi od tego momentu uwzględniać transakcje FAMILY_SHARED.
  • Produkty konsumowalne nigdy nie są udostępniane rodzinie, więc członek rodziny nigdy nie wywołuje CONSUMPTION_REQUEST ani nie pojawia się w Twoim raportowaniu zużycia. Zwroty w ramach Family Sharing zawsze dotyczą wyłącznie produktów niekonsumowalnych i subskrypcji automatycznie odnawialnych.

Jeden zakup w grupie Family Sharing może przekazać Twoją aplikację sześciu osobom. Osoba, która zapłaciła, jest jedną z nich. Pozostała piątka nigdy nie otworzyła portfela, a Apple i tak oczekuje, że Twoja aplikacja będzie działać dla nich wszystkich. Na taki układ godzisz się w chwili, gdy włączasz Family Sharing dla zakupu w aplikacji. To także powód, dla którego zwrot w ramach Family Sharing to zupełnie inne zwierzę niż zwykły. Gdy kupujący odzyskuje pieniądze, sprzedaż zostaje cofnięta dla jednego konta, ale dostęp, który przyznałeś nawet pięciu innym osobom, sam się nie wyłącza. Twój serwer musi to zrobić, a jeśli został napisany tak, by śledzić tylko kupującego, nie zrobi tego.

Oto cały obraz w jednym miejscu. Ten tekst pokazuje, jak Apple oznacza udostępniony zakup, jedno pole, które odróżnia kupującego od rodziny, dokładnie kiedy Apple wysyła Ci REVOKE i jak go odczytać, cichy szczegół oddzielający zwrot od kogoś, kto po prostu odchodzi z rodziny, oraz ile naprawdę kosztuje udostępniony zwrot, gdy policzysz moc obliczeniową, którą już wydałeś na osoby, które nigdy Ci nie zapłaciły.

Co rozdaje Family Sharing i ilu osobom

Włącz Family Sharing dla produktu, a zmienisz to, kto jest Twoim płacącym klientem. Grupa rodzinna u Apple może liczyć nawet sześć osób, jednego organizatora i nawet pięciu członków. Gdy ktokolwiek w grupie kupi produkt możliwy do udostępnienia rodzinie, wszyscy w grupie uzyskują do niego dostęp. Nie płacą. Nie pojawiają się w Twoich przychodach. Po prostu pojawiają się w Twojej aplikacji z ważnym uprawnieniem, ponieważ Apple wystawia każdemu z nich transakcję wskazującą na ten sam zakup.

Udostępnialne są tylko dwa typy produktów, a konsumowalne nie są jednym z nich

Family Sharing obejmuje dokładnie dwa rodzaje zakupów w aplikacji: niekonsumowalne i subskrypcje automatycznie odnawialne. Produkty konsumowalne, produkty typu monety i kredyty, nigdy nie są udostępniane, dlatego członek rodziny nigdy nie wywołuje CONSUMPTION_REQUEST ani nie pojawia się w Twoim raportowaniu zużycia. Jeśli Twoja aplikacja sprzedaje wyłącznie produkty konsumowalne, zwroty w ramach Family Sharing nie są Twoim problemem. Jeśli sprzedajesz dożywotnie odblokowanie lub plan cykliczny, są.

Pole, które odróżnia kupującego od beneficjenta

Każda transakcja wystawiana przez Apple niesie inAppOwnershipType. Ma ono dwie wartości. PURCHASED oznacza, że to konto zapłaciło za produkt i może nim zarządzać, w tym anulować go lub poprosić o zwrot. FAMILY_SHARED oznacza, że to konto to członek rodziny, który ma dostęp dzięki zakupowi kogoś innego. Oba uprawniają daną osobę do korzystania z Twojego produktu. Tylko jedno z nich zapłaciło. Pole to znajduje się w transakcji StoreKit, w paragonie i w App Store Server API, więc możesz je odczytać wszędzie tam, gdzie już sprawdzasz uprawnienia.

inAppOwnershipTypeKto to jestMoże zarządzać zakupem lub go zwrócićCzy zapłacili Ci
PURCHASEDKonto, które kupiło produktTakTak
FAMILY_SHAREDCzłonek rodziny z udostępnionym dostępemNieNie

Jak zwrot w ramach Family Sharing dociera do Twojego serwera

Zwrot za udostępniony zakup zaczyna się tak samo jak każdy zwrot Apple. Kupujący, jedyna osoba, która może, prosi Apple o zwrot pieniędzy. Apple decyduje. Jeśli Apple to przyzna, zakup kupującego zostaje cofnięty, a Apple wysyła Twojemu serwerowi powiadomienie REVOKE App Store Server Notification. Zarówno V1, jak i V2 powiadomienia je niosą. REVOKE to Twój jedyny sygnał, że uprawnienie za nim stojące, i każda jego udostępniona rodzinie kopia, jest teraz nieważne.

Nie cofaj jednej transakcji, odczytaj całą historię na nowo

Wytyczne Apple dotyczące REVOKE są bezceremonialne: nie traktuj go jak pojedynczego przełącznika. Gdy je otrzymasz, przejdź całą historię transakcji klienta i odbuduj jego uprawnienia od zera, ponieważ dana osoba może posiadać więcej niż jedną transakcję przyznającą ten sam lub inny produkt. Cofnij tylko transakcję wymienioną w powiadomieniu, a możesz albo zostawić członka rodziny z aktywnym dostępem po zwrocie, albo odciąć kogoś, kto wciąż ma ważne drugie uprawnienie. Za każdym razem odtwarzaj pełny obraz.

Dłoń unosząca jeden mosiężny klucz z pierścienia sześciu identycznych kluczy, obrazująca cofnięcie udostępnionego dostępu jednego członka rodziny po zwrocie w ramach Family Sharing

Jeden szczegół oddzielający zwrot od rozpadu rodziny

Oto pułapka, która kosztuje zespoły całe popołudnie debugowania. REVOKE może oznaczać dwie bardzo różne rzeczy dla transakcji FAMILY_SHARED, a sposobem, by je odróżnić, jest pole, które czasem po prostu jest nieobecne. Gdy kupujący dostaje zwrot, transakcja FAMILY_SHARED przychodzi z revocationDate. Gdy członek rodziny po prostu opuszcza grupę, ten sam rodzaj REVOKE przychodzi w ogóle bez revocationDate. Inżynierowie handlu Apple powiedzieli to wprost na forach dla deweloperów. Tak czy inaczej odbierasz dostęp, ale tylko ten z datą jest zwrotem, i tylko zwrot jest tym, który cofnął też płatność.

Ile naprawdę kosztuje Cię udostępniony zwrot

Prześledź pieniądze, bo to tutaj Family Sharing po cichu zmienia rachunek. Zwykły zwrot cofa jedną sprzedaż. Apple zwraca cenę kupującemu i oddaje swoją prowizję, więc po stronie sklepu wychodzi prawie na zero. Nigdy nie wraca to, co już wydałeś na dostarczenie produktu. Przy Family Sharing nie wydałeś tego raz. Wydałeś to na nawet sześć osób. Kupujący i nawet pięciu członków rodziny, każde z nich uruchamiało Twoją moc obliczeniową, wywoływało Twoje API, zapełniało Twoją pamięć i pobierało wszelkie wypłaty, które finansujesz, a wszystko to na podstawie jednej płatności.

Teraz kupujący dokonuje zwrotu. Ta jedna płatność zostaje cofnięta. Dostęp każdego członka rodziny powinien zakończyć się w tej samej chwili, ponieważ to, co uzasadniało ich obsługę, jeden opłacony zakup, zniknęło. Jeśli Twój serwer cofnie tylko transakcję PURCHASED, a zostawi transakcje FAMILY_SHARED aktywne, nawet pięć osób nadal korzysta z Twoich płatnych funkcji za darmo, a Ty dalej płacisz za ich obsługę, bez niczego w systemie, na czym można by oprzeć rozliczenie. To nie jest błąd zaokrąglenia. To pięciokrotność kosztu dostarczenia sprzedaży, którą właśnie oddałeś.

Co cofasz przy udostępnionym zwrocieKto traci dostępZa co dalej płacisz
Całą historię transakcjiKupujący i wszyscy członkowie rodzinyNic, dostęp kończy się dla wszystkich
Tylko transakcję PURCHASEDSam kupującyNawet pięciu członków rodziny, wciąż na Twojej mocy obliczeniowej, API, pamięci i wypłatach
Nic, bo przegapiłeś REVOKENiktKupujący i nawet pięciu członków, wszyscy za darmo

Subskrypcje sprawiają, że wyciek się powtarza

W przypadku produktu niekonsumowalnego niecofnięty członek rodziny to jednorazowa strata, która trwa, dopóki nie zauważysz. Przy subskrypcji automatycznie odnawialnej jest gorzej, ponieważ uprawnienie już było cykliczne. Zwrot za zamówienie subskrypcji powinien zakończyć udostępnianie dla całej grupy, ale pozostawiony aktywny członek rodziny zachowuje płatny poziom w każdym okresie rozliczeniowym, którego nie zamkniesz. Naprawa jest ta sama, odbuduj uprawnienia z pełnej historii przy każdym REVOKE, ale koszt pominięcia tego się kumuluje.

Zrobić to dobrze i przetestować, zanim zrobi to prawdziwy zwrot

Nie ma tu nic egzotycznego do zbudowania. Całe zadanie polega na powiązaniu dostępu z uprawnieniem, a nie z kupującym, i na odbudowaniu tego dostępu przy każdym REVOKE.

  • Przechowuj dostęp powiązany z transakcją i jej inAppOwnershipType, a nie z jednym kontem kupującego, aby transakcja FAMILY_SHARED sama przyznawała dostęp i mogła być sama cofnięta.
  • Przy każdym powiadomieniu REVOKE odczytaj na nowo pełną historię transakcji klienta i przelicz uprawnienia, zamiast wyłączać jedną wymienioną transakcję.
  • Traktuj transakcję FAMILY_SHARED z revocationDate jak zwrot i zakończ dostęp tego członka. Traktuj tę bez revocationDate jak odejście z rodziny i również ją zakończ.
  • Nie spiesz się z oddaniem do użytku zupełnie nowego udostępnionego zakupu. Apple wstrzymuje go na około godzinę, aby kupujący mógł się wycofać, więc honoruj transakcję, którą Apple faktycznie wystawia, zamiast przyznawać dostęp w momencie dotknięcia przycisku kupna.
  • Przećwicz to. Narzędzie Apple Testing Family Sharing pozwala symulować udostępnioną transakcję, a zwrot w środowisku sandbox wyzwala ten sam REVOKE, który otrzyma Twój serwer produkcyjny.

Zrób to, a zwrot w ramach Family Sharing stanie się niezdarzeniem. Kupujący dostaje pieniądze, cała grupa traci dostęp w tym samym rytmie, a Ty przestajesz płacić za obsługę osób, które nigdy Ci nie płaciły.

Często zadawane pytania

Czym jest inAppOwnershipType i jakie są jego wartości?
inAppOwnershipType to pole, które Apple umieszcza w każdej transakcji zakupu w aplikacji, z dwiema wartościami: PURCHASED dla konta, które kupiło produkt, i FAMILY_SHARED dla członka rodziny mającego dostęp dzięki zakupowi kogoś innego. Pojawia się tylko przy produktach niekonsumowalnych i subskrypcjach automatycznie odnawialnych, typach produktów, które Family Sharing obsługuje.
Czy Apple automatycznie cofa dostęp członków rodziny, gdy kupujący dostaje zwrot?
Nie. Apple cofa płatność kupującego i wysyła Twojemu serwerowi powiadomienie REVOKE App Store Server Notification, ale cofnięcie uprawnienia, w tym każdej jego udostępnionej rodzinie kopii, to zadanie Twojego serwera. Jeśli nie zareagujesz na REVOKE, członkowie rodziny zachowują dostęp po zwrocie.
Jak odróżnić zwrot w ramach Family Sharing od członka rodziny opuszczającego grupę?
Sprawdź revocationDate w transakcji FAMILY_SHARED. Gdy cofnięcie jest spowodowane zwrotem dla kupującego, transakcja niesie revocationDate. Gdy członek rodziny po prostu opuszcza grupę, REVOKE przychodzi bez revocationDate. Oba przypadki kończą uprawnienie, ale tylko ten z datą cofnął płatność.
Ile osób może korzystać z jednego zakupu udostępnionego rodzinie?
Nawet sześć, organizator plus maksymalnie pięciu członków rodziny. Jedna płatność może więc uprawniać sześć osób do Twojego produktu, dlatego udostępniony zwrot może zostawić nawet pięć osób na Twoich płatnych funkcjach, jeśli cofniesz tylko transakcję kupującego.
Czy mogę wyłączyć Family Sharing dla zakupu w aplikacji po jego włączeniu?
Nie. Włączenia Family Sharing dla zakupu w aplikacji w App Store Connect nie da się cofnąć. Gdy produkt staje się udostępnialny, pozostaje udostępnialny, więc Twoja obsługa zwrotów musi od tego momentu uwzględniać transakcje FAMILY_SHARED.
Czy zakupy produktów konsumowalnych są udostępniane rodzinie?
Nie. Family Sharing obejmuje wyłącznie produkty niekonsumowalne i subskrypcje automatycznie odnawialne. Produkty konsumowalne nigdy nie są udostępniane, więc członek rodziny nigdy nie wywołuje CONSUMPTION_REQUEST ani nie pojawia się w Twoim raportowaniu zużycia.

Źródła i materiały dodatkowe

RefundHalt

Autopilot zwrotów dla App Store i Google Play

Czytaj dalej

Kolejny wniosek o zwrot jest już w drodze.

Skonfiguruj RefundHalt w czasie potrzebnym na przeczytanie kolejnej wiadomości od pomocy technicznej o zwrocie, którego nie udało Ci się zakwestionować.