Vraag (iOS + StoreKit) Kan ik detecteren wanneer ik in de sandbox ben?


Ik heb in-app-aankopen prima en ik ga de servervalidatieroute. De server moet weten of ik in de sandbox zit of niet, dus op dit moment stuur ik hem een ​​"& sandbox = 1" parameter. Natuurlijk, wanneer de volledige versie van de app beschikbaar is, zal ik deze parameter niet verzenden.

Ik heb liever dat dit niet hardcoded is in mijn app, omdat dat het testen in de toekomst moeilijk zal maken, en het is nog een (groot) iets om te onthouden om te veranderen voordat je builds naar Apple verstuurt.

Is er een manier waarop ik StoreKit kan vragen als ik in de sandbox ben, zodat ik vervolgens kan bepalen of ik deze parameter naar mijn server moet verzenden? Of is er een andere beste methode voor het afhandelen van servervalidatie?

Als je hier meer over nadenkt, moet ik dan gewoon de server altijd eerst het live-systeem laten controleren en daarna de sandbox? Als Apple ID's worden gescheiden tussen de live- en sandbox-systemen, zou dat geen kwaad kunnen doen?

Bedankt.


21
2018-03-13 01:32


oorsprong


antwoorden:


Na een beetje graven vond ik dit van Apple Technische noot TN2259:

Hoe verifieer ik mijn kwitantie (iOS)?

Verifieer altijd eerst uw ontvangstbewijs met de productie-URL; ga verder met verifiëren met de sandbox-URL als u een 21007-statuscode ontvangt. Door deze aanpak te volgen, zorgt u ervoor dat u niet hoeft te schakelen tussen URL's terwijl uw toepassing wordt getest of beoordeeld in de sandbox of live in de App Store.

Dus het lijkt erop dat ik de &sandbox parameter volledig en doe dat gewoon. Ik moest echt op zoek naar dit antwoord, dus ik plaats het hier in de hoop dat iemand anders het tegenkomt!


63
2018-03-13 01:54



Ik ondervond hetzelfde probleem, waarbij mijn app werd geweigerd omdat de "productie" -versie van mijn app die ik heb ingediend, hard gecodeerd is om verbinding te maken met een PHP-script op mijn server dat bonnen valideert met de echte AppStore-server (terwijl mijn ontwikkelversie verwijst naar een ander PHP-script dat bonnen valideert met de sandbox-server). Na enkele uitwisselingen met Apple-technici kwam ik er echter achter dat ze gebruikersaccounts met sandbox gebruiken om ingediende applicaties te testen, wat verklaart waarom ze een fout hebben gemaakt.

In plaats van het voorwaardelijk bouwen van mijn app om naar het ene of het andere script te wijzen, zal ik een enkel script gebruiken dat eerst de productieserver probeert en dan terugvalt naar de sandbox-server als het de 21007 statuscode ontvangt, zoals hierboven uitgelegd!

Hartelijk bedankt!


9
2018-03-20 21:48



Verifieer altijd eerst uw ontvangstbewijs met de productie-URL; ga verder met verifiëren met de sandbox-URL als u een 21007-statuscode ontvangt.

Helaas vermeldt de technische opmerking niet dat dit alleen geldig is voor automatisch verlopende abonnementen!

Als de In-app aankoop programmeergids vermeldt onderstaande tabel 7-1:

Belangrijk De niet-nul-statuscodes zijn hier alleen van toepassing bij het herstellen van informatie over een automatisch hernieuwbaar abonnement. Gebruik deze statuscodes niet bij het testen van antwoorden voor andere soorten producten.

Bij niet-verlengde abonnementen retourneert de productieserver geen statuscode, maar een correcte bon.

In het geval dat u gedwongen wordt om niet-vernieuwing te gebruiken en uw eigen logica voor het verlopen van abonnementen implementeert, is een mogelijke oplossing om uw app-versie naar uw server te sturen en bij te houden welke versies momenteel in ontwikkeling zijn, zodat u kunt omleiden naar de sandbox.itunes-server om, indien van toepassing, ontvangsten te verifiëren en de x-minuten verlooptijd van een abonnement na te bootsen (zoals sandbox.itunes doet voor automatische verlenging) voor ontwikkeling op uw server.


6
2018-06-02 13:13