Dieses iPhone SDK-Tutorial ist das erste einer mehrteiligen Serie zum Verkauf von Produkten und Dienstleistungen "In-App" mit dem Store Kit-Framework. Erwarten Sie die Vorteile und Einschränkungen der In-App-Purchase-Funktion, die Schritte, die erforderlich sind, um kostenpflichtige In-App-Inhalte bei Apple Inc. zu registrieren, wie Sie eine einfache Geschäftsfront einrichten, und den Unterschied zwischen dem integrierten Produktmodell und das Server-Produktmodell für die Verteilung und Auftragsabwicklung von Inhalten.
Eine der leistungsstärksten Funktionen des iPhone SDK 3 ist die Möglichkeit, Einkäufe in Apps zu tätigen. Da der App Store die Zahlungsautorisierung und -verarbeitung für Sie übernimmt, vereinfacht diese Funktion den Verkauf von virtuellen Gütern oder Dienstleistungen erheblich, da Entwickler sich auf die Erstellung und den Verkauf von großartigem Inhalt konzentrieren können, anstatt auf herkömmliche E-Commerce-Aufgaben wie das Verschlüsseln und Speichern von Kreditkartennummern oder Verarbeitung von Kreditkartenstapeln. Durch die In-App-Kauffunktion wird auch der Checkout-Prozess für Benutzer vereinfacht, da lediglich der Apple-Benutzername und das Kennwort eingegeben werden müssen, um die Transaktion mit ihrem iTunes-Konto zu autorisieren.
Diese Vorteile sind natürlich mit einem Preisschild verbunden: Apple behält 30% des Verkaufs, wie bei allen direkten Einkäufen im App Store. Wenn Sie den App Store als Zahlungsgateway verwenden möchten, müssen Sie außerdem die folgenden von Apple festgelegten Geschäftsregeln einhalten:
Das Store Kit Framework bietet die Leistungsfähigkeit und Funktionalität, die Sie zur Entwicklung Ihrer In-App-Käufe verwenden werden. Das Framework selbst autorisiert zwar nicht die Zahlungen Ihres Benutzers, es fungiert jedoch als Brücke zwischen Ihrer Anwendung und Apple und ermöglicht Ihnen das problemlose Senden und Empfangen von Nachrichten aus dem iTunes App Store.
Sehen Sie sich die folgende Abbildung von Apple Inc. an, um dieses Konzept besser zu verstehen:
Öffnen Sie Xcode und erstellen Sie ein neues iPhone-Projekt. Wählen Sie als Standardanwendungstyp "View Based Application" aus. Nennen Sie die Anwendung "InAppDemo" oder fügen Sie einen kreativeren Titel Ihrer Wahl ein.
Klicken Sie im Bereich Gruppen & Dateien mit der rechten Maustaste auf den Ordner "Frameworks" und wählen Sie Hinzufügen -> Vorhandene Frameworks. Suchen Sie nach StoreKit.framework und klicken Sie auf "Hinzufügen".
Um das Framework in unserem Projekt verwenden zu können, müssen wir es der View-Controller-Klasse unseres Projekts hinzufügen. Erweitern Sie den Ordner "Classes" und klicken Sie auf InAppDemoViewController.h.
Fügen Sie unterhalb des Befehls "import UIKit" die folgende Zeile ein:
#einführen
Ihre Anwendung sollte nun in der Lage sein, die Store Kit Framework-Funktionalität zu nutzen.
Jedes virtuelle Produkt oder jede Dienstleistung, die Sie in der App verkaufen möchten, muss bei Apple registriert sein und eine eindeutige Produktkennung erhalten. Überraschenderweise werden diese Bezeichner in iTunesConnect generiert, nicht im Developer Program Portal.
Für neue Anwendungen stellt dies das klassische "Huhn-oder-Ei" -Problem dar. Um ein In-App-Kaufprojekt zu erstellen, müssen Sie Produkt-IDs generieren. Da Produkt-IDs jedoch nur über iTunesConnect erstellt werden können, muss Ihre Anwendung bereits zur Veröffentlichung eingereicht worden sein.
Die Lösung für dieses Dilemma besteht darin, den Prozess der Einreichung Ihrer Bewerbung zur Überprüfung durch Apple durchzugehen. Aktivieren Sie jedoch das Kontrollkästchen "Bewerbungsbinärdatei später hochladen", wenn Sie zur Registerkarte "Hochladen" gelangen. Dadurch wird Ihre Anwendung in den Status "Warten auf Upload" versetzt. Dies ist der gewünschte Status, um eine formale Überprüfung Ihrer Anwendung zu vermeiden, während Sie Ihre In-App-Käufe noch integrieren und konfigurieren.
Melden Sie sich bei Ihrem iPhone-Entwicklerkonto an und navigieren Sie zum iPhone Provisioning Portal, um mit dem Senden einer Testanwendung zu beginnen. Wenn Sie noch kein Mitglied des iPhone Developer Program sind, müssen Sie sich hier anmelden.
Wählen Sie nach der Anmeldung beim Bereitstellungsportal die Registerkarte "App-IDs" aus. Klicken Sie auf "Neue App-ID".
Sie müssen einen allgemeinen Namen und eine eindeutige Bündel-ID eingeben. Der gebräuchliche Name wird verwendet, um diese App-ID im Bereitstellungsportal zu identifizieren, und der Bundle-Bezeichner ist ein eindeutiger Bezeichner für Ihre eigentliche Anwendungsbinärdatei. Wenn Sie eine Anwendung entwickeln, die In-App-Käufe verwendet, müssen Sie eine vollständige Bundle-ID verwenden. Es sind keine "Wildcard" -IDs erlaubt.
Klicken Sie auf "Senden". Sie gelangen zurück zur Hauptseite der App-IDs.
Suchen Sie Ihre neu erstellte App-ID in der Liste und klicken Sie rechts daneben auf den Link "Konfigurieren".
Aktivieren Sie im Bildschirm "App-ID konfigurieren" das Kontrollkästchen neben "In App-Kauf aktivieren" und klicken Sie auf die Schaltfläche "Fertig":
Sie sollten jetzt über eine eindeutige App-ID verfügen, mit der Sie die In-App-Kauffunktion mit entwickeln können.
Sie erstellen jetzt eine Testanwendung, verlassen Sie das Programmportal und melden Sie sich unter itunesconnect.apple.com bei Ihrem iTunesConnect-Konto an.
Wenn Sie sich in Ihrem Konto befinden, wählen Sie die Option "Anwendungen verwalten" und dann "Neue Anwendung hinzufügen" oben links im Bedienfeld.
Gehen Sie durch die angezeigten Bildschirme, um eine neue Anwendung hinzuzufügen, und aktivieren Sie auf der Registerkarte "Hochladen" die Option "Anwendungsbinär später hinzufügen". In diesem Prozess müssen Sie wahrscheinlich ein zufälliges Testbild für das 512 x 512-Logo und den primären Screenshot hochladen.
Nachdem Sie die Dummy-Übergabe abgeschlossen haben, werden Sie zur Startseite der Anwendungsverwaltung von iTunesConnect zurückgeleitet. Wählen Sie die soeben erstellte Antragseinreichung aus und wählen Sie "In App-Käufen verwalten".
Um Ihren ersten Artikel hinzuzufügen, wählen Sie links oben die Schaltfläche "NEU ERSTELLEN".
Sie werden nun aufgefordert, die Bundle-ID auszuwählen, der Ihre In-App-Käufe zugeordnet werden. Wählen Sie die eindeutige Bundle-ID aus, die Sie zuvor in diesem Lernprogramm erstellt haben, und klicken Sie auf "Weiter". Wenn Sie die Anleitung genau befolgen, ist die zu wählende Bundle-ID "com.mobiletuts.inapppurchasedemo".
Auf dem Bildschirm "In App-Kauf neu erstellen" werden Ihnen nun verschiedene Optionen für die Preisfindung angezeigt. Wie in den Hilfetools angegeben, dient "Referenzname" zur Identifizierung Ihres Kaufangebots in den iTunesConnect-Suchergebnissen, und "Produkt-ID" wird zur Identifizierung Ihrer Anwendung in iTunesConnect-Berichten verwendet.
Apple empfiehlt Ihnen, zwischen "Inhalt", "Funktionalität", "Dienste" und "Abonnements" zu wählen, wenn Sie die möglichen Kategorien für Ihre In-App-Angebote in Betracht ziehen. Wenn Sie sie jedoch tatsächlich in den Store einreichen möchten, müssen Sie dies tun um Ihre App mit einem von drei völlig neuen Typen zu identifizieren.
Wie von Apple Inc. beschrieben, sind diese Typen:
Wählen Sie die für Ihren Angebotstyp zutreffende Option oder "Verbrauchbar" aus, wenn Sie diese Anleitung streng befolgen. Wenn dieser Typ einmal festgelegt ist, kann er zu einem späteren Zeitpunkt nicht mehr geändert werden. Wählen Sie daher die Option.
Als Nächstes legen wir den Angebotspreis fest, der durch Auswahl einer Preisstufe statt durch direkte Eingabe eines Wertes erfolgt. Das Preissystem für In-App-Kaufpreise ist dasselbe wie das System für Direkteinkäufe, das beim ersten Hochladen Ihrer Anwendung angezeigt wurde. Wenn Sie Ihre Optionen jedoch noch einmal überprüfen möchten, klicken Sie auf den Text "Preismatrix anzeigen" rechts neben der Dropdown-Liste.
Wählen Sie "Tier 1" für den Preis oder die Stufe, die Ihrem Angebot entspricht. Aktivieren Sie das Kontrollkästchen "Zum Verkauf freigegeben", auch wenn Sie Ihre Anwendung noch nicht starten können. Dieses Kästchen muss markiert sein, um den Code zu debuggen und zu testen.
Mit dem Feld "Display Detail" können Sie die Angebotslokalisierung einfach steuern. Wählen Sie die Sprache (n) aus, in der Sie Ihr Angebot auflisten möchten, und fügen Sie Ihren benutzerdefinierten Anzeigenamen und Ihre Beschreibung hinzu. Eine aussagekräftige und spezifische Beschreibung wird von Apple zur Genehmigung der Überprüfung benötigt.
Im Moment können Sie das Feld für das Screenshot-Feld überspringen, da es lediglich eine Anleitung für die Überprüfung Ihres Produkts durch einen Apple-Mitarbeiter ist. Klicken Sie auf "Änderungen speichern", um dieses Angebot bei Apple zu registrieren. Wiederholen Sie diesen Vorgang, um weitere Artikel "in App" zum Verkauf hinzuzufügen.
In diesem Lernprogramm werden die folgenden allgemeinen Daten für unsere Angebote verwendet. Sie können jedoch gerne so kreativ sein, wie Sie möchten, indem Sie Ihre eigenen einfügen:
Produkt 1 | Verbrauchbar | com.mobiletuts.inappdemo.1 | Tier 1
Produkt 2 | Verbrauchbar | com.mobiletuts.inappdemo.2 | Rang 2
Produkt 3 | Verbrauchbar | com.mobiletuts.inappdemo.3 | Tier 3
Nachdem Sie Ihre Premium-Artikel bei iTunesConnect registriert haben, können Sie diese Angebote in Ihre App integrieren. In diesem Tutorial verwenden wir ein einfaches UITableView, um unsere Produktliste anzuzeigen.
Wechseln Sie in die Header-Datei für den Controller Ihrer Hauptanwendung, in diesem Fall InAppDemoViewController.h, und ändern Sie den Code so, dass er wie folgt aussieht:
#einführen#einführen @Interface InAppDemoViewController: UIViewController NSMutableArray * productIdentifierList; NSMutableArray * productDetailsList; IBOutlet UITableView * productDisplayTableView; @ property (nonatomic, keep) NSMutableArray * productIdentifierList; @ property (nonatomic, keep) NSMutableArray * productDetailsList; @ property (nonatomic, keep) UITableView * productDisplayTableView; @Ende
Das Array productIdentifierList speichert die in Schritt 3 erstellten Produktkennungen als Zeichenfolgen, während productDetailsList die lokalisierten Produktinformationen speichert, die vom App Store bereitgestellt und dem Benutzer tatsächlich angezeigt werden.
Gehen Sie nun zur Klassenimplementierungsdatei InAppDemoViewController.m und synthetisieren Sie die Variablen, die Sie gerade in Ihrer Headerdatei deklariert haben:
@implementation InAppDemoViewController @synthesize productIdentifierList, productDetailsList, productDisplayTableView;
Kommentieren Sie die viewDidLoad-Funktion und initialisieren Sie Ihre Datenquelle:
- (void) viewDidLoad productDetailsList = [[NSMutableArray-Zuordnung] init]; productIdentifierList = [[NSMutableArray-Zuordnung] 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 einer realen Anwendung würden wir diesen Kaufladecode niemals in die viewDidLoad-Methode einfügen wollen, da sie im Haupt-Thread ausgeführt wird und die Anwendungsschnittstelle beim Abrufen der Daten kurz sperrt. Wir verwenden viewDidLoad hier nur zu Demonstrationszwecken.
Beginnend mit Zeile 6 erstellen wir eine for-Schleife, um die Anzahl der Elemente, die wir anzeigen möchten, zu durchlaufen. Da wir ein gemeinsames Benennungsschema für unsere Produktkennungen verwenden, können wir mehrere Elemente im Handumdrehen erstellen, ohne die Kennungen von Hand eingeben zu müssen. Beachten Sie, dass dieses Muster mit einigen Internet-Programmen weiter verbessert werden kann: Ihre Produkt-ID-Liste wird idealerweise von einem externen Server geladen, damit Sie Produkte dynamisch hinzufügen oder entfernen können, ohne jedes Mal eine neue Binärdatei durch den App Store zu verschieben.
Ab Zeile 10 werden wir mit unserem ersten Store Kit Framework-Objekt SKProductsRequest vorgestellt. Dieses Objekt wird verwendet, um eine Liste mit Produktbezeichnern an den App Store zu senden, um eine Liste mit lokalisierten Produktinformationen und genauen Produktpreisinformationen zu erhalten. Diese dynamische Lokalisierungs- und Produkterfassungstechnik bietet Ihnen eine weitaus größere Flexibilität als das manuelle Kodieren dieser Attribute.
In Zeile 12 setzen wir den Anforderungsdelegaten, den das Store Kit Framework nach Erhalt eines Ergebnisses anruft. Kopieren Sie den folgenden Code und fügen Sie ihn ein, um diesem Delegatenprotokoll zu entsprechen:
-(void) productsRequest: (SKProductsRequest *) request didReceiveResponse: (SKProductsResponse *) antwort [productDetailsList addObjectsFromArray: response.products]; [productDisplayTableView reloadData]; - (void) requestDidFinish: (SKRequest *) request [request release]; - (void) request: (SKRequest *) request didFailWithError: (NSError *) error NSLog (@ "Fehler beim Verbinden mit Fehler:% @", [error localizedDescription]);
Die productsRequest-Methode wird aufgerufen, nachdem die Liste der Produkte aus dem App Store abgerufen wurde, und wir ordnen diese Liste der Produktobjekte aus dem App Store unserem productDetailsList-Array zur späteren Verwendung zu. Die anderen beiden Protokollmethoden funktionieren wie erwartet.
Nun richten wir das UITableView ein, mit dem unsere Produktinformationen angezeigt werden. Richten Sie zunächst Ihre Nib-Datei im Interface Builder ein. Erweitern Sie den Ordner "Resources" im Gruppen- und Dateibereich, und doppelklicken Sie auf die Datei InAppViewController.xib, um den Interface Builder zu öffnen.
Ziehen Sie ein UITableView-Objekt aus dem Bibliotheksbereich in das Fenster "In App Demo View Controller". Klicken Sie im Fenster mit der rechten Maustaste auf die UITableView, verbinden Sie die dataSource und delegieren Sie sie an den Eigentümer der Datei. Klicken Sie dann mit der rechten Maustaste auf den Eigentümer der Datei, und verbinden Sie productDisplayTableView mit dem UITableView-Objekt. Speichern und schließen Sie die Feder.
Gehen Sie zurück zu Ihrer View Controller-Implementierungsdatei InAppDemoViewController.m.
Fügen Sie die folgenden Zeilen ein, um die Protokollanforderungen UITableViewDelegate und UITableViewDataSource zu erfüllen:
- (NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection: (NSInteger) Abschnitt return [self.productDetailsList count]; - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath statischer NSString * GenericTableIdentifier = @ "GenericTableIdentifier"; UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: GenericTableIdentifier]; if (cell == nil) cell = [[[UITableViewCell-Zuordnung] initWithFrame: CGRectZero reuseIdentifier: GenericTableIdentifier] autorelease]; NSUInteger-Zeile = [IndexPath-Zeile]; SKProduct * thisProduct = [productDetailsList objectAtIndex: row]; [cell.textLabel setText: [NSString stringWithFormat: @ "% @ -% @", thisProduct.localizedTitle, thisProduct.price]]; zurück Zelle;
Das meiste davon ist Standardcode für die Anzeige von Text in UITableView-Zellen. Beachten Sie jedoch, dass wir eine Instanz von SKProduct, thisProduct, erstellen, um die Produktdaten für die aktuelle Zeile abzurufen, und dass wir lokalisierte Produktinformationen leicht von den Datenelementen des Objekts abrufen können. Weitere Informationen zu allen verfügbaren Datenmitgliedern finden Sie in der offiziellen Apple SKProduct-Referenz.
Sie sollten jetzt in der Lage sein, Ihre Anwendung zu kompilieren und auszuführen, aber es gibt einen Haken: Im App Store können Einkäufe nur auf einem tatsächlichen Gerät getestet werden. Sie müssen also ein Bereitstellungsprofil für diese Anwendung erstellen und installieren, um die Anwendung testen zu können Code.
Nachdem Sie Ihr Bereitstellungsprofil installiert und Xcode konfiguriert haben, können Sie die Anwendung auf Ihrem Gerät erstellen und ausführen. Eine einfache Tabellenansicht mit Produkttiteln ist für Ihre reale Welt-App zu einfach, aber das Schöne an dem In-App-Purchase-System besteht darin, dass die Gestaltung der Storefront-Oberfläche vollkommen Ihnen überlassen ist. In zukünftigen Tutorials dieser Serie wird eine erweiterte Schnittstelle erstellt. In der Zwischenzeit können Sie Ihrer Kreativität freien Lauf lassen und das gewünschte Design verwenden, um Ihre Produkte zu präsentieren!
Bevor Sie mit der Autorisierung von Transaktionen und dem Verkauf neuer Inhalte an Ihre Benutzer beginnen, sollten Sie sich überlegen, wie diese neuen Inhalte bereitgestellt werden. Mit dem Store Kit-Framework können Sie einen Kauf problemlos autorisieren, Sie sind jedoch bei der Auftragserfüllung auf sich allein gestellt. Das integrierte Produktmodell und das Serverproduktmodell sind die zwei primären Entwurfsmuster, aus denen Sie auswählen können, um sicherzustellen, dass Ihre Benutzer das bekommen, wofür sie bezahlen.
Mit dem integrierten Produktmodell ist alles, was ein Benutzer kaufen darf, bereits beim ersten Download in der Anwendung enthalten. Dieser Inhalt ist bis zum In-App-Kauf gesperrt oder für die Verwendung verborgen. Dann wird das Angebot nutzbar.
Das folgende Diagramm von Apple Inc. veranschaulicht das integrierte Produktmodell:
Im Serverproduktmodell wird Inhalt zum Zeitpunkt des Kaufs von einem Server unter Ihrer Kontrolle dynamisch auf das Gerät des Benutzers übertragen. Im Serverproduktmodell müssen Sie den zusätzlichen Schritt hinzufügen, in dem überprüft wird, ob der vom Clientgerät empfangene Transaktionsbeleg gültig ist. Außerdem müssen Sie möglicherweise einen Mechanismus zur Identifizierung Ihrer Benutzer einrichten, um sicherzustellen, dass Abonnements und andere nicht verbrauchbare Produkte verwendet werden können Sie können weiterhin von jedem iPhone OS-Gerät aus, das der kaufende Benutzer besitzt, und nicht nur von dem Gerät, auf dem sie den Artikel ursprünglich gekauft haben (dies ist eine Geschäftsanforderung von Apple). Sie sind auch dafür verantwortlich, die Netzwerkverbindung auszuhandeln, um möglicherweise eine beträchtliche Menge an Text- oder Multimediadaten zu übertragen.
Ein Hauptvorteil des Serverproduktmodells besteht darin, dass Sie bei Bedarf eine sehr große Menge an Inhalt verkaufen können, während die anfängliche Downloadgröße Ihrer Anwendung gering bleibt. Das Erstellen und Bereitstellen von neuen Premium-Inhalten für Ihre App ist auch viel schneller, da Sie keine neue Anwendungs-Binärdatei durch den iTunes Store verschieben müssen, um neue Artikel zum Verkauf anzubieten.
Das folgende Diagramm von Apple Inc. veranschaulicht das Serverproduktmodell:
Wie Sie sehen, ist das integrierte Produktmodell das einfachere der beiden Entwurfsmuster. Es ist einfacher zu implementieren und zu warten, es fehlt jedoch die Fähigkeit der bedarfsgerechten Bereitstellung. Das Serverproduktmodell ist weitaus komplexer, ermöglicht es Ihnen jedoch, neue Inhalte mit größerer Flexibilität und Geschwindigkeit zu erstellen und Ihre Anwendungsgröße schlank zu halten, indem Sie nur bei Bedarf umfangreiche Downloads bereitstellen.
Sowohl das integrierte Produktmodell als auch das Serverproduktmodell werden in zukünftigen Teilen dieser Serie ausführlich behandelt.
Es ist jetzt ein guter Zeitpunkt, um beide Verteilungsmodelle zu prüfen und zu ermitteln, welches für Ihre Anwendung am besten geeignet ist.