Vraag Aankopen in de Sandbox voor in-app-aankopen van IOS voor een testgebruiker wissen


Heeft iemand ideeën over het opnieuw instellen en / of wissen van de IOS in-app-inkoopsandbox? Ik heb een app die ik test met de sandbox en ik wil graag nieuwe aankopen testen zonder telkens een nieuwe testgebruiker te moeten maken als ik iets koop. Als ik dit niet doe, krijg ik (natuurlijk) altijd een bericht dat het item voor in-app-aankopen al is gekocht wanneer ik op de koopknop van mijn app klik.


94
2017-10-12 22:45


oorsprong


antwoorden:


IMO er zijn 3 dingen die je kunt doen om het testen van niet-verbruiksartikelen draaglijk te maken:

  1. U kunt meerdere testaccounts aan één e-mail koppelen. Met Gmail kun je bijvoorbeeld een "plus" -tekenreeks aan de e-mail toevoegen om aliassen voor een adres te maken: zo tester+01@gmail.com en tester+02@gmail.com beide gaan echt gewoon naar tester@gmail.com. Waarschijnlijk doen andere e-mailhosts hetzelfde. Wanneer u een testaccount aanmaakt, moet u het volgende introduceren: voornaam, achternaam, e-mailadres, wachtwoord, geheime vraag, geheim antwoord, geboortedatum en land van de iTunes Store. U kunt exact dezelfde gegevens (inclusief wachtwoord) opgeven voor tester+01@gmail.com en tester+02@gmail.com en je hebt twee testaccounts. Eindelijk, in uw tester@gmail.com Inbox ontvangt u twee verificatie-e-mails van Apple om beide testaccounts te bevestigen.

  2. Stel dat u een niet-verbruiksartikel hebt met product-ID @ "Extra_Levels". In plaats van het schrijven van @ "Extra_Levels" in alle methoden (requestProduct, purchaseProduct, ...), schrijft u gewoon PRODUCT_ID1 en op een gegeven header-bestand #define PRODUCT_ID1 @"Extra_Levels" (zonder puntkomma!), dan zal de preprocessor zoeken naar PRODUCT_ID1 en deze vervangen door @ "Extra_Levels". Het maken van een nieuwe niet-verbruiksartikel genaamd @ "Extra_Levels_01" en het wijzigen van de #define zal zo goed zijn als het resetten van de aankopen voor al uw testgebruikers.

  3. Zoals appsmatici hebben aangegeven, kunt u het correcte gedrag van uw code testen wanneer u een niet-verbruikbare IAP koopt door eerst een verbruiks-IAP te gebruiken (zodat de testgebruiker zoveel aankopen kan doen als nodig is) om van een aantal bugs af te komen. Natuurlijk moet je de code daarna ook testen met de echte niet-verbruikbare IAP.


62
2018-03-25 23:28



Je kunt dit niet doen, voor zover ik weet. De sandbox-backend werkt als een echt account. Nadat het is gekocht, wordt het gekocht (en kun je dus het herstel testen). Je zou het grootste deel van je ontwikkeling moeten doen met het winkelmateriaal dat is opgelicht, en als je het echt gaat testen, verwacht dan dat je verschillende testaccounts maakt.


31
2017-10-12 22:47



Ik heb 2 items voor app-aankopen. 1 voor productie. en de andere voor het testen. wanneer ik moet "wissen", verwijder ik het in-app-item en maak ik een nieuw item (15 seconden in itunes connect en 1 seconde om het product-ID in code te wijzigen)

als ik "nieuwe gebruiker" niet hoef te testen, gebruik ik de productie in app-item.


7
2018-04-12 09:56



Nou, technisch gezien heb je dat niet nodig.

Als je krijgt SKPaymentTransactionStateRestored, het is 100% gelijk aan de app store die de gebruiker verifieert en hem de aankoop toestaat. Ik heb een schakelaar zoals:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
  for( SKPaymentTransaction *purch in transactions )
  {
    switch( purch.transactionState )
    {
      case SKPaymentTransactionStateRestored:
        info( "PURCHASE RESTORE" ) ;
        // fall thru
      case SKPaymentTransactionStatePurchased:
        [[SKPaymentQueue defaultQueue] finishTransaction:purch];
        // Do regular changes to app state for this purchase,
        // register in keychain, etc.
        break ;

       //.. other cases
     }
  }
}

De kwestie van het hebben van uw app-logica / de aankoop terugnemen is eenvoudig: als u aankopen in een sleutelhanger in de cache plaatst, verwijdert u uw sleutelhanger. Als je het op een andere manier doet, verander dan gewoon je lokale app-status om te doen alsof de gebruiker het nooit eerder heeft gekocht. Het verzoek om een ​​dialoogvenster te kopen is nog steeds precies hetzelfde, het enige verschil is dat wanneer u JA slaat, dit u geeft SKPaymentTransactionStateRestoredin plaats van SKPaymentTransactionStatePurchased.


6
2017-11-21 02:09



Uitchecken SimStoreKit. Het is een "gesimuleerde versie van de StoreKit van de iPhone, voor het testen van winkel UI's op de iPhone Simulator, of zelfs op het apparaat zonder IAP in Connect te hoeven instellen."

SimStoreKit slaat aankopen op in de gebruikersinstellingen onder de sleutel ILSimSKTransactions. Dus om alle aankopen te wissen die u kunt doen:

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"ILSimSKTransactions"]

In de simulator kunt u eenvoudig uw app verwijderen en opnieuw installeren.

Ik heb met succes SimStoreKit gebruikt om fouten in de winkel van mijn app te debuggen voordat ik met de sandbox testte. Het mooie van deze bibliotheek is dat deze kan worden ingesteld om dezelfde klassenamen te gebruiken als het echte StoreKit-framework (door te doen #define ILSimReplaceRealStoreKit 1 voor het doen #include <ILSimStoreKit.h>).

In bronbestanden waar ik toegang tot StoreKit nodig heb, neem ik dit headerbestand op:

#import <TargetConditionals.h>

#if TARGET_IPHONE_SIMULATOR
    #define kILSimAllowSimulatedStoreKit 1
    #define ILSimReplaceRealStoreKit 1
    #import <ILSimStoreKit.h>
#else
    #import <StoreKit/StoreKit.h>
#endif

Dit heeft het effect van het gebruik van SimStoreKit wanneer ik op de simulator en de echte StoreKit loop wanneer ik op het apparaat gebruik.


3
2018-01-20 11:12



Het verwijderen van je app en het opnieuw installeren werkt ook voor sandbox-testen. Afhankelijk van de app uiteraard, maar ik ben een op een abonnement gebaseerde app aan het testen die alleen aankopen doet tijdens het inschrijven op dit moment, dus het was de gemakkelijkste oplossing.


3
2017-10-12 16:26



Blijf gewoon dezelfde testaccount gebruiken en herstel uw aankopen in plaats van nieuwe te voltooien. Immers, of u nu een nieuwe aankoop start of een oude aankoopt, zal UW APP hetzelfde doen (althans aanvankelijk, misschien zal de gebruikersinterface na voltooiing anders worden bijgewerkt). Apple zijn de mensen die de dingen anders behandelen in die verschillende situaties - maak je er geen zorgen over.

Plaats uw leveringslogica in de geval SKPaymentTransactionStateRestored binnen de implementatie van deze methode voor testen:

- (void)paymentQueue:(SKPaymentQueue *)queue
 updatedTransactions:(NSArray *)transactions;

Breng dan die afleveringslogica in de zaak SKPaymentTransactionStatePurchased.

Aan het einde, want de meesten van ons zijn obsessief-compulsief in verschillende mate, doe een laatste test met een nieuwe account (geen grote moeite om een ​​tweede te maken voor absolute zekerheid).

Het laatste ding om op te merken: overweeg de positie van de appel. Als er een probleem was met ontwikkelaars die tijd moesten verspillen aan het maken van tientallen of honderden accounts om IAP grondig te testen, hadden ze het probleem opgelost. Er is geen probleem.


0
2018-03-04 08:05



Niet echt een antwoord, maar een hulpmiddel bij het uitleggen.

Dacht dat sinds het bestand gedownload moest worden, dat het misschien gewoon kon worden verwijderd. De eenvoudige functie hieronder probeert dat (Swift 3.0):

func removeReceipt() {
    if let receiptURL = Bundle.main.appStoreReceiptURL {
        print("receipt URL: \(receiptURL)")
        do {
            try FileManager.default.removeItem(at: receiptURL)
            print("Success")
        } catch let error as NSError {
            print("ERROR: \(error.localizedDescription)")
        }
    }
}

Heb de volgende reactie:

ontvangst URL: file: /// private / var / mobile / Containers / Data / Application / 7A2-App-Related-Number-67 / StoreKit / sandboxReceipt

FOUT: "sandboxReceipt" kan niet worden verwijderd, omdat u geen toegangsmachtiging hebt.

Hoewel de code laat zien dat het de bon uit de app-bundel haalt, had hij gedacht dat de bundel statisch was, en dus kan de bon nog steeds worden verwijderd. Ik ben er zeker van dat er veiligheidsredenen zijn waarom dit allemaal op deze manier werkt - dus uiteindelijk moest ik de app verwijderen voor (her) test van het niet ontvangen van een bon naar een nieuwe bon gedownload.


0
2018-05-20 17:48



alternatief om een ​​oplossing voor meerdere testgebruikers te creëren, kunt u meerdere tests in app-aankopen in iTunes Connect maken en hoeft u geen gebruikersaccount te wijzigen.


-2
2017-07-12 06:31