Questo tutorial per iPhone SDK è il primo di una serie multipart sulla vendita di prodotti e servizi "in-app" con il framework Store Kit. Aspettati di scoprire i vantaggi e le limitazioni dell'utilizzo della funzione In App Purchase, i passaggi necessari per registrare il contenuto "in-app" pagato con Apple Inc., come configurare un front store semplice e la differenza tra il modello di prodotto incorporato e il modello di prodotto server per la distribuzione del contenuto e l'evasione degli ordini.
Una delle funzionalità più potenti rilasciate con iPhone SDK 3 è la possibilità di elaborare acquisti "in app". Poiché l'App Store gestisce l'autorizzazione e l'elaborazione dei pagamenti per tuo conto, questa funzione rende la vendita di beni o servizi virtuali molto più facile in quanto gli sviluppatori sono in grado di concentrarsi sulla creazione e sulla vendita di contenuti eccezionali invece di attività di e-commerce tradizionali come la crittografia e la memorizzazione dei numeri di carta di credito o elaborazione di lotti di carte di credito. L'utilizzo della funzione di acquisto in-app semplificherà inoltre la procedura di checkout per gli utenti in quanto è sufficiente inserire il nome utente e la password Apple per autorizzare la transazione con il proprio account iTunes.
Naturalmente, questi vantaggi hanno un prezzo: Apple manterrà il 30% della vendita, come fanno su tutti gli acquisti diretti su App Store. La scelta di utilizzare l'App Store come gateway di pagamento richiede anche la conformità alle seguenti regole aziendali stabilite da Apple:
Store Kit Framework offre la potenza e le funzionalità che utilizzerai per sviluppare gli acquisti in-app. Sebbene il framework stesso non autorizzi effettivamente i pagamenti dell'utente, esso funge da ponte tra la tua applicazione e Apple, permettendoti di inviare e ricevere facilmente messaggi dall'App Store di iTunes.
Dai un'occhiata alla seguente illustrazione di Apple Inc. per comprendere meglio questo concetto:
Apri Xcode e crea un nuovo progetto iPhone, selezionando "Visualizza applicazione basata" come tipo di applicazione predefinito. Assegna un nome all'applicazione "InAppDemo" o inserisci un titolo più creativo di tua scelta.
Fare clic con il tasto destro sulla cartella "Frameworks" nel pannello Groups & Files e selezionare Aggiungi -> Framework esistenti. Trova StoreKit.framework e fai clic su "Aggiungi".
Per utilizzare il framework nel nostro progetto, sarà necessario aggiungerlo alla classe del controller di visualizzazione del nostro progetto. Espandi la cartella "Classi" e fai clic su InAppDemoViewController.h.
Appena sotto il comando "import UIKit", aggiungi questa riga:
#importare
La tua applicazione dovrebbe ora essere in grado di sfruttare le funzionalità di Store Kit Framework.
Ogni prodotto o servizio virtuale che desideri vendere in-app deve essere registrato con Apple e assegnato un identificatore di prodotto univoco. Sorprendentemente, questi identificatori sono generati in iTunesConnect, non nel Portale del programma per gli sviluppatori.
Per le nuove applicazioni, questo presenta il classico problema "pollo o uova". Per creare il tuo progetto di acquisto in-app, devi generare identificatori di prodotto, ma poiché gli identificatori di prodotto possono essere creati solo tramite iTunesConnect, la tua domanda deve essere già stata inviata per la pubblicazione.
La soluzione a questo dilemma è di passare attraverso il processo di presentazione della domanda per la revisione da parte di Apple, ma seleziona la casella di controllo "carica l'applicazione in un secondo momento" quando ti trovi nella scheda "Carica". Questo posizionerà la tua applicazione nello stato "In attesa del caricamento", che è ciò che desideri per evitare una revisione formale della tua applicazione mentre stai ancora integrando e configurando i tuoi acquisti in-app.
Accedere all'account sviluppatore iPhone e accedere al portale di provisioning dell'iPhone per iniziare il processo di invio di un'applicazione di test. Se non sei già un membro del Programma per gli sviluppatori di iPhone, dovrai registrarti qui.
Dopo aver effettuato l'accesso al portale di provisioning, selezionare la scheda "ID app". Fai clic su "Nuovo ID app".
Dovrai inserire un nome comune e un identificatore di bundle univoco. Il nome comune verrà utilizzato per identificare questo ID app all'interno del portale di provisioning e l'identificativo del pacchetto è un identificatore univoco per il binario dell'applicazione corrente. Durante lo sviluppo di un'applicazione che utilizzerà gli acquisti in-app, è necessario utilizzare un identificatore di pacchetto completo. Non sono ammessi ID "jolly".
Clicca Invia. Verrai reindirizzato alla pagina principale degli ID app.
Trova l'ID app appena creato nell'elenco, quindi fai clic sul link "Configura" a destra di esso.
Nella schermata "Configure App ID", seleziona la casella di controllo accanto a "Enable In App Purchase" e fai clic sul pulsante "Fine":
Ora dovresti avere un ID app univoco che puoi utilizzare per iniziare a sviluppare la funzione di acquisto in-app con.
Ora creerai una richiesta per l'applicazione di test, quindi lascia il portale del programma e accedi al tuo account iTunesConnect all'indirizzo itunesconnect.apple.com.
Una volta nel tuo account, seleziona l'opzione "Gestisci applicazioni", quindi seleziona "Aggiungi nuova applicazione" nella parte in alto a sinistra del pannello.
Passa attraverso le schermate presentate per aggiungere una nuova applicazione e assicurati di selezionare l'opzione "aggiungi l'applicazione in un secondo momento" nella scheda "Carica". Durante il processo, dovrai probabilmente caricare un'immagine di prova casuale per il logo 512x512 e lo screenshot principale.
Dopo aver completato l'invio fittizio, verrai reindirizzato alla pagina di destinazione della gestione dell'applicazione iTunesConnect. Seleziona l'invio dell'applicazione che hai appena creato, quindi seleziona "Gestisci acquisti in app".
Per aggiungere il tuo primo oggetto, seleziona "CREA NUOVO" dal pulsante in alto a sinistra.
A questo punto ti verrà chiesto di selezionare l'identificatore del gruppo a cui verranno associati gli acquisti in-app. Seleziona l'identificatore di bundle univoco creato in precedenza in questo tutorial e fai clic su "Continua". Se stai seguendo rigorosamente il tutorial, l'identificatore del pacchetto da selezionare è "com.mobiletuts.inapppurchasedemo".
Verrà ora presentato un insieme di opzioni per i prezzi nella schermata "Crea nuovo acquisto di app". Come indicato nei suggerimenti dello strumento di aiuto, "Nome di riferimento" serve per identificare la tua offerta di acquisto nei risultati di ricerca di iTunesConnect e "ID prodotto" verrà utilizzato per identificare la tua applicazione nei rapporti di iTunesConnect.
Apple ti incoraggia a scegliere tra "Contenuto", "Funzionalità", "Servizi" e "Abbonamenti" quando consideri le possibili categorie per le tue offerte in-app, ma, quando si tratta di inviarle realmente al negozio, sei costretto per identificare la tua app con uno dei tre tipi completamente nuovi.
Come descritto da Apple Inc., questi tipi sono:
Seleziona quello applicabile al tipo di offerta o "Consumabile" se segui rigorosamente questo tutorial. Nota che una volta impostato questo tipo, non può essere modificato in un secondo momento, quindi scegli saggiamente.
Successivamente, impostiamo il prezzo dell'offerta, che viene effettuato selezionando un livello di prezzo anziché inserire direttamente un valore. Il sistema del livello di prezzo In App Purchase è lo stesso del sistema del livello di acquisto diretto presentato al momento del caricamento iniziale dell'applicazione, ma se vuoi rivedere le opzioni di nuovo, fai clic sul testo "Vedi tabella prezzi" a destra del menu a discesa.
Vai avanti e seleziona "Livello 1" per il prezzo o il livello corrispondente alla tua offerta. Assicurati di selezionare la casella "Cleared for Sale", anche se non sei ancora pronto per avviare la tua applicazione. Questa casella deve essere selezionata per eseguire il debug e testare il tuo codice.
Il campo "Visualizza dettagli" ti consente di controllare facilmente la localizzazione dell'offerta. Seleziona la lingua o le lingue in cui desideri elencare la tua offerta e aggiungi il tuo nome e descrizione personalizzati. Una descrizione significativa e specifica è richiesta da Apple per l'approvazione della revisione.
Per ora, puoi saltare il campo Schermata impostato poiché è puramente una guida per la revisione del prodotto da parte del dipendente Apple. Fai clic su "Salva modifiche" per registrare questa offerta con Apple. Ripeti questa procedura per aggiungere altri oggetti in vendita "in app".
Questo tutorial utilizzerà i seguenti dati generici per le nostre offerte, ma sentiti libero di essere creativo come desideri inserendo il tuo:
Prodotto 1 | Consumabile | com.mobiletuts.inappdemo.1 | Livello 1
Prodotto 2 | Consumabile | com.mobiletuts.inappdemo.2 | Livello 2
Prodotto 3 | Consumabile | com.mobiletuts.inappdemo.3 | Livello 3
Dopo aver registrato gli elementi premium con iTunesConnect, sei pronto per iniziare a integrare queste offerte nella tua app. Ai fini di questo tutorial, useremo un semplice UITableView per visualizzare la nostra lista di prodotti.
Vai al file di intestazione del controller di visualizzazione dell'applicazione principale, in questo caso InAppDemoViewController.h, e modifica il codice in modo che assomigli a questo:
#importare#importare @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; @fine
L'array productIdentifierList memorizzerà gli identificatori di prodotto creati nel passaggio 3 come stringhe, mentre productDetailsList memorizzerà le informazioni sul prodotto localizzate fornite dall'App Store e effettivamente visualizzate all'utente.
Ora vai al file di implementazione della classe, InAppDemoViewController.m, e sintetizza le variabili che hai appena dichiarato nel file di intestazione:
@implementation InAppDemoViewController @synthesize productIdentifierList, productDetailsList, productDisplayTableView;
Decommentare la funzione viewDidLoad e inizializzare l'origine dati:
- (void) viewDidLoad productDetailsList = [[NSMutableArray alloc] init]; productIdentifierList = [[NSMutableArray alloc] init]; for (short 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 un'applicazione reale, non vorremmo mai inserire questo codice di caricamento dell'acquisto nel metodo viewDidLoad perché verrà eseguito nel thread principale e bloccherà brevemente l'interfaccia dell'applicazione durante il recupero dei dati. Utilizziamo viewDidLoad qui solo a scopo dimostrativo.
A partire dalla linea 6, creiamo un ciclo for per iterare sul numero di elementi che vogliamo mostrare. Poiché utilizziamo uno schema di denominazione comune per i nostri identificatori di prodotto, possiamo creare più articoli al volo senza dover digitare a mano ciascun identificatore. Si noti che questo modello può essere ulteriormente migliorato con alcune programmazioni su Internet: l'elenco identificativo del prodotto sarebbe idealmente caricato da un server esterno per consentire di aggiungere o rimuovere in modo dinamico i prodotti senza spingere un nuovo binario attraverso l'App Store ogni volta.
A partire dalla linea 10, siamo introdotti al nostro primo oggetto Store Kit Framework, SKProductsRequest. Questo oggetto viene utilizzato per inviare un elenco di identificatori di prodotto all'App Store al fine di ricevere un elenco di informazioni sui prodotti localizzate e informazioni accurate sui prezzi dei prodotti. Questa tecnica di localizzazione dinamica e raccolta dei prodotti consente una flessibilità molto maggiore rispetto alla codifica manuale di questi attributi.
Alla riga 12 impostiamo la richiesta delegata che Store Kit Framework chiamerà dopo aver ricevuto un risultato. Copia e incolla il seguente codice per conformarsi a questo protocollo delegato:
-(void) productsRequest: (SKProductsRequest *) request didReceiveResponse: (risposta SKProductsResponse *) [productDetailsList addObjectsFromArray: response.products]; [productDisplayTableView reloadData]; - (void) requestDidFinish: (SKRequest *) request [request release]; - (void) request: (SKRequest *) request didFailWithError: (NSError *) error NSLog (@ "Impossibile connettersi con error:% @", [error localizedDescription]);
Il metodo productsRequest viene chiamato dopo che l'elenco di prodotti è stato recuperato dall'App Store e assegniamo tale elenco di oggetti di prodotto dall'App Store al nostro array ProductDetailsList per un uso futuro. Gli altri due metodi di protocollo funzionano come previsto.
Passiamo ora alla configurazione di UITableView che verrà utilizzata per visualizzare le informazioni sui nostri prodotti. Inizia impostando il file del pennino in Interface Builder. Espandi la cartella "Risorse" nel pannello Gruppi e File e fai doppio clic sul file InAppViewController.xib per aprire Interface Builder.
Dal pannello Libreria, trascinare un oggetto UITableView nella finestra InD Demo View Controller. Fare clic con il tasto destro del mouse su UITableView nella finestra e connettere DataSource e delegare al proprietario del file. Quindi fare clic con il pulsante destro del mouse sul Proprietario del file e connettere productDisplayTableView con l'oggetto UITableView. Salva e chiudi il pennino.
Torna al file di implementazione del controller di visualizzazione, InAppDemoViewController.m.
Incolla nelle seguenti righe per soddisfare i requisiti del protocollo UITableViewDelegate e UITableViewDataSource:
- (NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection: (NSInteger) section 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]; Riga NSUInteger = [riga IndexPath]; SKProduct * thisProduct = [productDetailsList objectAtIndex: row]; [cell.textLabel setText: [NSString stringWithFormat: @ "% @ -% @", thisProduct.localizedTitle, thisProduct.price]]; cella di ritorno;
La maggior parte di questo è un codice standard per la visualizzazione del testo nelle celle UITableView. Si noti, tuttavia, che creiamo un'istanza di SKProduct, thisProduct, per recuperare i dati del prodotto per la riga corrente e che siamo in grado di recuperare facilmente informazioni sui prodotti localizzate dai membri dei dati dell'oggetto. Per ulteriori informazioni su tutti i membri dei dati disponibili, consultare la referenza ufficiale SKProdotto Apple.
Ora dovresti essere in grado di compilare ed eseguire la tua applicazione, ma c'è un problema: in App Store gli acquisti possono essere testati solo su un dispositivo reale, quindi dovrai creare e installare un profilo di provisioning per questa applicazione per testare il codice.
Dopo aver installato il profilo di provisioning e configurato Xcode, creare ed eseguire l'applicazione sul dispositivo. Una visualizzazione di base della tabella con i titoli dei prodotti è troppo semplicistica per l'app del mondo reale, ma la bellezza del sistema In App Purchase è che la skin del punto vendita è completamente a te. Nelle future esercitazioni di questa serie, verrà creata un'interfaccia più avanzata. Nel frattempo, allunga la tua creatività e utilizza qualsiasi disegno desideri mostrare i tuoi prodotti!
Prima di iniziare ad autorizzare transazioni e vendere nuovi contenuti ai tuoi utenti, dedica un momento a pensare a come verranno consegnati i nuovi contenuti. Il framework Store Kit ti consentirà di autorizzare facilmente un acquisto, ma tu sei da solo quando si tratta di evasione degli ordini. Il modello di prodotto incorporato e il modello di prodotto server sono i due principali modelli di progettazione tra cui scegliere per garantire agli utenti quello che pagano.
Con il modello di prodotto integrato, tutto ciò che un utente può acquistare è già incluso nell'applicazione quando viene scaricato per la prima volta. Questo contenuto è bloccato o nascosto dall'utilizzo fino a quando viene effettuato un acquisto in-app, a quel punto l'offerta diventa utilizzabile.
Lo schema seguente di Apple Inc. illustra il modello di prodotto incorporato:
Nel modello di prodotto server, il contenuto viene trasferito dinamicamente al dispositivo dell'utente al momento dell'acquisto da un server sotto il tuo controllo. Nel modello di prodotto server, è necessario aggiungere il passaggio aggiuntivo per verificare che la ricevuta della transazione ricevuta dal dispositivo client sia valida e potrebbe essere inoltre necessario impostare un meccanismo per identificare gli utenti per garantire che le sottoscrizioni e altri prodotti non consumabili possano essere è comunque possibile accedere da qualsiasi dispositivo iPhone OS posseduto dall'utente acquirente, e non solo dal dispositivo su cui inizialmente ha acquistato l'oggetto (questo è un requisito aziendale di Apple). Inoltre, sei responsabile della negoziazione della connessione di rete per trasferire una quantità considerevole di testo o dati multimediali.
Uno dei principali vantaggi del modello di prodotto server è che consente di vendere una grande quantità di contenuti su richiesta mantenendo al contempo le dimensioni di download iniziali della propria applicazione. È anche molto più veloce creare e distribuire nuovi contenuti premium alla tua app perché non dovresti aver bisogno di inviare un nuovo binario dell'applicazione attraverso iTunes Store per offrire nuovi oggetti in vendita.
Il seguente diagramma di Apple Inc. illustra il modello di prodotto server:
Come puoi vedere, il modello di prodotto incorporato è il più semplice dei due modelli di design. È più semplice da implementare e gestire, ma manca della potenza della consegna su richiesta. Il modello di prodotto server è molto più complesso, ma consente di creare nuovi contenuti con maggiore flessibilità e velocità e di mantenere le dimensioni della propria applicazione snelle, fornendo download di grandi dimensioni solo quando necessario.
Sia il modello del prodotto incorporato che il modello del prodotto server saranno trattati in dettaglio nelle parti future di questa serie.
Ora è un buon momento per considerare entrambi questi modelli di distribuzione e determinare quale sia la soluzione migliore per la tua applicazione.