iPhone SDK aankopen in de app

Deze iPhone SDK-zelfstudie is de eerste in een multipart-serie over de verkoop van producten en services 'in-app' met het Store Kit-framework. Verwacht de voordelen en beperkingen te leren van het gebruik van de In App Purchase-functie, de stappen die nodig zijn om betaalde "in-app" -inhoud te registreren bij Apple Inc., hoe een eenvoudig winkelfront in te stellen en het verschil tussen het ingebouwde productmodel en het serverproductmodel voor contentdistributie en orderafhandeling.

1. Geef uw inhoud een pre-kwalificatie

Een van de krachtigste functies die met de iPhone SDK 3 wordt vrijgegeven, is de mogelijkheid om in-app-aankopen te verwerken. Omdat de App Store namens u de autorisatie en verwerking voor betalingen verwerkt, wordt het verkopen van virtuele goederen of services aanzienlijk eenvoudiger omdat ontwikkelaars zich kunnen concentreren op het maken en verkopen van geweldige inhoud in plaats van meer traditionele e-commercetaken zoals het coderen en opslaan van creditcardnummers. of het verwerken van creditcardbatches. Het gebruik van de in-app inkoopfunctie stroomlijnt ook het betaalproces voor gebruikers omdat ze eenvoudig hun gebruikersnaam en wachtwoord van Apple hoeven in te voeren om de transactie met hun iTunes-account te autoriseren.

Natuurlijk komen deze voordelen met een prijskaartje: Apple behoudt 30% van de verkoop, net zoals bij alle directe aankopen in de App Store. Als u ervoor kiest om de App Store te gebruiken als uw betalingsgateway, moet u ook voldoen aan de volgende bedrijfsregels die door Apple zijn vastgesteld:

  • Geen fysieke of real-world services toegestaan.
    Sorry, maar boodschappen, t-shirts en wasstraten kunnen momenteel niet worden verkocht als in-app-aankoop.
  • Virtuele valuta is niet toegestaan.
    Apple staat momenteel geen oprichting van een virtuele economie toe met een directe intermediaire valuta.
  • Items of services die in uw toepassing zijn gekocht, moeten toegankelijk zijn voor uw toepassing.
    Net als bij de beperking van het verkopen van echte goederen, voorkomt dit dat ontwikkelaars dingen verkopen zoals kortingsbonnen of aanbiedingen die buiten de app kunnen worden ingewisseld.
  • Geen laster, haatspraak, pornografie of gokken.
  • Apple heeft de volgende lijst met goedgekeurde categorieën gepubliceerd:
  • Inhoud
    Omvat digitale boeken, tijdschriften, foto's, illustraties, spelniveaus, gamekarakters en andere digitale inhoud die kan worden afgeleverd binnen uw applicatie.
  • functionaliteit
    Producten ontgrendelen of breiden functies uit die u al in uw toepassing hebt geleverd. U kunt bijvoorbeeld een spel verzenden met meerdere kleinere spellen die door de gebruiker kunnen worden gekocht.
  • Diensten
    Sta uw toepassing toe om gebruikers in rekening te brengen voor eenmalige services, zoals spraaktranscriptie. Elke keer dat de service wordt gebruikt, is er een afzonderlijke aankoop.
  • abonnementen
    Geef op uitgebreide basis toegang tot inhoud of services. Uw applicatie kan bijvoorbeeld maandelijks toegang bieden tot financiële informatie of tot een online game portal. U moet een redelijke vernieuwingsfrequentie definiëren om te voorkomen dat gebruikers onaangename herinneringen krijgen. Houd er rekening mee dat u verantwoordelijk bent voor zowel het verlopen van het abonnement als het vernieuwen van de verlenging; de App Store bewaakt de duur van het abonnement niet en biedt geen automatisch factureringsmechanisme.

2. Maak een nieuw Xcode-project en importeer het Store Kit Framework

Het Store Kit Framework biedt de kracht en functionaliteit die u zult gebruiken om uw in-app aankopen te ontwikkelen. Hoewel het framework zelf de betalingen van uw gebruikers niet toestaat, fungeert het wel als een brug tussen uw toepassing en Apple, waardoor u eenvoudig berichten kunt verzenden en ontvangen van de iTunes App Store.

Bekijk de volgende illustratie van Apple Inc. om dit concept beter te begrijpen:

Open Xcode en maak een nieuw iPhone-project door "View Based Application" te selecteren als standaardtoepassingstype. Noem de toepassing "InAppDemo" of voeg een creatievere titel naar keuze toe.

Klik met de rechtermuisknop op de map "Frameworks" in het deelvenster Groepen en bestanden en selecteer Toevoegen -> Bestaande frameworks. Zoek StoreKit.framework en klik op "Toevoegen".

Om het framework in ons project te gebruiken, moeten we het toevoegen aan de controlecontroleklasse van ons project. Vouw de map "Classes" uit en klik op InAppDemoViewController.h.

Voer deze regel net onder de opdracht "import UIKit" in:

 #importeren  

Uw toepassing zou nu in staat moeten zijn om te profiteren van de Store Kit Framework-functionaliteit.

3. Registreer Premium-inhoud met Apple Inc.

Elk virtueel product of elke dienst die u in-app wilt verkopen, moet bij Apple zijn geregistreerd en een unieke product-ID hebben gekregen. Verrassend genoeg worden deze ID's gegenereerd in iTunesConnect, niet in de Developer Program Portal.

Voor nieuwe toepassingen presenteert dit het klassieke probleem "kip-of-ei". Om uw in-app aankoopproject te bouwen, moet u product-ID's genereren, maar omdat product-ID's alleen kunnen worden aangemaakt via iTunesConnect, moet uw aanvraag al zijn ingediend voor publicatie.

De oplossing voor dit dilemma is om door het proces te lopen van het indienen van uw aanvraag voor beoordeling door Apple, maar selecteer het "upload applicatie binaire later" selectievakje wanneer u naar het tabblad "Uploaden" komt. Hierdoor wordt uw toepassing in de status 'Wachten op uploaden' geplaatst, wat u wilt om een ​​formele beoordeling van uw aanvraag te voorkomen terwijl u nog steeds uw in-app-aankopen integreert en configureert.

Log in op uw iPhone ontwikkelaarsaccount en ga naar de iPhone Provisioning Portal om het proces van indienen van een testtoepassing te starten. Als u nog geen lid bent van het iPhone Developer Program, moet u zich hier aanmelden.

Nadat u zich bij de Provisioning Portal hebt aangemeld, selecteert u het tabblad 'App-ID's'. Klik op 'Nieuwe app-ID'.

U moet een algemene naam en een unieke bundel-ID invoeren. De algemene naam wordt gebruikt om deze app-ID binnen de provisioningportal te identificeren en de bundelidentificatie is een unieke ID voor uw binaire applicatie. Wanneer u een app ontwikkelt die in-app-aankopen gebruikt, moet u een volledige bundelidentificatie gebruiken. Geen "wildcard" -ID's zijn toegestaan.

Klik op verzenden. Je wordt teruggebracht naar de hoofdpagina App-ID's.

Zoek uw nieuw gemaakte app-ID in de lijst en klik vervolgens op de koppeling 'Configureren' rechts van de app.

Vink op het scherm "App-ID configureren" het selectievakje aan naast "Inkoop van app inschakelen" en klik op de knop "Gereed":

U zou nu een unieke app-ID moeten hebben die u kunt gebruiken om te beginnen met het ontwikkelen van de functie voor in-app-aankopen.

U maakt nu een aanvraag voor een testapplicatie, dus verlaat het programmaportaal en log in op uw iTunesConnect-account op itunesconnect.apple.com.

Zodra u zich in uw account bevindt, selecteert u de optie "Toepassingen beheren" en selecteert u vervolgens "Nieuwe toepassing toevoegen" linksboven in het paneel.

Loop door de voorgestelde schermen voor het toevoegen van een nieuwe applicatie en zorg ervoor dat u de optie "voeg binaire applicatie toevoegen" selectievakje op het tabblad "Uploaden" inschakelt. Tijdens het proces moet u waarschijnlijk een willekeurige testafbeelding uploaden voor het 512x512-logo en de primaire schermafbeelding.

Nadat u uw dummy-inzending heeft voltooid, wordt u teruggebracht naar de iTunesConnect-startpagina voor toepassingsbeheer. Selecteer de applicatie-inzending die u zojuist hebt gemaakt en selecteer vervolgens 'In app-aankopen beheren'.

Om uw eerste item toe te voegen, selecteert u "NIEUW MAKEN" met de knop linksboven.

U wordt nu gevraagd om de bundel-ID te selecteren waaraan uw in-app-aankopen zijn gekoppeld. Selecteer de unieke bundelidentificatie die u eerder in deze zelfstudie hebt gemaakt en klik op 'Doorgaan'. Als u de zelfstudie strikt volgt, is de te selecteren bundel-ID "com.mobiletuts.inapppurchasedemo."

U krijgt nu een reeks opties voor prijzen te zien op het scherm "Create New In App Purchase". Zoals vermeld in de tips voor hulpinstrumenten, is "Referentienaam" voor het identificeren van uw aankoopaanbieding in iTunesConnect-zoekresultaten en zal "Product-ID" worden gebruikt om uw toepassing in iTunesConnect-rapporten te identificeren.

Apple moedigt je aan om te kiezen tussen 'Inhoud', 'Functionaliteit', 'Services' en 'Abonnementen' wanneer je de mogelijke categorieën voor je in-app-aanbiedingen in overweging neemt, maar als het erop aankomt om ze daadwerkelijk in de winkel in te dienen, word je gedwongen om je app te identificeren met een van de drie volledig nieuwe typen.

Zoals beschreven door Apple Inc. zijn deze typen:

  • verbruiksartikelen:
    Producten moeten worden gekocht telkens als de gebruiker dat item nodig heeft. Diensten worden bijvoorbeeld vaak geïmplementeerd als verbruiksproducten.
  • Niet-verbruiksartikelen:
    Producten kunnen slechts één keer door gebruikers worden gekocht. Zodra een niet-consumeerbaar product is aangeschaft, is het altijd beschikbaar op alle apparaten die zijn gekoppeld aan het iTunes-account van die gebruiker. Store Kit-providers ondersteunen om niet-verbruiksartikelen op andere apparaten te herstellen.
  • abonnementen:
    Ken attributen van zowel consumeerbare als niet-consumeerbare producten. Net als een verbruiksartikel kan een abonnement meerdere keren worden gekocht; Hiermee kunt u uw eigen verlengingsmechanisme in uw toepassing implementeren. Abonnementen moeten echter worden verstrekt op alle apparaten die aan een gebruiker zijn gekoppeld. In de App Purchase verwacht u dat abonnementen worden geleverd via een externe server die u zult leveren. U moet infrastructuur bieden om abonnementen op meerdere apparaten te bezorgen.

Selecteer degene die van toepassing is op uw aanbiedingssoort of "Verbruiksmateriaal" als u deze zelfstudie strikt volgt. Merk op dat als dit type eenmaal is ingesteld, dit niet op een later tijdstip kan worden gewijzigd, dus kies verstandig.

Vervolgens stellen we de aanbiedingsprijs in, wat wordt gedaan door een prijsniveau te selecteren in plaats van rechtstreeks een waarde in te voeren. Het In App Purchase-prijstabelsysteem is hetzelfde als het systeem voor rechtstreekse inkooplagen dat wordt gepresenteerd bij het voor het eerst uploaden van uw toepassing, maar als u uw opties opnieuw wilt bekijken, klikt u rechts van de vervolgkeuzelijst op de tekst "Zie prijsmatrix".

Ga je gang en selecteer "Tier 1" voor de prijs of welke laag ook bij jouw aanbod past. Zorg ervoor dat u het vakje "Gewist voor verkoop" aanvinkt, ook al bent u nog niet klaar om uw toepassing te starten. Dit vakje moet worden gecontroleerd om uw code te debuggen en te testen.

Met het veld "Display Detail" kunt u eenvoudig de lokalisatie van het aanbod regelen. Selecteer de taal (talen) waarin u uw aanbod wilt opnemen en voeg uw aangepaste weergavenaam en beschrijving toe. Apple heeft een betekenisvolle en specifieke beschrijving nodig om goedkeuring te krijgen.

Voorlopig kunt u het veld Screenshot-set overslaan omdat het puur een leidraad is voor de beoordeling door de Apple-medewerker van uw product. Klik op 'Wijzigingen opslaan' om dit aanbod bij Apple te registreren. Herhaal dit proces om extra items toe te voegen voor verkoop 'in app'.

Deze tutorial gebruikt de volgende generieke gegevens voor onze aanbiedingen, maar voel je vrij om zo creatief te zijn als je zou willen om je eigen in te voegen:

Product 1 | Verbruiksartikelen | com.mobiletuts.inappdemo.1 | Niveau 1
Product 2 | Verbruiksartikelen | com.mobiletuts.inappdemo.2 | Tier 2
Product 3 | Verbruiksartikelen | com.mobiletuts.inappdemo.3 | Niveau 3

4. Bouw je winkelfront op

Nadat u uw premium-items met iTunesConnect heeft geregistreerd, bent u klaar om deze aanbiedingen in uw app te integreren. Voor het doel van deze tutorial gebruiken we een eenvoudige UITableView om onze productvermelding weer te geven.

Ga naar het headerbestand voor de hoofdcontroller van de toepassingsweergave, in dit geval InAppDemoViewController.h, en wijzig de code om er als volgt uit te zien:

 #importeren  #importeren  @interface InAppDemoViewController: UIViewController  NSMutableArray * productIdentifierList; NSMutableArray * productDetailsList; IBOutlet UITableView * productDisplayTableView;  @property (nonatomic, retain) NSMutableArray * productIdentifierList; @property (nonatomic, retain) NSMutableArray * productDetailsList; @property (nonatomic, retain) UITableView * productDisplayTableView; @einde 

De array productIdentifierList slaat de product-ID's op die we in stap 3 hebben gemaakt als strings, terwijl productDetailsList de gelokaliseerde productinformatie opslaat die door de App Store wordt geleverd en die daadwerkelijk aan de gebruiker wordt getoond.

Ga nu naar het klasse-implementatiebestand, InAppDemoViewController.m, en synthetiseer de variabelen die u zojuist hebt gedeclareerd in uw header-bestand:

 @implementation InAppDemoViewController @synthesize productIdentifierList, productDetailsList, productDisplayTableView; 

Maak de viewDidLoad-functie uncomment en initialiseer uw gegevensbron:

 - (void) viewDidLoad productDetailsList = [[NSMutableArray alloc] init]; productIdentifierList = [[NSMutableArray alloc] init]; voor (korte item_count = 1; item_count <= 3; item_count++)  [productIdentifierList addObject:[NSString stringWithFormat:@"com.mobiletuts.inappdemo.%d", item_count]];  SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithArray:productIdentifierList]]; request.delegate = self; [request start]; [super viewDidLoad];  

In een toepassing uit de echte wereld zouden we nooit deze code voor het laden van aankopen in de methode viewDidLoad willen plaatsen, omdat deze wordt uitgevoerd in de hoofdthread en de toepassingsinterface kort wordt vergrendeld tijdens het ophalen van de gegevens. We gebruiken viewDidLoad hier alleen voor demonstratiedoeleinden.

Vanaf regel 6 maken we een for-lus om het aantal items dat we willen weergeven te herhalen. Omdat we een gemeenschappelijk naamgevingsschema gebruiken voor onze product-ID's, kunnen we meerdere items tegelijkertijd maken zonder elke ID handmatig uit te typen. Merk op dat dit patroon verder kan worden verbeterd met enkele internetprogrammering: uw product-identificatielijst zou idealiter van een externe server worden geladen om u in staat te stellen producten dynamisch toe te voegen of te verwijderen zonder telkens een nieuw binair bestand door de App Store te pushen.

Vanaf regel 10 maken we kennis met ons eerste Store Kit Framework-object, SKProductsRequest. Dit object wordt gebruikt om een ​​lijst met product-ID's naar de App Store te sturen om een ​​lijst met gelokaliseerde productinformatie en nauwkeurige productprijsinformatie te ontvangen. Deze dynamische lokalisatie- en productverzamelingstechniek biedt u veel meer flexibiliteit dan het handmatig coderen van deze kenmerken.

Op regel 12 stellen we de verzoekafspraak in die het Store Kit Framework zal oproepen na ontvangst van een resultaat. Kopieer en plak de volgende code om te voldoen aan dit delegatieprotocol:

 -(void) productsRequest: (SKProductsRequest *) request didRiveResponse: (SKProductsResponse *) response [productDetailsList addObjectsFromArray: response.products]; [productDisplayTableView reloadData];  - (void) requestDidFinish: (SKRequest *) request [verzoek vrijgave];  - (ongeldig) verzoek: (SKRequest *) request didFailWithError: (NSError *) error NSLog (@ "Failed to connect with error:% @", [error localizedDescription]);  

De productsRequest-methode wordt genoemd nadat de lijst met producten is opgehaald uit de App Store en we die lijst met productobjecten uit de App Store toewijzen aan onze array van productDetailsList voor later gebruik. De andere twee protocolmethoden werken zoals verwacht.

Nu gaan we verder met het instellen van de UITableView die zal worden gebruikt om onze productinformatie weer te geven. Begin met het instellen van je penpunt in Interface Builder. Vouw de map "Bronnen" in het deelvenster Groepen en bestanden uit en dubbelklik op het InAppViewController.xib-bestand om Interface Builder te openen..

Sleep vanuit het Bibliotheekvenster een UITableView-object naar het venster In app Demo View Controller. Klik met de rechtermuisknop op de UITableView in het venster en verbind de dataSource en delegeer met de eigenaar van het bestand. Klik vervolgens met de rechtermuisknop op de eigenaar van het bestand en sluit productDisplayTableView aan met het UITableView-object. Bewaar en sluit de penpunten.

Ga terug naar het uitvoeringsbestand van de view-controller, InAppDemoViewController.m.

Plak in de volgende regels om te voldoen aan de UITABLEViewDelegate en UITableViewDataSource-protocolvereisten:

- (NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection: (NSInteger) sectie return [self.productDetailsList count];  - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath static NSString * GenericTableIdentifier = @ "GenericTableIdentifier"; UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: GenericTableIdentifier]; if (cell == nil) cell = [[[UITableViewCell alloc] initWithFrame: CGRectZero reuseIdentifier: GenericTableIdentifier] autorelease];  NSUInteger rij = [rij indexPath]; SKProduct * thisProduct = [productDetailsList objectAtIndex: rij]; [cell.textLabel setText: [NSString stringWithFormat: @ "% @ -% @", thisProduct.localizedTitle, thisProduct.price]]; terugkeer cel;  

Het grootste deel hiervan is de standaardcode voor het weergeven van tekst in UITableView-cellen. Houd er echter rekening mee dat we een exemplaar van SKProduct, dit product, maken om de productgegevens voor de huidige rij op te halen en dat we gemakkelijk gelokaliseerde productinformatie kunnen ophalen van de gegevensleden van het object. Raadpleeg de officiële Apple SKProduct-referentie voor meer informatie over alle beschikbare gegevens.

U zou nu uw applicatie moeten kunnen compileren en uitvoeren, maar er is een valstrik: in de App Store kunnen aankopen alleen op een echt apparaat worden getest, dus u moet een provisioningprofiel voor deze toepassing maken en installeren om de toepassing te testen. code.

Nadat u uw provisioningprofiel en geconfigureerde Xcode hebt geïnstalleerd, moet u de toepassing op uw apparaat bouwen en uitvoeren. Een basistabelweergave met producttitels is te simplistisch voor uw app in de echte wereld, maar het mooie van het In App Purchase-systeem is dat de winkelhuid helemaal aan u is. In toekomstige tutorials in deze serie zal een geavanceerdere interface worden gemaakt. Onderneem intussen uw creativiteit en gebruik elk ontwerp dat u wilt laten zien aan uw producten!

5. Kies een distributiestrategie

Voordat u transacties gaat autoriseren en nieuwe inhoud aan uw gebruikers verkoopt, neemt u even de tijd om na te denken over hoe nieuwe inhoud wordt geleverd. Met het Store Kit-raamwerk kunt u gemakkelijk een aankoop autoriseren, maar u staat er alleen voor als het gaat om het afhandelen van bestellingen. Het ingebouwde productmodel en het serverproductmodel zijn de twee primaire ontwerppatronen waaruit u kunt kiezen om ervoor te zorgen dat uw gebruikers krijgen waarvoor ze betalen.

Ingebouwde productmodel

Met het ingebouwde productmodel is alles wat een gebruiker kan kopen al bij de eerste toepassing inbegrepen in de toepassing. Deze inhoud is vergrendeld of verborgen voor gebruik tot nadat een in-app-aankoop is gedaan, waarna de aanbieding bruikbaar wordt.

Het volgende diagram van Apple Inc. illustreert het ingebouwde productmodel:

Serverproductmodel

In het productmodel van de server wordt de inhoud dynamisch naar het apparaat van de gebruiker gepusht op het moment van aankoop vanaf een server die onder uw controle staat. In het serverproductmodel moet u de extra stap toevoegen om te controleren of de transactiebon die is ontvangen van het clientapparaat geldig is en dat u mogelijk ook een mechanisme moet instellen om uw gebruikers te identificeren om ervoor te zorgen dat abonnementen en andere niet-verbruiksartikelen kunnen nog steeds toegankelijk vanaf elk iPhone OS-apparaat dat de eigenaar van de aankoop bezit, en niet alleen vanaf het apparaat waarop het product oorspronkelijk is aangeschaft (dit is een zakelijke vereiste van Apple). U bent ook verantwoordelijk voor het onderhandelen over de netwerkverbinding om mogelijk een aanzienlijke hoeveelheid tekst- of multimediagegevens over te dragen.

Een van de belangrijkste voordelen van het serverproductmodel is dat u een grote hoeveelheid inhoud op aanvraag kunt verkopen terwijl de aanvankelijke downloadgrootte van uw toepassing klein blijft. Het is ook veel sneller om nieuwe premium-inhoud te maken en aan uw app te leveren, omdat u niet via de iTunes Store een nieuwe toepassingsbinary hoeft te pushen om nieuwe items te koop aan te bieden.

Het volgende diagram van Apple Inc. illustreert het serverproductmodel:

Zoals je kunt zien, is het ingebouwde productmodel de eenvoudigste van de twee ontwerppatronen. Het is gemakkelijker te implementeren en te onderhouden, maar mist de kracht van on-demand levering. Het serverproductmodel is veel complexer, maar biedt u de mogelijkheid om nieuwe inhoud te maken met grotere flexibiliteit en snelheid, en ook om uw toepassingsgrootte te verminderen door grote downloads alleen te leveren als dat nodig is.

Zowel het ingebouwde productmodel als het serverproductmodel zullen in toekomstige delen van deze serie in detail worden behandeld.

Het is nu een goed moment om beide distributiemodellen in overweging te nemen en te bepalen welke het beste past bij uw toepassing.