Acest tutorial pentru iPhone SDK este primul dintr-o serie multipartită de vânzare a produselor și serviciilor "in-app" cu cadrul Store Kit. Așteptați să aflați avantajele și limitările utilizării funcției In App Purchase, pașii necesari pentru înregistrarea conținutului plătit "în aplicație" cu Apple Inc., cum se configurează un front simplu al magazinului și diferența dintre modelul de produs încorporat și Modelul de produs server pentru distribuirea conținutului și realizarea comenzilor.
Una dintre cele mai puternice caracteristici lansate împreună cu iPhone SDK 3 este capacitatea de a procesa achizițiile "în aplicație". Deoarece App Store se ocupă de autorizarea și procesarea plăților în numele dvs., această caracteristică face ca vânzarea bunurilor sau serviciilor virtuale să fie mult mai ușoară, deoarece dezvoltatorii se pot concentra asupra creării și vânzării de conținut excelent în loc de sarcini tradiționale de comerț electronic, cum ar fi criptarea și stocarea numerelor cărților de credit sau procesarea loturilor de cărți de credit. Utilizarea funcției de achiziție în aplicație va eficientiza procesul de efectuare a plăților pentru utilizatori, deoarece aceștia trebuie doar să introducă numele de utilizator Apple și parola pentru a autoriza tranzacția cu ajutorul contului lor iTunes.
Desigur, aceste beneficii vin cu un preț: Apple va păstra 30% din vânzare, așa cum se întâmplă în cazul tuturor achizițiilor directe din App Store. Alegerea de a utiliza App Store ca gateway de plată va necesita, de asemenea, să respectați următoarele reguli de afaceri stabilite de Apple:
Store Kit Framework oferă puterea și funcționalitatea pe care o veți utiliza pentru a vă dezvolta achizițiile în aplicații. Deși cadrul propriu-zis nu autorizează plățile utilizatorului, acesta acționează ca o punte între aplicația dvs. și Apple, permițându-vă să trimiteți și să primiți cu ușurință mesaje de la iTunes App Store.
Uitați-vă la următoarea ilustrație de la Apple Inc. pentru a înțelege mai bine acest concept:
Deschideți Xcode și creați un nou proiect iPhone, selectând "Application Based View" ca tip de aplicație implicit. Denumiți aplicația "InAppDemo" sau inserați un titlu mai creativ pe care îl alegeți.
Faceți clic dreapta pe dosarul "Cadre" din panoul Grupuri și fișiere și selectați Adăugați -> Cadre existente. Găsiți StoreKit.framework și faceți clic pe "Adăugați".
Pentru a folosi cadrul în proiectul nostru, va trebui să îl adăugăm la clasa de vizualizare a proiectului nostru. Extindeți dosarul "Clase" și faceți clic pe InAppDemoViewController.h.
Chiar sub comanda "import UIKit", adăugați această linie:
#import
Aplicația dvs. ar trebui să poată beneficia acum de funcționalitatea Store Kit Framework.
Fiecare produs sau serviciu virtual pe care doriți să-l vindeți în aplicație trebuie să fie înregistrat la Apple și i se atribuie un identificator unic de produs. Surprinzător, acești identificatori sunt generați în iTunesConnect, nu în Portalul de programe pentru dezvoltatori.
Pentru aplicații noi, aceasta prezintă problema clasică "pui sau ouă". Pentru a vă construi proiectul de achiziție în aplicație, trebuie să generați identificatori de produse, dar deoarece identificatorii de produse pot fi creați numai prin iTunesConnect, aplicația dvs. trebuie să fi fost deja trimisă spre publicare.
Soluția la această dilemă este să parcurgi procesul de trimitere a cererii dvs. de revizuire de către Apple, dar bifați caseta de selectare "încărcați aplicația binar mai târziu" atunci când accesați fila "Încărcare". Aceasta va plasa aplicația în starea "În așteptare pentru încărcare", ceea ce este ceea ce doriți pentru a evita o examinare formală a aplicației dvs. în timp ce integrați și configurați în continuare achizițiile în aplicație.
Conectați-vă la contul dvs. de dezvoltator iPhone și navigați la iPhone Provisioning Portal pentru a începe procesul de trimitere a unei aplicații de testare. Dacă nu sunteți deja membru al programului iPhone Developer, va trebui să vă înscrieți aici.
După ce vă conectați la portalul Provisioning, selectați fila "App IDs". Dați clic pe "ID-ul aplicației nou".
Va trebui să introduceți un nume comun și un identificator unic de pachete. Numele comun va fi folosit pentru a identifica acest ID de aplicație în cadrul portalului Provisioning și identificatorul pachetului este un identificator unic pentru aplicația dvs. binară reală. Atunci când dezvoltați o aplicație care va utiliza achizițiile în aplicație, trebuie să utilizați un identificator de Bundle complet. Nu sunt permise ID-urile "wild card".
Faceți clic pe Trimiteți. Veți fi returnați la pagina principală a ID-urilor de aplicație.
Găsiți ID-ul de aplicație nou creat în listă, apoi faceți clic pe linkul "Configurare" din partea dreaptă a acestuia.
În ecranul "Configurați ID-ul aplicației", bifați caseta de selectare de lângă "Activați achiziția aplicației" și faceți clic pe butonul "Efectuat":
Ar trebui să aveți acum un ID de aplicație unic pe care îl puteți utiliza pentru a începe să dezvoltați funcția de achiziție în aplicație.
Acum veți crea o trimitere a unei aplicații de testare, lăsați astfel portalul programului și conectați-vă la contul dvs. iTunesConnect la adresa itunesconnect.apple.com.
Odată ce ați introdus contul, selectați opțiunea "Gestionați aplicațiile", apoi selectați "Adăugați o aplicație nouă" în partea din stânga sus a panoului.
Navigați prin ecranele prezentate pentru adăugarea unei noi aplicații și asigurați-vă că ați selectat opțiunea "adăugați aplicația binară ulterioară" din fila "Încărcare". În acest proces, va trebui probabil să încărcați o imagine aleatorie de testare pentru sigla 512x512 și ecranul primar.
După ce ați finalizat depunerea falsă, veți fi returnați la pagina de destinație pentru administrarea aplicațiilor iTunesConnect. Selectați aplicația pe care tocmai ați creat-o și apoi selectați "Gestionați achizițiile aplicației".
Pentru a adăuga primul element, selectați "CREATE NEW" din butonul din stânga sus.
Acum vi se va solicita să selectați identificatorul pachetului pe care vor fi asociate achizițiile dvs. în aplicație. Selectați identificatorul unic de bundle pe care l-ați creat mai devreme în acest tutorial și dați clic pe "Continuați". Dacă urmăriți strict tutorialul, identificatorul pachetului pentru a selecta este "com.mobiletuts.inapppurchasedemo".
Veți fi prezentat acum un set de opțiuni pentru prețuri pe ecranul "Creați o nouă achiziție în aplicație". După cum se menționează în sfaturile instrumentului de ajutor, "Nume de referință" este pentru identificarea ofertei dvs. de achiziție în cadrul rezultatelor căutării iTunesConnect, iar "ID-ul produsului" va fi folosit pentru a identifica aplicația în rapoartele iTunesConnect.
Apple vă încurajează să alegeți între "Conținut", "Funcționalitate", "Servicii" și "Abonamente" atunci când luați în considerare categoriile posibile pentru ofertele dvs. în aplicație, dar când este vorba de a le trimite în magazin, sunteți forțați pentru a identifica aplicația dvs. cu unul dintre cele trei tipuri complet noi.
După cum este descris de Apple Inc., aceste tipuri sunt:
Selectați tipul care se aplică tipului dvs. de ofertă sau "Consumabile" dacă urmați cu strictețe acest tutorial. Rețineți că, odată ce acest tip este setat, nu poate fi modificat ulterior, deci alegeți cu înțelepciune.
Apoi, setăm prețul de ofertă, care se face prin selectarea unui nivel de preț, mai degrabă decât prin introducerea directă a unei valori. Sistemul de prețuri pentru achiziții în aplicații este același cu sistemul de achiziții directe, prezentat la încărcarea inițială a aplicației dvs., dar dacă doriți să revedeți din nou opțiunile, faceți clic pe textul "Vedeți prețul matricei" în partea dreaptă a meniurilor.
Mergeți mai departe și selectați "Nivelul 1" pentru preț sau orice nivel care corespunde ofertei dvs. Asigurați-vă că ați bifat caseta "Cleared for Sale", chiar dacă nu sunteți pregătit încă să lansați aplicația. Această casetă trebuie verificată pentru a depana și testa codul.
Setul de câmp "Display Detail" vă permite să controlați cu ușurință localizarea ofertei. Selectați limba (limbile) în care doriți să listați oferta dvs. și adăugați numele și descrierea personalizată afișate. O descriere semnificativă și specifică este cerută de Apple pentru aprobarea recenziei.
Deocamdată, puteți sări peste câmpul Imagine, deoarece este pur și simplu un ghid pentru revizuirea de către angajatul Apple a produsului dvs. Faceți clic pe "Salvați modificările" pentru a înregistra această ofertă împreună cu Apple. Repetați acest proces pentru a adăuga elemente suplimentare de vânzare "în aplicație".
Acest tutorial va folosi următoarele date generice pentru ofertele noastre, dar nu ezitați să fiti la fel de creativi pe cât doriți la introducerea propriului dvs.:
Produsul 1 | Consumabile com.mobiletuts.inappdemo.1 | Nivelul 1
Produsul 2 | Consumabile com.mobiletuts.inappdemo.2 | Nivelul 2
Produsul 3 | Consumabile com.mobiletuts.inappdemo.3 | Nivelul 3
După ce v-ați înregistrat articolele premium cu iTunesConnect, sunteți gata să începeți să integrați aceste oferte în aplicația dvs. În scopul acestui tutorial, vom folosi un simplu UITableView pentru a afișa lista noastră de produse.
Mergeți la fișierul antet pentru controlerul principal de vizualizare a aplicațiilor, în acest caz InAppDemoViewController.h și modificați codul astfel încât să arate astfel:
#import#import @interface InAppDemoViewController: UIViewController NSMutableArray * productIdentifierList; NSMutableArray * productDetailsList; IBOutlet UITableView * productDisplayTableView; @property (nonatomic, reține) NSMutableArray * productIdentifierList; @property (nonatomic, reține) NSMutableArray * productDetailsList; @property (nonatomic, reține) UITableView * productDisplayTableView; @Sfârșit
Matricea productIdentifierList va stoca identificatorii de produs pe care i-am creat în Pasul 3 ca siruri de caractere, în timp ce productDetailsList va stoca informațiile despre produse localizate furnizate de App Store și afișate efectiv utilizatorului.
Acum, mergeți la fișierul de implementare a clasei, InAppDemoViewController.m, și sintetizați variabilele pe care tocmai le-ați declarat în fișierul cu antet:
@implementation InAppDemoViewController @synthesize productIdentifierList, productDetailsList, productDisplayTableView;
Dezactivați funcția viewDidLoad și inițializați sursa de date:
- (void) viewDidLoad productDetailsList = [[NSMutableArray aloca] init]; productIdentifierList = [[NSMutableArray alocare] init]; pentru (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];
Într-o aplicație în lumea reală, nu am vrea niciodată să punem acest cod de încărcare a achiziției în metoda viewDidLoad deoarece se va executa în firul principal și va bloca interfața aplicației pe scurt în timpul preluării datelor. Noi folosim ViewDidLoad aici doar pentru scopuri demonstrative.
Începând cu linia 6, creăm o buclă pentru a repeta numărul de elemente pe care dorim să le afișăm. Deoarece folosim o schemă de denumire comună pentru identificatorii produselor noastre, putem crea mai multe elemente în zbor, fără a fi nevoie să introduceți fiecare identificator manual. Rețineți că acest model poate fi îmbunătățit și mai mult cu o anumită programare pe Internet: lista dvs. de identificare a produsului ar fi în mod ideal încărcată de pe un server extern pentru a vă permite să adăugați sau să eliminați dinamic produse fără a împinge un nou binar prin App Store de fiecare dată.
Începând cu linia 10, ne-am prezentat primul nostru obiect Store Kit Framework, SKProductsRequest. Acest obiect este utilizat pentru a trimite o listă de identificatori de produse la App Store pentru a primi înapoi o listă a informațiilor despre produse localizate și informații corecte despre prețurile produselor. Această tehnică de localizare dinamică și tehnică de colectare a produselor vă oferă o flexibilitate mult mai mare decât codarea manuală a acestor atribute.
Pe linia 12 am setat delegația de solicitare pe care Store Kit Framework o va apela după primirea unui rezultat. Copiați și inserați următorul cod pentru a se conforma acestui protocol delegat:
-(void) productsRequest: (SKProductsRequest *) cerere didReceiveResponse: (SKProductsResponse *) răspuns [productDetailsList addObjectsFromArray: response.products]; [productDisplayTableView reloadData]; - (void) requestDidFinish: (SKRequest *) cererea [request release]; - (void) cerere: (SKRequest *) cerere didFailWithError: (NSError *) eroare NSLog (@ "Eroare la conectare cu eroare:% @", [error localizedDescription]);
Metoda productsRequest se numește după ce lista de produse a fost preluată de la App Store și le atribuim acelei liste de obiecte de produs din App Store în matricea noastră de produseDetailsList pentru utilizare ulterioară. Celelalte două metode de protocol funcționează conform așteptărilor.
Acum mergem la configurarea UITableView care va fi utilizată pentru a afișa informațiile despre produs. Începeți prin configurarea fișierului dvs. de nib în Interface Builder. Extindeți folderul "Resurse" din panoul Grupuri și fișiere și faceți dublu clic pe fișierul InAppViewController.xib pentru a deschide Interface Builder.
Din panoul Bibliotecă, trageți un obiect UITableView în fereastra de vizualizare a aplicației de vizualizare a aplicațiilor din aplicație. Faceți clic dreapta pe UITableView din fereastră și conectați sursa de date și delegați la Proprietarul fișierului. Apoi dați clic dreapta pe Proprietarul fișierului și conectați produsulDisplayTableView cu obiectul UITableView. Salvați și închideți vârful.
Reveniți la fișierul de implementare al controlerului vizual, InAppDemoViewController.m.
Lipiți următoarele linii pentru a satisface cerințele protocolului UITableViewDelegate și UITableViewDataSource:
- (NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection: (NSInteger) sectiunea return [auto.productDetailsList count]; - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath static NSString * GenericTableIdentifier = @ "GenericTableIdentifier"; UITableViewCell * celula = [tableView dequeueReusableCellWithIdentifier: GenericTableIdentifier]; dacă (celula == zero) cell = [[[UITableViewCell alin] initWithFrame: CGRectZero reuseIdentifier: GenericTableIdentifier] autorelease]; Rândul NSUInteger = [indexPath row]; SKProduct * thisProduct = [productDetailsList objectAtIndex: rând]; [cell.textLabel setText: [NSString șirWithFormat: @ "% @ -% @", thisProduct.localizedTitle, thisProduct.price]]; celule retur;
Cele mai multe dintre acestea sunt codul standard pentru afișarea textului în celulele UITableView. Rețineți, totuși, că vom crea o instanță a produsului SKProduct, thisProduct, pentru a prelua datele despre produs pentru rândul curent și că vom putea recupera cu ușurință informații despre produse localizate de la membrii de date ai obiectului. Consultați referința oficială Apple SKProduct pentru mai multe informații despre toți membrii de date disponibili.
Acum ar trebui să puteți să vă compilați și să executați aplicația dvs., dar există o captură: în App Store achizițiile pot fi testate numai pe un dispozitiv real, deci va trebui să creați și să instalați un profil de provizionare pentru această aplicație pentru a testa cod.
După ce ați instalat profilul de configurare și ați configurat codul Xcode, construiți și executați aplicația de pe dispozitiv. O vizualizare de tabelă de bază cu titluri de produse este prea simplistă pentru aplicația dvs. din lumea reală, dar frumusețea sistemului de achiziții în aplicații este că pielea de la magazin este complet la dvs. În tutorialele viitoare din această serie, va fi creată o interfață mai avansată. În același timp, întindeți-vă creativitatea și folosiți design-ul pe care doriți să-l prezentați produsele dvs.!
Înainte de a începe autorizarea tranzacțiilor și de a vinde conținut nou pentru utilizatorii dvs., faceți un moment să vă gândiți la modul în care va fi livrat noul conținut. Cadrul Kit Store vă va permite să autorizați cu ușurință o achiziție, dar sunteți pe cont propriu atunci când vine vorba de împlinirea comenzilor. Modelul de produs încorporat și modelul de produs server sunt cele două modele de design primare de care puteți alege pentru a vă asigura că utilizatorii dvs. obțin ceea ce plătesc.
Cu modelul de produs încorporat, tot ceea ce poate cumpăra un utilizator este deja inclus în aplicație când este descărcat pentru prima oară. Acest conținut este blocat sau ascuns de utilizare până când se face o achiziție în aplicație, moment în care oferta devine utilizabilă.
Următoarea diagramă de la Apple Inc. ilustrează modelul de produs încorporat:
În modelul de produs server, conținutul este împins în mod dinamic pe dispozitivul utilizatorului în momentul cumpărării de la un server aflat sub controlul dvs. În Modelul de produs server, trebuie să adăugați pasul suplimentar de verificare a faptului că chitanța de tranzacție primită de la dispozitivul client este validă și poate fi necesar să configurați un mecanism pentru identificarea utilizatorilor pentru a vă asigura că abonamentele și alte produse care nu sunt consumabile pot să fie încă accesat de pe orice dispozitiv iPhone OS pe care îl deține utilizatorul de cumpărare, și nu doar de pe dispozitivul pe care l-au cumpărat inițial (acest lucru este o cerință de afaceri de la Apple). De asemenea, sunteți responsabil pentru negocierea conexiunii la rețea pentru a transfera ceea ce poate reprezenta o cantitate considerabilă de date text sau multimedia.
Unul dintre avantajele primare ale modelului de produs server este că vă permite să vindeți o cantitate foarte mare de conținut la cerere, păstrând în același timp dimensiunea inițială a aplicației dvs. de descărcare mică. De asemenea, este mult mai rapid să creați și să furnizați conținut premium nou pentru aplicația dvs., deoarece nu este necesar să împingeți o nouă aplicație binară prin magazinul iTunes pentru a oferi articole noi de vânzare.
Următoarea diagramă de la Apple Inc. ilustrează Modelul de produs server:
După cum puteți vedea, modelul de produs încorporat este cel mai simplu dintre cele două modele de design. Este mai ușor de implementat și menținut, dar nu are puterea de livrare la cerere. Modelul de produs al serverului este mult mai complex, dar vă permite să creați conținut nou cu o mai mare flexibilitate și viteză și să mențineți dimensiunea aplicației mai slabă prin furnizarea de descărcări mari doar după cum este necesar.
Atât modelul de produs încorporat, cât și modelul de produs al serverului vor fi acoperite în detaliu în părțile viitoare ale acestei serii.
Acum este un moment potrivit să luați în considerare ambele modele de distribuție și să determinați care este cea mai potrivită pentru aplicația dvs..