Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
System iOS 6 wprowadził dwie zmiany w interfejsie API zestawu Store: możliwość wyświetlania produktów iTunes (i App Store/iBookstore) z poziomu aplikacji oraz nowej opcji zakupu w aplikacji, w której firma Apple będzie hostować pliki do pobrania. W tym dokumencie wyjaśniono, jak zaimplementować te funkcje za pomocą platformy Xamarin.iOS.
Główne zmiany w zestawie Store Kit w systemie iOS6 to dwie nowe funkcje:
- Wyświetlanie i kupowanie zawartości w aplikacji — użytkownicy mogą kupować i pobierać aplikacje, muzykę, książki i inne treści iTunes bez opuszczania aplikacji. Możesz również połączyć się z własnymi aplikacjami, aby promować zakup lub po prostu zachęcić opinie i oceny.
- Hostowana zawartość zakupu w aplikacji — firma Apple będzie przechowywać i dostarczać zawartość skojarzona z produktami zakupu w aplikacji, co eliminuje potrzebę hostowania plików przez oddzielny serwer, automatycznie obsługuje pobieranie w tle i umożliwia pisanie mniejszej ilości kodu.
Szczegółowe informacje na temat interfejsów API StoreKit można znaleźć w przewodnikach dotyczących zakupów w aplikacji.
Wymagania
Funkcje zestawu Store Kit omówione w tym dokumencie wymagają systemów iOS 6 i Xcode 4.5 wraz z platformą Xamarin.iOS 6.0.
Wyświetlanie i kupowanie zawartości w aplikacji
Nowa funkcja zakupów w aplikacji w systemie iOS umożliwia użytkownikom wyświetlanie informacji o produkcie i kupowanie lub pobieranie produktu z poziomu aplikacji. Wcześniej aplikacje musiałyby wyzwolić program iTunes, sklep App Store lub iBookstore, co spowodowałoby pozostawienie oryginalnej aplikacji przez użytkownika. Ta nowa funkcja automatycznie zwraca użytkownika do aplikacji po zakończeniu.
Przykłady tego, jak można to użyć, to:
- Zachęcanie użytkowników do oceniania aplikacji — możesz otworzyć stronę sklepu App Store, aby użytkownik mógł oceniać i przeglądać aplikację bez opuszczania jej.
- Aplikacje z promowaniem krzyżowym — umożliwia użytkownikowi wyświetlanie innych publikowanych aplikacji z możliwością natychmiastowego kupowania/pobierania.
- Ułatwianie użytkownikom znajdowania i pobierania zawartości — pomaga użytkownikom kupować zawartość, którą aplikacja znajduje, zarządza lub agreguje (np. aplikacja związana z muzyką może udostępnić listę odtwarzania piosenek i zezwolić na zakup każdej piosenki w aplikacji).
Po wyświetleniu elementu SKStoreProductViewController użytkownik może wchodzić w interakcje z informacjami o produkcie tak, jakby znajdowały się w programie iTunes, sklepie App Store lub sklepie iBookStore. Użytkownik może:
- Wyświetlanie zrzutów ekranu (w przypadku aplikacji)
- Przykładowe utwory lub wideo (dla muzyki, programów telewizyjnych i filmów),
- Odczytywanie (i zapisywanie) recenzji,
- Zakup i pobieranie, które odbywa się w całości w obrębie kontrolera widoku i zestawu Store Kit.
Niektóre opcje w ramach SKStoreProductViewController programu nadal wymuszają pozostawienie aplikacji przez użytkownika i otwarcie odpowiedniej aplikacji ze sklepu, na przykład kliknięcie linku Powiązane produkty lub link pomocy technicznej aplikacji.
SKStoreProductViewController
Interfejs API do wyświetlania produktu w dowolnej aplikacji jest prosty: wymaga tylko utworzenia i wyświetlenia elementu SKStoreProductViewController. Wykonaj następujące kroki, aby utworzyć i pokazać produkt:
-
StoreProductParametersUtwórz obiekt w celu przekazania parametrów do kontrolera widoku, w tymproductIdobiektu w konstruktorze. - Utwórz wystąpienie elementu
SKProductViewController. Przypisz je do pola poziomu klasy. - Przypisz procedurę obsługi do zdarzenia kontrolera
Finishedwidoku, które powinno odrzucić kontroler widoku. To zdarzenie jest wywoływane, gdy użytkownik naciska przycisk anuluje; lub w inny sposób finalizuje transakcję wewnątrz kontrolera widoku. - Wywołaj metodę przekazującą
LoadProductinstrukcjęStoreProductParametersi procedurę obsługi uzupełniania. Procedura obsługi ukończenia powinna sprawdzić, czy żądanie produktu zostało pomyślnie przedstawione, a jeśli tak, przedstawionoSKProductViewControllermodalnie. Należy dodać odpowiednią obsługę błędów w przypadku, gdy nie można pobrać produktu.
Przykład
Projekt ProductView w przykładowym kodzie StoreKit dla tego artykułu implementuje metodę Buy , która akceptuje identyfikator Apple ID dowolnego produktu i wyświetla element SKStoreProductViewController. Poniższy kod wyświetla informacje o produkcie dla dowolnego identyfikatora Apple ID:
void Buy (int productId)
{
var spp = new StoreProductParameters(productId);
var productViewController = new SKStoreProductViewController ();
// must set the Finished handler before displaying the view controller
productViewController.Finished += (sender, err) => {
// Apple's docs says to use this method to close the view controller
this.DismissModalViewControllerAnimated (true);
};
productViewController.LoadProduct (spp, (ok, err) => { // ASYNC !!!
if (ok) {
PresentModalViewController (productViewController, true);
} else {
Console.WriteLine (" failed ");
if (err != null)
Console.WriteLine (" with error " + err);
}
});
}
Aplikacja wygląda jak na poniższym zrzucie ekranu podczas uruchamiania — pobieranie lub kupowanie odbywa się w całości w obrębie elementu SKStoreProductViewController:
Obsługa starszych systemów operacyjnych
Przykładowa aplikacja zawiera kod pokazujący sposób otwierania sklepu App Store, iTunes lub iBookstore we wcześniejszych wersjach systemu iOS.
OpenUrl Użyj metody , aby otworzyć prawidłowo spreparowany adres URL itunes.com.
Możesz zaimplementować sprawdzanie wersji, aby określić kod do uruchomienia, jak pokazano poniżej:
if (UIDevice.CurrentDevice.CheckSystemVersion (6,0)) {
// do iOS6+ stuff, using SKStoreProductViewController as shown above
} else {
// don't do stuff requiring iOS 6.0, use the old syntax
// (which will take the user out of your app)
var nsurl = new NSUrl("http://itunes.apple.com/us/app/angry-birds/id343200656?mt=8");
UIApplication.SharedApplication.OpenUrl (nsurl);
}
Błędy
Następujący błąd wystąpi, jeśli używany identyfikator Apple ID jest nieprawidłowy, co może być mylące, ponieważ oznacza to problem z siecią lub uwierzytelnianiem pewnego rodzaju.
Error Domain=SKErrorDomain Code=5 "Cannot connect to iTunes Store"
Czytanie Objective-C dokumentacji
Deweloperzy czytający o zestawie Store Kit w portalu dla deweloperów firmy Apple zobaczą protokół — SKStoreProductViewControllerDelegate — omówiony w odniesieniu do tej nowej funkcji. Protokół delegata ma tylko jedną metodę — productViewControllerDidFinish — która została uwidoczniona jako Finished zdarzenie w środowisku SKStoreProductViewController Xamarin.iOS.
Określanie identyfikatorów Apple ID
Identyfikator Apple ID wymagany przez SKStoreProductViewController element jest liczbą (nie należy mylić z identyfikatorami pakietów, takimi jak "com.xamarin.mwc2012"). Istnieje kilka różnych sposobów znajdowania identyfikatora Apple ID dla produktów, które chcesz wyświetlić, wymienionych poniżej:
iTunesConnect
W przypadku opublikowanych aplikacji można łatwo znaleźć identyfikator Apple ID w programie iTunes Connect:
Wyszukaj interfejs API
Firma Apple udostępnia dynamiczny interfejs API wyszukiwania, który umożliwia wykonywanie zapytań dotyczących wszystkich produktów w sklepie App Store, iTunes i iBookstore. Informacje o sposobie uzyskiwania dostępu do interfejsu API wyszukiwania można znaleźć w zasobach partnerskich firmy Apple, chociaż interfejs API jest udostępniany nikomu (nie tylko zarejestrowanych podmiotów partnerskich). Wynikowy kod JSON można przeanalizować w celu odnalezienia trackId identyfikatora Apple ID do użycia z elementem SKStoreProductViewController.
Wyniki będą również zawierać inne metadane, w tym informacje o wyświetlaniu i adresy URL kompozycji, których można użyć do renderowania produktu w aplikacji.
Oto kilka przykładów:
- Aplikacja iBooks — https://itunes.apple.com/search?term=ibooks& entity=software&country=us
- Kropka i kangury iBook – https://itunes.apple.com/search?term=dot+and+the+kangaroo& entity=ebook&country=us
Kanał informacyjny partnera przedsiębiorstwa
Firma Apple udostępnia zatwierdzonych partnerów z kompletnym zrzutem danych wszystkich swoich produktów w postaci plików prostych gotowych do pobrania. Jeśli kwalifikujesz się do uzyskania dostępu do kanału informacyjnego dla partnerów przedsiębiorstwa, identyfikator Apple ID dla dowolnego produktu można znaleźć w tym zestawie danych.
Wielu użytkowników kanału informacyjnego dla partnerów przedsiębiorstwa jest członkami programu partnerskiego, który umożliwia uzyskanie prowizji na sprzedaż produktów.
SKStoreProductViewController nie obsługuje identyfikatorów partnerskich (w momencie pisania).
Łącza produktów bezpośrednich
Identyfikator Apple ID dla produktu można wywnioskować z linku adresu URL podglądu iTunes.
W dowolnych linkach produktów iTunes (w przypadku aplikacji, muzyki lub książek) znajdź część adresu URL rozpoczynającą się od id i użyj poniższego numeru.
Na przykład bezpośredni link do elementów iBooks to
http://itunes.apple.com/us/app/ibooks/id364709193?mt=8
identyfikator Apple ID jest 364709193. Podobnie w przypadku aplikacji MWC2012 link bezpośredni to
http://itunes.apple.com/us/app/mwc-2012-unofficial/id496963922?mt=8
identyfikator Apple ID jest 496963922.
Kupowanie hostowanej zawartości w aplikacji
Jeśli zakupy w aplikacji składają się z zawartości do pobrania (np. książek lub innych multimediów, sztuki i konfiguracji na poziomie gry lub innych dużych plików), te pliki były hostowane na serwerze internetowym, a aplikacje musiały zawierać kod, aby bezpiecznie je pobrać po zakupie. Począwszy od systemu iOS 6, firma Apple będzie hostować pliki na swoich serwerach, usuwając potrzebę oddzielnego serwera. Ta funkcja jest dostępna tylko w przypadku produktów nieużywanych (nieużywanych lub subskrypcji). Zalety korzystania z usługi hostingowej firmy Apple obejmują:
- Oszczędzaj koszty hostingu i przepustowości.
- Prawdopodobnie bardziej skalowalny niż jakikolwiek host serwera, którego obecnie używasz.
- Mniej kodu do zapisania, ponieważ nie trzeba tworzyć żadnego przetwarzania po stronie serwera.
- Pobieranie w tle jest implementowane.
Uwaga: testowanie zawartości zakupu hostowanej w aplikacji w symulatorze systemu iOS nie jest obsługiwane, dlatego należy przetestować rzeczywiste urządzenie.
Podstawy hostowanej zawartości
Przed systemem iOS 6 istnieją dwa sposoby udostępniania produktu (opisane bardziej szczegółowo w dokumentacji zakupu w aplikacji platformy Xamarin):
- Wbudowane produkty — funkcje , które są "odblokowane" przez zakup, ale wbudowane w aplikację (jako kod lub zasoby osadzone). Przykłady wbudowanych produktów obejmują odblokowane filtry zdjęć lub power-upy w grze.
- Produkty dostarczane przez serwer — po zakupie aplikacja musi pobrać zawartość z działającego serwera. Ta zawartość jest pobierana podczas zakupu, przechowywana na urządzeniu, a następnie renderowana w ramach dostarczania produktu. Przykłady obejmują książki, problemy z magazynem lub poziomy gier składające się z grafik w tle i plików konfiguracyjnych.
W systemie iOS 6 firma Apple oferuje odmianę produktów dostarczanych przez serwer: będą hostować pliki zawartości na swoich serwerach. Dzięki temu znacznie łatwiej jest tworzyć produkty dostarczane przez serwer, ponieważ nie jest wymagane do obsługi oddzielnego serwera, a zestaw Store Kit zapewnia funkcję pobierania w tle, którą wcześniej trzeba było napisać samodzielnie. Aby skorzystać z hostingu firmy Apple, włącz hosting zawartości dla nowych produktów zakupu w aplikacji i zmodyfikuj kod zestawu Store Kit, aby móc z niego korzystać. Pliki zawartości produktu są następnie kompilowane przy użyciu programu Xcode i przekazywane do serwerów firmy Apple w celu przejrzenia i wydania.
Korzystanie ze sklepu App Store w celu zapewnienia zakupów w aplikacji z hostowaną zawartością wymaga następującej konfiguracji i konfiguracji:
- iTunes Connect — musisz podać swoje informacje bankowe i podatkowe do Firmy Apple, aby mogły przekazać fundusze zebrane w Twoim imieniu. Następnie można skonfigurować produkty do sprzedaży i skonfigurować konta użytkowników piaskownicy w celu przetestowania zakupu. Musisz również skonfigurować hostowaną zawartość dla tych produktów, które nie są eksploatacyjne, które mają być hostowane przez firmę Apple.
- Portal aprowizacji systemu iOS — tworzenie identyfikatora pakietu i włączanie dostępu do sklepu App Store dla aplikacji, tak jak w przypadku każdej aplikacji obsługującej zakupy w aplikacji.
- Store Kit — dodawanie kodu do aplikacji w celu wyświetlania produktów, zakupów produktów i przywracania transakcji. W zestawie sklepu dla systemu iOS 6 będzie również zarządzać pobieraniem zawartości produktu w tle z aktualizacjami postępu.
-
Kod niestandardowy — śledzenie zakupów dokonanych przez klientów i dostarczanie zakupionych produktów lub usług. Skorzystaj z nowych klas zestawu sklepu dla systemu iOS 6, takich jak
SKDownloadpobieranie zawartości hostowanej przez firmę Apple.
W poniższych sekcjach opisano sposób implementowania hostowanej zawartości, od tworzenia i przekazywania pakietu do zarządzania procesem zakupu i pobierania przy użyciu przykładowego kodu dla tego artykułu.
Przykładowy kod
Przykładowy projekt HostedNonConsumables (w StoreKitiOS6.zip) używa hostowanej zawartości. Aplikacja oferuje dwa "rozdziały książki" na sprzedaż, zawartość, dla której jest hostowana na serwerach firmy Apple. Zawartość składa się z pliku tekstowego i obrazu, chociaż w rzeczywistej aplikacji można używać znacznie bardziej złożonej zawartości.
Aplikacja wygląda następująco wcześniej, podczas zakupu i po nim:
Plik tekstowy i obraz są pobierane i kopiowane do katalogu Documents aplikacji. Aby uzyskać więcej informacji na temat różnych katalogów dostępnych dla magazynu aplikacji, zobacz dokumentację systemu plików.
iTunes Connect
Podczas tworzenia nowych produktów, które będą korzystać z hostingu zawartości firmy Apple, pamiętaj, aby wybrać typ produktu Nieużywalny . Inne typy produktów nie obsługują hostingu zawartości. Ponadto nie należy włączać hostingu zawartości dla istniejących sprzedawanych produktów; włączaj tylko hosting zawartości dla nowych produktów.
Wprowadź identyfikator produktu. Ten identyfikator będzie wymagany później podczas tworzenia zawartości dla tego produktu.
Hosting zawartości jest ustawiony w sekcji Szczegóły. Przed rozpoczęciem zakupu w aplikacji usuń zaznaczenie pola wyboru Zawartość hosta z firmą Apple , jeśli chcesz anulować (nawet jeśli przekazano zawartość testową). Nie można jednak usunąć hostingu zawartości po zakupie w aplikacji.
Po włączeniu zawartości hostingu produkt wprowadzi stan Oczekiwania na przekazanie i wyświetli następujący komunikat:
Pakiet zawartości powinien zostać utworzony za pomocą programu Xcode i przekazany przy użyciu narzędzia Archiwum. Instrukcje dotyczące tworzenia pakietów zawartości są podane w następnej sekcji Tworzenie . Pliki PKG.
Tworzenie. Pliki PKG
Pliki zawartości przekazywane do firmy Apple muszą spełniać następujące ograniczenia:
- Nie można przekroczyć 2 GB rozmiaru.
- Nie można zawierać kodu wykonywalnego (lub symlinków wskazujących poza zawartość).
- Musi być poprawnie sformatowany (w tym plik plist ) i mieć rozszerzenie .pkg pliku. Ta czynność zostanie wykonana automatycznie, jeśli wykonasz te instrukcje przy użyciu środowiska Xcode.
Można dodać wiele różnych plików i typów plików, o ile spełniają one te ograniczenia. Zawartość jest spakowana przed dostarczeniem do aplikacji i rozpakowana przez zestaw Store Kit przed uzyskaniem do niego dostępu.
Po przekazaniu pakietu zawartości można go zastąpić nowszą zawartością. Nowa zawartość musi zostać przekazana i przesłana do przeglądu/zatwierdzenia za pośrednictwem normalnego procesu. Zwiększ ContentVersion pole w zaktualizowanych pakietach zawartości, aby wskazać, że jest nowsza.
Projekty zawartości zakupu w aplikacji Xcode
Tworzenie pakietów zawartości dla produktów zakupionych w aplikacji wymaga obecnie środowiska Xcode. Nie jest absolutnie wymagane kodowanie OBJECTIVE-C; Program Xcode oferuje nowy typ projektu dla tych pakietów, który zawiera jedynie twoje pliki oraz plik plist.
Nasza przykładowa aplikacja zawiera rozdziały książek na sprzedaż — każdy pakiet zawartości rozdziału będzie zawierał następujące elementy:
- plik tekstowy i
- obraz reprezentujący rozdział.
Zacznij od wybrania pozycji > z menu i wybrania pozycji Zawartość zakupu w aplikacji:
Wprowadź nazwę produktu i identyfikator firmy, tak aby identyfikator pakietu był zgodny z identyfikatoremproduktu wprowadzonym w programie iTunes Connect dla tego produktu.
Teraz będziesz mieć pusty projekt Zawartości zakupu w aplikacji. Możesz kliknąć prawym przyciskiem myszy i dodać pliki... lub przeciągnąć je do Nawigatora projektu. Upewnij się, że właściwość ContentVersion jest poprawna (powinna zaczynać się od 1.0, ale jeśli później zdecydujesz się zaktualizować zawartość, pamiętaj, aby ją zwiększać).
Ten zrzut ekranu przedstawia program Xcode z plikami zawartości zawartymi w projekcie i wpisami plist widocznymi w oknie głównym:
Po dodaniu wszystkich plików zawartości można zapisać ten projekt i edytować go ponownie później lub rozpocząć proces przekazywania.
Przesyłanie. Pliki PKG
Najprostszym sposobem przekazywania pakietów zawartości jest użycie narzędzia archiwum Xcode. Wybierz pozycję > produktów z menu, aby rozpocząć:
Pakiet zawartości zostanie wyświetlony w archiwum, jak pokazano poniżej. Typ archiwum i ikona pokazują, że ten wiersz jest archiwum zawartości zakupów w aplikacji. Kliknij pozycję Weryfikuj... aby sprawdzić nasz pakiet zawartości pod kątem błędów bez faktycznego wykonania przekazywania.
Zaloguj się przy użyciu poświadczeń programu iTunes Connect:
Wybierz poprawną aplikację i zakup w aplikacji, aby skojarzyć tę zawartość z:
Powinien zostać wyświetlony komunikat podobny do tego zrzutu ekranu:
Teraz przejdź przez podobny proces, ale kliknięcie przycisku Dystrybuuj... spowoduje przekazanie zawartości.
Wybierz pierwszą opcję, aby przekazać zawartość:
Zaloguj się ponownie:
Wybierz prawidłowy rekord aplikacji i zakupu w aplikacji, aby przekazać zawartość do:
Zaczekaj na przekazanie plików:
Po zakończeniu przekazywania zostanie wyświetlony komunikat informujący o przesłaniu zawartości do sklepu App Store.
Po wykonaniu tej czynności po powrocie do strony produktu w programie iTunes Connect zostaną wyświetlone szczegóły pakietu i stan Gotowe do przesłania . Gdy produkt jest w tym stanie, możesz rozpocząć testowanie w środowisku piaskownicy. Nie musisz "przesyłać" produktu do testowania w piaskownicy.
Może upłynąć trochę czasu (np. kilka minut) między przekazaniem archiwum a zaktualizowanym stanem programu iTunes Connect. Możesz przesłać produkt do przeglądu oddzielnie lub przesłać go w połączeniu z plikiem binarnym aplikacji. Dopiero po oficjalnym zatwierdzeniu zawartości przez firmę Apple będzie ona dostępna w produkcyjnym sklepie App Store do zakupu w aplikacji.
Format pliku PKG
Utworzenie i przekazanie hostowanego pakietu zawartości przy użyciu narzędzia Xcode i narzędzia archiwum oznacza, że zawartość samego pakietu nigdy nie jest widoczna. Pliki i katalogi w pakietach utworzonych dla przykładowej aplikacji wyglądają jak poniższy zrzut ekranu z plikiem plist w katalogu głównym i plikami produktów w podkatalogu Zawartość :
Zwróć uwagę na strukturę katalogów pakietu (zwłaszcza lokalizację plików w Contents podkatalogu), ponieważ należy zrozumieć te informacje, aby wyodrębnić pliki z pakietu na urządzeniu.
Aktualizowanie zawartości pakietu
Procedura aktualizowania zawartości po jej zatwierdzeniu:
- Edytuj projekt Zawartość zakupu w aplikacji w programie Xcode.
- Podtrzymuje numer wersji.
- Przekaż ponownie do programu iTunes Connect. Kolejni nabywcy automatycznie otrzymają najnowszą wersję, ale użytkownicy, którzy mają już starą wersję, nie otrzymają żadnego powiadomienia.
- Aplikacja jest odpowiedzialna za powiadamianie użytkowników i zachęcanie ich do pobierania nowszej wersji zawartości. Aplikacja musi również utworzyć funkcję, która pobiera nową wersję przy użyciu funkcji Przywracania zestawu Store Kit.
- Aby określić, czy istnieje nowsza wersja, możesz skompilować funkcję w aplikacji, aby pobrać elementy SKProducts (np. ten sam proces, który jest używany do pobierania cen produktów) i porównać właściwość ContentVersion.
Omówienie zakupów
Przed przeczytaniem tej sekcji zapoznaj się z istniejącą dokumentacją zakupu w aplikacji.
Sekwencja zdarzeń, które występują, gdy produkt z hostowaną zawartością jest kupowany i pobierany, przedstawiono na tym diagramie:
- Nowe produkty można tworzyć w programie iTunes Connect z włączoną zawartością hostowaną. Rzeczywista zawartość jest tworzona oddzielnie w programie Xcode (tak samo jak przeciąganie plików do folderu), a następnie zarchiwizowana i przekazana do programu iTunes (kodowanie nie jest wymagane). Każdy produkt jest następnie przesyłany do zatwierdzenia, po czym staje się dostępny do zakupu. W przykładowym kodzie te identyfikatory produktów są zakodowane na stałe, ale hostowanie zawartości z firmą Apple jest bardziej elastyczne, jeśli przechowujesz dostępną listę produktów na serwerze zdalnym, aby można było go zaktualizować podczas przesyłania nowych produktów i zawartości do programu iTunes Connect.
- Gdy użytkownik kupuje produkt, transakcja jest umieszczana w kolejce płatności na potrzeby przetwarzania.
- Store Kit przekazuje żądanie zakupu do serwerów iTunes na potrzeby przetwarzania.
- Transakcja jest zakończona na serwerach iTunes (np. opłata za klienta), a potwierdzenie jest zwracane do aplikacji, wraz z dołączonymi informacjami o produkcie zawierającymi informacje o tym, czy można je pobrać (a jeśli tak, rozmiar pliku i inne metadane).
- Kod powinien sprawdzić, czy produkt można pobrać, a jeśli tak, utwórz żądanie pobierania zawartości, które również znajduje się w kolejce płatności. Store Kit wysyła to żądanie do serwerów iTunes.
- Serwer zwraca plik zawartości do zestawu Store Kit, który zapewnia wywołanie zwrotne w celu zwrócenia postępu pobierania i czasu pozostałych szacunków do kodu.
- Po zakończeniu otrzymasz powiadomienie i przekażesz lokalizację pliku w folderze Pamięci podręcznej.
- Kod powinien skopiować pliki i je zweryfikować, zapisać dowolny stan, który należy pamiętać, że produkt został zakupiony. Skorzystaj z tej okazji, aby poprawnie ustawić flagę tworzenia kopii zapasowej na nowych plikach (wskazówka: jeśli pochodzą one z serwera i nigdy nie są edytowane przez użytkownika, prawdopodobnie należy pominąć ich tworzenie kopii zapasowej, ponieważ użytkownik zawsze może pobrać je z serwerów firmy Apple w przyszłości).
- Wywołaj metodę FinishTransaction. Ten krok jest ważny, ponieważ usuwa transakcję z kolejki płatności. Ważne jest również, aby nie wywoływać funkcji FinishTransaction do momentu skopiowania zawartości z katalogu Cache. Po wywołaniu metody FinishTransaction buforowane pliki prawdopodobnie zostaną szybko przeczyszczone.
Implementowanie zakupu hostowanej zawartości
Poniższe informacje powinny być odczytywane w połączeniu z pełną dokumentacją zakupów w aplikacji. Informacje przedstawione w tym dokumencie koncentrują się na różnicach między hostowaną zawartością a poprzednią implementacją.
Klasy
Dodano lub zmieniono następujące klasy w celu obsługi hostowanej zawartości w systemie iOS 6:
- SKDownload — nowa klasa reprezentująca trwa pobieranie. Interfejs API umożliwia korzystanie z więcej niż jednego produktu, jednak początkowo zaimplementowano tylko jeden.
-
SKProduct — dodano nowe właściwości:
Downloadable,ContentVersion,ContentLengthstablica. -
SKPaymentTransaction — dodano nową właściwość:
Downloads, która zawiera kolekcjęSKDownloadobiektów, jeśli ten produkt ma hostowaną zawartość dostępną do pobrania. -
SKPaymentQueue — dodano nową metodę:
StartDownloads. Wywołaj tę metodę za pomocąSKDownloadobiektów, aby pobrać hostowaną zawartość. Pobieranie może wystąpić w tle. -
SKPaymentTransactionObserver — nowa metoda:
UpdateDownloads. Zestaw Store wywołuje tę metodę z informacjami o postępie bieżących operacji pobierania.
Szczegóły nowej SKDownload klasy:
- Postęp — wartość z zakresu od 0 do 1, której można użyć do wyświetlenia procentowego wskaźnika dla użytkownika. Nie używaj progress == 1, aby wykryć, czy pobieranie zostało ukończone, sprawdź stan == Zakończono.
- TimeRemaining — szacowanie pozostałego czasu pobierania w sekundach. -1 oznacza, że nadal oblicza oszacowanie.
- Stan — aktywny, oczekujące, zakończone, zakończone, wstrzymane, anulowane.
-
ContentURL — lokalizacja pliku, w której zawartość została umieszczona na dysku, w
Cachekatalogu. Wypełniane tylko po zakończeniu pobierania. - Error — sprawdź tę właściwość, jeśli stan jest uszkodzony.
Interakcje między klasami w przykładowym kodzie są wyświetlane na tym diagramie (kod specyficzny dla zakupów zawartości hostowanej jest wyświetlany na zielono):
Przykładowy kod, w którym użyto tych klas, jest wyświetlany w pozostałej części tej sekcji:
CustomPaymentObserver (SKPaymentTransactionObserver)
Zmień istniejące UpdatedTransactions przesłonięcia, aby sprawdzić, czy zawartość można pobrać, i wywołaj metodę StartDownloads w razie potrzeby:
public override void UpdatedTransactions (SKPaymentQueue queue, SKPaymentTransaction[] transactions)
{
foreach (SKPaymentTransaction transaction in transactions) {
switch (transaction.TransactionState) {
case SKPaymentTransactionState.Purchased:
// UPDATED FOR iOS 6
if (transaction.Downloads != null && transaction.Downloads.Length > 0) {
// Purchase complete, and it has downloads... so download them!
SKPaymentQueue.DefaultQueue.StartDownloads (transaction.Downloads);
// CompleteTransaction() call has moved after downloads complete
} else {
// complete the transaction now
theManager.CompleteTransaction(transaction);
}
break;
case SKPaymentTransactionState.Failed:
theManager.FailedTransaction(transaction);
break;
case SKPaymentTransactionState.Restored:
// TODO: you must decide how to handle restored transactions.
// Triggering all the downloads at once is not advisable.
theManager.RestoreTransaction(transaction);
break;
default:
break;
}
}
}
Poniżej przedstawiono nową metodę UpdatedDownloads zastąpienia. Zestaw Store wywołuje tę metodę po StartDownloads wyzwoleniu w pliku UpdatedTransactions. Ta metoda jest wywoływana wiele razy w nieokreślonych interwałach, aby zapewnić postęp pobierania, a następnie ponownie po zakończeniu pobierania. Zwróć uwagę, że metoda akceptuje tablicę SKDownload obiektów, więc każde wywołanie metody może zapewnić stan wielu pobrań w kolejce. Jak pokazano w implementacji poniżej stanu pobierania są sprawdzane za każdym razem i odpowiednie działania podjęte.
// ENTIRELY NEW METHOD IN iOS6
public override void PaymentQueueUpdatedDownloads (SKPaymentQueue queue, SKDownload[] downloads)
{
Console.WriteLine (" -- PaymentQueueUpdatedDownloads");
foreach (SKDownload download in downloads) {
switch (download.DownloadState) {
case SKDownloadState.Active:
// TODO: implement a notification to the UI (progress bar or something?)
Console.WriteLine ("Download progress:" + download.Progress);
Console.WriteLine ("Time remaining: " + download.TimeRemaining); // -1 means 'still calculating'
break;
case SKDownloadState.Finished:
Console.WriteLine ("Finished!!!!");
Console.WriteLine ("Content URL:" + download.ContentUrl);
// UNPACK HERE! Calls FinishTransaction when it's done
theManager.SaveDownload (download);
break;
case SKDownloadState.Failed:
Console.WriteLine ("Failed"); // TODO: UI?
break;
case SKDownloadState.Cancelled:
Console.WriteLine ("Canceled"); // TODO: UI?
break;
case SKDownloadState.Paused:
case SKDownloadState.Waiting:
break;
default:
break;
}
}
}
InAppPurchaseManager (SKProductsRequestDelegate)
Ta klasa zawiera nową metodę SaveDownload wywoływaną po pomyślnym zakończeniu pobierania.
Hostowana zawartość została pomyślnie pobrana i rozpakowana w Cache katalogu. Struktura obiektu . Plik PKG wymaga zapisania wszystkich plików w podkatalogu Contents , więc poniższy kod wyodrębnia pliki z podkatalogu Contents .
Kod iteruje wszystkie pliki w pakiecie zawartości i kopiuje je do Documents katalogu w podfolderze o nazwie .ProductIdentifier Na koniec wywołuje CompleteTransactionmetodę , która wywołuje FinishTransaction metodę usuwania transakcji z kolejki płatności.
// ENTIRELY NEW METHOD IN iOS 6
public void SaveDownload (SKDownload download)
{
var documentsPath = Environment.GetFolderPath (Environment.SpecialFolder.Personal); // Documents folder
var targetfolder = System.IO.Path.Combine (documentsPath, download.Transaction.Payment.ProductIdentifier);
// targetfolder will be "/Documents/com.xamarin.storekitdoc.montouchimages/" or something like that
if (!System.IO.Directory.Exists (targetfolder))
System.IO.Directory.CreateDirectory (targetfolder);
foreach (var file in System.IO.Directory.EnumerateFiles
(System.IO.Path.Combine(download.ContentUrl.Path, "Contents"))) { // Contents directory is the default in .PKG files
var fileName = file.Substring (file.LastIndexOf ("/") + 1);
var newFilePath = System.IO.Path.Combine(targetfolder, fileName);
if (!System.IO.File.Exists(newFilePath)) // HACK: this won't support new versions...
System.IO.File.Copy (file, newFilePath);
else
Console.WriteLine ("already exists " + newFilePath);
}
CompleteTransaction (download.Transaction); // so it gets 'finished'
}
Po FinishTransaction wywołaniu pobrane pliki nie mają już gwarancji, że znajdują się w Cache katalogu. Przed wywołaniem metody FinishTransactionnależy skopiować wszystkie pliki .
Inne zagadnienia
Powyższy przykładowy kod przedstawia dość prostą implementację zakupów hostowanej zawartości. Istnieją pewne dodatkowe kwestie, które należy wziąć pod uwagę:
Wykrywanie zaktualizowanej zawartości
Chociaż istnieje możliwość zaktualizowania hostowanych pakietów zawartości, zestaw Store Kit nie zapewnia żadnego mechanizmu wypychania tych aktualizacji do użytkowników, którzy już pobrali i kupili produkt. Aby zaimplementować tę funkcję, kod może regularnie sprawdzać nową SKProduct.ContentVersion właściwość (jeśli SKProduct jest Downloadable) i wykryć, czy wartość jest zwiększana. Alternatywnie można utworzyć system powiadomień wypychanych.
Instalowanie zaktualizowanych wersji zawartości
Powyższy przykładowy kod pomija kopiowanie plików, jeśli plik już istnieje. Nie jest to dobry pomysł, jeśli chcesz obsługiwać nowsze wersje pobieranej zawartości.
Alternatywą może być skopiowanie zawartości do folderu o nazwie dla wersji i śledzenie bieżącej wersji (np. w NSUserDefaults lokalizacji lub miejscu przechowywania ukończonych rekordów zakupu).
Przywracanie transakcji
Po SKPaymentQueue.DefaultQueue.RestoreCompletedTransactions wywołaniu zestaw Store Kit zwraca wszystkie poprzednie transakcje dla użytkownika. Jeśli zakupiono dużą liczbę elementów lub każdy zakup ma duże pakiety zawartości, przywracanie może spowodować duży ruch sieciowy, ponieważ wszystko jest w kolejce do pobrania jednocześnie.
Rozważ śledzenie, czy produkt został zakupiony oddzielnie od rzeczywistego pobrania skojarzonego pakietu zawartości.
Wstrzymywania, ponownego uruchamiania i anulowania pobierania
Mimo że przykładowy kod nie demonstruje tej funkcji, można wstrzymać i ponownie uruchomić hostowaną zawartość do pobrania. Zawiera SKPaymentQueue.DefaultQueue metody dla PauseDownloads, ResumeDownloads i CancelDownloads.
Jeśli kod wywołuje FinishTransaction kolejkę płatności przed pobraniem Finished , pobieranie zostanie anulowane automatycznie.
Ustawianie flagi SKIP-Backup na pobranej zawartości
Wytyczne dotyczące tworzenia kopii zapasowych w usłudze iCloud firmy Apple sugerują, że zawartość nieużytkownika, która jest łatwo przywracana z serwera, nie powinna być tworzona kopia zapasowa (ponieważ niepotrzebnie używałaby magazynu w usłudze iCloud). Aby uzyskać więcej informacji na temat ustawiania atrybutu kopii zapasowej, zobacz dokumentację systemu plików.
Podsumowanie
W tym artykule wprowadzono dwie nowe funkcje zestawu Store Kit w systemie iOS6: kupowanie iTunes i innej zawartości z poziomu aplikacji oraz korzystanie z serwera firmy Apple do hostowania własnych zakupów w aplikacji. To wprowadzenie powinno zostać odczytane w połączeniu z istniejącą dokumentacją dotyczącą zakupu w aplikacji, aby uzyskać pełny zakres implementacji funkcji zestawu Store Kit.