iOS 6’da StoreKit Üzerindeki Değişiklikler
iOS 6, Store Kit API'sinde iki değişiklik yaptı: iTunes (ve App Store/iBookstore) ürünlerini uygulamanızın içinden görüntüleme özelliği ve Apple'ın indirilebilir dosyalarınızı barındıracağı yeni bir uygulama içi satın alma seçeneği. Bu belgede Xamarin.iOS ile bu özelliklerin nasıl uygulanacakları açıklanmaktadır.
iOS6'da Store Kit'te yapılan başlıca değişiklikler şu iki yeni özelliktir:
- Uygulama İçi İçerik Görüntüleme ve Satın Alma – Kullanıcılar uygulamanızdan çıkmadan uygulama, müzik, kitap ve diğer iTunes içeriklerini satın alabilir ve indirebilir. Ayrıca satın alma işlemini teşvik etmek için kendi uygulamalarınıza bağlantı verebilir veya yalnızca incelemeleri ve derecelendirmeleri teşvik edebilirsiniz.
- Uygulama İçi Satın Alma Barındırılan İçerik – Apple, uygulama içi satın alma ürünlerinizle ilişkili içeriği depolar ve teslim eder. Bu, dosyalarınızı barındırmak için ayrı bir sunucuya duyulan ihtiyacı ortadan kaldırır, arka plan indirmeyi otomatik olarak destekler ve daha az kod yazmanızı sağlar.
StoreKit API'lerinin ayrıntılı kapsamı için Uygulama İçi Satın Alma kılavuzlarına bakın.
Gereksinimler
Bu belgede açıklanan Store Kit özellikleri, Xamarin.iOS 6.0 ile birlikte iOS 6 ve Xcode 4.5 gerektirir.
Uygulama İçi İçerik Görüntüleme ve Satın Alma
iOS'taki yeni uygulama içi satın alma özelliği, kullanıcıların ürün bilgilerini görüntülemesine ve ürünü uygulamanızın içinden satın almasına veya indirmesine olanak tanır. Daha önce uygulamaların iTunes, App Store veya iBookstore'u tetiklemeleri gerekirdi ve bu da kullanıcının özgün uygulamadan ayrılmasına neden olurdu. Bu yeni özellik, tamamlandığında kullanıcıyı otomatik olarak uygulamanıza döndürür.
Bunun nasıl kullanılabileceğini gösteren örnekler şunlardır:
- Kullanıcıları uygulamanızı derecelendirmeye teşvik etme – Kullanıcının uygulamadan çıkmadan uygulamanızı derecelendirmesi ve gözden geçirmesi için App Store sayfasını açabilirsiniz.
- Çapraz tanıtım uygulamaları – Kullanıcının yayımladığınız diğer uygulamaları görmesine izin verin ve bu sayede hemen satın alabilir/indirebilir.
- Kullanıcıların içerik bulmasına ve indirmesine yardımcı olma – Kullanıcıların uygulamanızın bulduğu, yönettiği veya toplayan içeriği satın almasına yardımcı olun (örneğin, müzikle ilgili bir uygulama bir şarkı listesi sağlayabilir ve her şarkının uygulama içinden satın alınmasına izin verebilir).
SKStoreProductViewController
görüntülendikten sonra kullanıcı, ürün bilgileriyle iTunes, App Store veya iBookstore'daymış gibi etkileşimde bulunabilir. Kullanıcı aşağıdakileri yapabilir:
- Ekran görüntülerini görüntüleme (uygulamalar için),
- Örnek şarkılar veya video (müzik, TV programları ve filmler için),
- İncelemeleri okuma (ve yazma),
- Tamamen görünüm denetleyicisinde ve Mağaza Seti'nde gerçekleşen satın alma ve indirme.
içindeki SKStoreProductViewController
bazı seçenekler, kullanıcıyı uygulamanızdan ayrılmaya ve İlgili Ürünler'e veya bir uygulamanın Destek bağlantısına tıklama gibi ilgili mağaza uygulamasını açmaya zorlamaya devam eder.
SKStoreProductViewController
Bir ürünü herhangi bir uygulama içinde göstermek için API basittir: yalnızca oluşturmanızı ve görüntülemenizi SKStoreProductViewController
gerektirir. Ürün oluşturmak ve göstermek için şu adımları izleyin:
- Oluşturucuda dahil olmak üzere
productId
görünüm denetleyicisine parametre geçirmek için birStoreProductParameters
nesne oluşturun. - örneğini oluşturma
SKProductViewController
. Bunu bir sınıf düzeyi alanına atayın. - Görünüm denetleyicisinin olayına, görünüm denetleyicisini
Finished
kapatması gereken bir işleyici atayın. Kullanıcı cancel tuşuna bastığında bu olay çağrılır; veya görünüm denetleyicisi içindeki bir işlemi son haline döndürür. LoadProduct
ve tamamlama işleyicisiniStoreProductParameters
ileten yöntemini çağırın. Tamamlama işleyicisi, ürün isteğinin başarılı olup olmadığını denetlemeli ve başarılıysa modlu olarak sunmalıdırSKProductViewController
. Ürünün alınamaması durumunda uygun hata işleme eklenmelidir.
Örnek
Bu makalenin StoreKit örnek kodundaki ProductView projesi, herhangi bir ürünün Apple kimliğini kabul eden ve öğesini görüntüleyen SKStoreProductViewController
bir Buy
yöntem uygular. Aşağıdaki kod, belirli bir Apple kimliği için ürün bilgilerini görüntüler:
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);
}
});
}
Uygulama, çalıştırırken aşağıdaki ekran görüntüsüne benzer: indirme veya satın alma işlemi tamamen içinde SKStoreProductViewController
gerçekleşir:
Eski İşletim Sistemlerini Destekleme
Örnek uygulama App Store, iTunes veya iBookstore'u iOS'un önceki sürümlerinde açmayı gösteren kod içerir. OpenUrl
Düzgün hazırlanmış bir itunes.com URL'sini açmak için yöntemini kullanın.
Burada gösterildiği gibi çalıştırılacak kodu belirlemek için bir sürüm denetimi uygulayabilirsiniz:
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);
}
Hatalar
Kullandığınız Apple kimliği geçerli değilse aşağıdaki hata oluşur. Bu durum bir ağ veya kimlik doğrulama sorununa işaret ettiğinden kafa karıştırıcı olabilir.
Error Domain=SKErrorDomain Code=5 "Cannot connect to iTunes Store"
Belgeleri Okuma Objective-C
Apple Geliştirici Portalı'nda Store Kit hakkında bilgi alan geliştiriciler, bu yeni özellikle ilgili olarak ele alınan bir protokol ( SKStoreProductViewControllerDelegate ) görecektir. Temsilci protokolü, Xamarin.iOS dosyasında olay SKStoreProductViewController
olarak Finished
kullanıma sunulan tek bir yönteme (productViewControllerDidFinish) sahiptir.
Apple Kimliklerini Belirleme
tarafından SKStoreProductViewController
gereken Apple kimliği bir sayıdır ("com.xamarin.mwc2012" gibi Paket kimlikleriyle karıştırılmamalıdır). Görüntülemek istediğiniz ürünlerin Apple kimliğini aşağıda listelenen birkaç farklı yolla bulabilirsiniz:
iTunesConnect
Yayımladığınız uygulamalar için, Apple Kimliğini iTunes Connect'te bulmak kolaydır:
Arama API’si
Apple, App Store, iTunes ve iBookstore'daki tüm ürünleri sorgulamak için dinamik bir arama API'si sağlar. API yalnızca kayıtlı bağlı kuruluşlara değil herkese açık olsa da, arama API'sine nasıl erişileceğine ilişkin bilgiler Apple'ın Bağlı Kuruluş Kaynakları'nda bulunabilir. Elde edilen JSON, ile SKStoreProductViewController
kullanılacak Apple kimliğini bulmak trackId
için ayrıştırılabilir.
Sonuçlar, görüntü bilgileri ve uygulamanızda ürünü işlemek için kullanılabilecek resim URL'leri de dahil olmak üzere diğer meta verileri de içerir.
Burada bazı örnekler verilmiştir:
- iBooks uygulaması – https://itunes.apple.com/search?term=ibooks& entity=software&country=us
- Nokta ve Kanguru iBook – https://itunes.apple.com/search?term=dot+and+the+kangaroo& entity=ebook&country=us
Kurumsal İş Ortağı Akışı
Apple, onaylı iş ortaklarına indirilebilir veritabanı için hazır düz dosyalar biçiminde tüm ürünlerinin eksiksiz bir veri dökümünü sağlar. Kurumsal İş Ortağı Akışı'na erişim hakkınız varsa, herhangi bir ürünün Apple kimliği bu veri kümesinde bulunabilir.
Kurumsal İş Ortağı Akışı'nın birçok kullanıcısı, ürün satışlarında komisyonların kazanılmasına izin veren Bağlı Kuruluş Programı'nın üyeleridir. SKStoreProductViewController
Bağlı Kuruluş Kimliklerini desteklemez (yazma sırasında).
Doğrudan Ürün Bağlantıları
Bir ürünün Apple Kimliği, iTunes Preview URL bağlantısından çıkarılabilir.
Herhangi bir iTunes ürün bağlantısında (uygulamalar, müzik veya kitaplar için) URL'nin ile id
başlayan bölümünü bulun ve aşağıdaki numarayı kullanın.
Örneğin, iBooks'un doğrudan bağlantısı şudur:
http://itunes.apple.com/us/app/ibooks/id364709193?mt=8
ve Apple kimliği 364709193. MWC2012 uygulaması için benzer şekilde, doğrudan bağlantı şu şekildedir:
http://itunes.apple.com/us/app/mwc-2012-unofficial/id496963922?mt=8
ve Apple kimliği 496963922.
Uygulama İçi Satın Alma Barındırılan İçerik
Uygulama içi satın almalarınız indirilebilir içeriklerden (kitaplar veya diğer medya, oyun düzeyi resim ve yapılandırma veya diğer büyük dosyalar gibi) oluşuyorsa, bu dosyalar web sunucunuzda barındırılıyordu ve uygulamaların satın alma sonrasında bunları güvenli bir şekilde indirmek için kod içermesi gerekiyordu. iOS 6'dan başlayarak, Apple dosyalarınızı kendi sunucularında barındıracak ve ayrı bir sunucu gereksinimini ortadan kaldıracaktır. Bu özellik yalnızca Tüketilebilir Olmayan ürünlerde kullanılabilir (Tüketilebilir veya Abonelikler için kullanılamaz). Apple'ın barındırma hizmetini kullanmanın avantajları şunlardır:
- Barındırma ve bant genişliği maliyetlerinden tasarruf edin.
- Muhtemelen şu anda kullandığınız sunucu konaktan daha ölçeklenebilir.
- Yazmak için daha az kod, çünkü herhangi bir sunucu tarafı işleme oluşturmak zorunda değilsiniz.
- Arka planda indirme sizin için uygulanır.
Not: iOS Simülatörü'nde barındırılan uygulama içi satın alma içeriğinin test edilmesi desteklenmez, bu nedenle gerçek bir cihazla test etmeniz gerekir.
Barındırılan İçerik Temelleri
iOS 6'den önce, bir ürün sağlamanın iki yolu vardı (Xamarin'in Uygulama İçi Satın Alma belgelerinde daha ayrıntılı olarak açıklanmıştır):
- Yerleşik Ürünler – Satın alma yoluyla 'kilidi açılmış' ancak uygulamada yerleşik olarak bulunan özellikler (kod veya ekli kaynak olarak). Kilitsiz fotoğraf filtreleri veya oyun içi güç yükseltmeleri yerleşik ürünlere örnek olarak verilebilir.
- Sunucu Tarafından Teslim Edilen Ürünler – Satın aldıktan sonra uygulamanın, çalıştırdığınız bir sunucudan içerik indirmesi gerekir. Bu içerik satın alma sırasında indirilir, cihazda depolanır ve ardından ürünü sağlamanın bir parçası olarak işlenir. Örnek olarak kitaplar, dergi sorunları veya arka plan resmi ve yapılandırma dosyalarından oluşan oyun düzeyleri verilebilir.
iOS 6'da Apple, sunucu tarafından teslim edilen ürünlerin bir çeşitlemesi sunar: içerik dosyalarınızı kendi sunucularında barındırırlar. Bu, ayrı bir sunucu çalıştırmanız gerekmediğinden ve Store Kit daha önce kendiniz yazmanız gereken arka plan indirme işlevselliği sağladığından, sunucu teslimli ürünler oluşturmayı çok daha basit hale getirir. Apple'ın barındırma özelliğinden yararlanmak için yeni uygulama içi satın alma ürünleri için içerik barındırmayı etkinleştirin ve Store Kit kodunuzu ondan yararlanacak şekilde değiştirin. Ürün içerik dosyaları daha sonra Xcode kullanılarak oluşturulur ve gözden geçirilip yayınlanması için Apple'ın sunucularına yüklenir.
App Store'un barındırılan içerikle uygulama içi satın alma sağlamak için kullanılması için aşağıdaki kurulum ve yapılandırma gerekir:
- iTunes Connect – Sizin adınıza toplanan fonları havale edebilmeleri için bankacılık ve vergi bilgilerinizi Apple'a sağlamış olmanız gerekir . Ardından ürünleri satacak şekilde yapılandırabilir ve satın almayı test etmek için korumalı alan kullanıcı hesapları ayarlayabilirsiniz. Ayrıca, Apple ile barındırmak istediğiniz tüketilemez ürünler için Barındırılan İçerik'i de yapılandırmanız gerekir.
- iOS Sağlama Portalı – Uygulama içi satın almayı destekleyen tüm uygulamalar için yaptığınız gibi Paket Tanımlayıcısı oluşturma ve uygulamanız için App Store erişimini etkinleştirme.
- Mağaza Seti : Ürünleri görüntülemek, ürün satın almak ve işlemleri geri yüklemek için uygulamanıza kod ekleme. iOS 6 Store Kit'te, ilerleme güncelleştirmeleriyle birlikte ürün içeriğinizin arka planda indirilmesi de yönetilir.
- Özel kod : Müşteriler tarafından yapılan satın almaları izlemek ve satın aldıkları ürün veya hizmetleri sağlamak için. Apple tarafından barındırılan içeriği almak için gibi
SKDownload
yeni iOS 6 Store Kit sınıflarını kullanın.
Aşağıdaki bölümlerde, bu makalenin örnek kodunu kullanarak paketi oluşturma ve yükleme aşamasından satın alma ve indirme işlemini yönetmeye kadar barındırılan içeriğin nasıl uygulanıp uygulanamaya devam ettiği açıklanmaktadır.
Örnek Kod
HostedNonConsumables örnek projesi (StoreKitiOS6.zip) barındırılan içeriği kullanır. Uygulama, içeriği Apple'ın sunucularında barındırılan iki "kitap bölümü" sunmaktadır. İçerik bir metin dosyası ve resimden oluşur, ancak gerçek bir uygulamada çok daha karmaşık içerik kullanılabilir.
Uygulama, satın alma öncesinde, sırasında ve sonrasında şöyle görünür:
Metin dosyası ve görüntüsü indirilir ve uygulamanın Belgeler dizinine kopyalanır. Uygulama depolama için kullanılabilen farklı dizinler hakkında daha fazla bilgi için dosya sistemi belgelerine bakın.
iTunes Connect
Apple'ın içerik barındırma özelliğini kullanacak yeni ürünler oluştururken, Tüketilemez ürün türünü seçtiğinizden emin olun. Diğer ürün türleri içerik barındırmayı desteklemez. Ayrıca, sattığınız mevcut ürünler için içerik barındırmayı etkinleştirmemelisiniz; yalnızca yeni ürünler için içerik barındırmayı açmalısınız.
Bir Ürün Kimliği girin. Bu kimlik daha sonra bu ürün için içerik oluşturduğunuzda gerekli olacaktır.
İçerik barındırma, Ayrıntılar bölümünde ayarlanır. Uygulama içi satın alma işlemi canlı olarak başlamadan önce, iptal etmek istiyorsanız (bazı test içeriği yüklemiş olsanız bile) Apple ile İçerik Barındır onay kutusunun işaretini kaldırın. Ancak uygulama içi satın alma işlemi tamamlandıktan sonra içerik barındırma kaldırılamaz.
Barındırma içeriğini açtıktan sonra ürün Karşıya Yükleme Bekleniyor durumunu girer ve şu iletiyi gösterir:
İçerik paketi Xcode ile oluşturulup Arşiv aracı kullanılarak karşıya yüklenmelidir. İçerik paketleri oluşturma yönergeleri, oluşturma sonraki bölümünde verilmiştir. PKG Dosyaları.
Oluşturma. PKG Dosyaları
Apple'a yüklediğiniz içerik dosyalarının aşağıdaki kısıtlamaları karşılaması gerekir:
- Boyutu 2 GB'ı aşamaz.
- Yürütülebilir kod (veya içeriğin dışına işaret eden symlink'ler) içeremez.
- Düzgün biçimlendirilmeli (.plist dosyası dahil) ve .pkg dosya uzantısına sahip olmalıdır. Xcode kullanarak bu yönergeleri izlerseniz bu işlem otomatik olarak yapılır.
Bu kısıtlamaları karşıladıkları sürece birçok farklı dosya ve dosya türü ekleyebilirsiniz. İçerik, uygulamanıza teslim edilmeden önce sıkıştırılır ve kodunuz uygulamaya erişmeden önce Store Kit tarafından sıkıştırılır.
bir içerik paketi karşıya yüklendikten sonra daha yeni içerikle değiştirilebilir. Yeni içerik normal süreç aracılığıyla karşıya yüklenip gözden geçirilmeli/onaylanmalıdır. ContentVersion
Güncelleştirilmiş içerik paketlerindeki alanı artırarak daha yeni olduğunu belirtin.
Xcode Uygulama İçi Satın Alma İçeriği projeleri
Uygulama içi satın alma ürünleri için içerik paketleri oluşturmak için şu anda Xcode gerekir. OBJECTIVE-C KODLAMA gerekmez; Xcode, bu paketler için yalnızca dosyalarınızı ve bir plist'i içeren yeni bir proje türüne sahiptir.
Örnek uygulamamızda satışa hazır kitap bölümleri vardır; her bölüm içerik paketinde aşağıdakiler bulunur:
- bir metin dosyası ve
- bölümü temsil eden bir resim.
Menüden Dosya Yeni Proje'yi seçip Uygulama İçi Satın Alma İçeriği'ni seçerek başlayın:>
Paket Tanımlayıcısı'nın bu ürün için iTunes Connect'e girdiğiniz Ürün Kimliği ile eşleşmesi için Ürün Adı ve Şirket Tanımlayıcısı girin.
Artık boş bir Uygulama İçi Satın Alma İçeriği projeniz olacak. Sağ tıklayıp Dosya Ekle... veya bunları Proje Gezgini'ne sürükleyebilirsiniz. ContentVersion'ın doğru olduğundan emin olun (1.0'da başlamalıdır, ancak daha sonra içeriğinizi güncelleştirmeyi seçerseniz, artırmayı unutmayın).
Bu ekran görüntüsünde, projede yer alan içerik dosyaları ve ana pencerede görünür olan plist girdileri ile Xcode gösterilmektedir:
Tüm içerik dosyalarınızı ekledikten sonra bu projeyi kaydedebilir ve daha sonra yeniden düzenleyebilir veya karşıya yükleme işlemine başlayabilirsiniz.
Yükleme. PKG Dosyaları
İçerik paketlerini karşıya yüklemenin en kolay yolu Xcode Arşiv Aracı'dır. Başlamak için menüden Ürün > Arşivi'ni seçin:
İçerik paketi daha sonra aşağıda gösterildiği gibi arşivde görünür. Arşiv türü ve simgesi bu satırın Bir Uygulama İçi Satın Alma İçerik Arşivi olduğunu gösterir. İçerik paketimizi karşıya yüklemeyi gerçekleştirmeden hata olup olmadığını denetlemek için Doğrula... seçeneğine tıklayın.
iTunes Connect kimlik bilgilerinizle oturum açın:
Bu içeriği ilişkilendirmek için doğru uygulamayı ve uygulama içi satın almayı seçin:
Şu ekran görüntüsüne benzer bir ileti görmeniz gerekir:
Şimdi benzer bir işlemden geçin, ancak Dağıt... seçeneğine tıklanırken içerik gerçekten karşıya yüklenir.
İçeriği karşıya yüklemek için ilk seçeneği belirtin:
Yeniden oturum açın:
İçeriği karşıya yüklemek için doğru uygulamayı ve uygulama içi satın alma kaydını seçin:
Dosyalarınız karşıya yüklenirken bekleyin:
Karşıya yükleme tamamlandığında, içeriğin App Store'a gönderildiğini belirten bir ileti görüntülenir.
İşlem tamamlandıktan sonra, iTunes Connect'teki ürün sayfasına döndüğünüzde paket ayrıntıları gösterilir ve Göndermeye Hazır durumda olur. Ürün bu durumdayken korumalı alan ortamında teste başlayabilirsiniz. Korumalı alanda test için ürünü 'göndermeniz' gerekmez.
Arşivi karşıya yükleme ile güncelleştirilen iTunes Connect durumu arasında biraz zaman alabilir (örneğin, birkaç dakika). Ürünü ayrı olarak gözden geçirmek üzere gönderebilir veya bir uygulama ikili dosyasıyla birlikte gönderebilirsiniz. Yalnızca Apple içeriği resmi olarak onayladıktan sonra uygulamanızda satın almak üzere üretim App Store'da kullanılabilir olacaktır.
PKG Dosya Biçimi
Barındırılan içerik paketi oluşturmak ve karşıya yüklemek için Xcode ve Arşiv Aracı'nı kullanmak, paketin içeriğini hiçbir zaman göremeyeceğiniz anlamına gelir. Örnek uygulama için oluşturulan paketlerdeki dosyalar ve dizinler, kökte plist dosyası ve contents alt dizinindeki ürün dosyalarıyla birlikte aşağıdaki ekran görüntüsüne benzer:
Cihazdaki paketteki dosyaları ayıklamak için bu bilgileri anlamanız gerekeceği için paketin dizin yapısına (özellikle alt dizindeki Contents
dosyaların konumuna) dikkat edin.
Paket İçeriğini Güncelleştirme
İçerik onaylandıktan sonra güncelleştirme yordamı:
- Xcode'da Uygulama İçi Satın Alma İçeriği projesini düzenleyin.
- Sürüm numarasını artır.
- Yeniden iTunes Connect'e yükleyin. Sonraki satın almacılar otomatik olarak en son sürümü alır ancak eski sürüme sahip olan kullanıcılar herhangi bir bildirim almaz.
- Uygulamanız, kullanıcıları bilgilendirmek ve içeriğin daha yeni bir sürümünü almaya teşvik etmekle sorumludur. Uygulamanın, Store Kit'in Geri Yükleme özelliğini kullanarak yeni sürümü indiren bir işlev de oluşturması gerekir.
- Daha yeni bir sürümün mevcut olup olmadığını belirlemek için, uygulamanızda SKProducts'u (ürün fiyatlarını almak için kullanılan işlem gibi) getirmek ve ContentVersion özelliğini karşılaştırmak için bir özellik oluşturabilirsiniz.
Satın Alma Genel Bakış
Bu bölümü okumadan önce mevcut Uygulama İçi Satın Alma belgelerini gözden geçirin.
Barındırılan içeriğe sahip bir ürün satın alınıp indirildiğinde gerçekleşen olayların dizisi bu diyagramda gösterilmiştir:
- Barındırılan İçerik etkin olarak iTunes Connect'te yeni ürünler oluşturulabilir. Gerçek içerik Xcode'da ayrı olarak oluşturulur (dosyaları bir klasöre sürüklemek gibi) ve ardından Arşivlenip iTunes'a yüklenir (kodlama gerekmez). Her ürün daha sonra onay için gönderilir ve ardından satın alınabilir hale gelir. Örnek kodda bu Ürün Kimlikleri sabit kodlanmıştır, ancak kullanılabilir ürün listesini iTunes Connect'e yeni ürün ve içerik gönderdiğinizde güncelleştirilebilmesi için uzak bir sunucuda depolarsanız Apple ile içerik barındırmak daha esnektir.
- Kullanıcı bir ürün satın aldığı zaman, işlem için ödeme kuyruğuna bir işlem yerleştirilir.
- Store Kit, satın alma isteğini işlenmek üzere iTunes sunucularına iletir.
- İşlem iTunes sunucularında tamamlanır (örn. müşteri ücretlendirilir) ve indirilebilir olup olmadığı (ve varsa dosya boyutu ve diğer meta veriler) dahil olmak üzere ürün bilgileri ekli olarak uygulamaya bir makbuz döndürülür.
- Kodunuz ürünün indirilebilir olup olmadığını denetlemeli ve indirilip indirilmediğini denetlemeli ve bu durumda ödeme kuyruğuna da yerleştirilmiş bir içerik indirme isteğinde bulunmalıdır. Store Kit bu isteği iTunes sunucularına gönderir.
- Sunucu, içerik dosyasını Store Kit'e döndürür. Bu, indirme ilerleme durumunu ve kalan süre tahminlerini kodunuz için geri çağırma sağlar.
- İşlem tamamlandıktan sonra bildirim alır ve Önbellek klasöründe bir dosya konumu iletirsiniz.
- Kodunuz dosyaları kopyalayıp doğrulamalı, ürünün satın alındığını hatırlamanız gereken herhangi bir durumu kaydetmelidir. Yeni dosyalarda yedekleme bayrağını doğru ayarlamak için bu fırsatı kullanın (ipucu: bir sunucudan geliyorsa ve kullanıcı tarafından hiçbir zaman düzenlenmiyorsa, kullanıcı gelecekte apple sunucularından her zaman alabildiği için bunları yedeklemeyi atlamalısınız).
- FinishTransaction çağrısı. Bu adım, işlemi Ödeme Kuyruğu'ndan kaldırdıkça ÖNEMLİ'dir. İçeriği Önbellek dizininden kopyalayana kadar FinishTransaction'ı ÇAĞıRMAMANIZ da önemlidir. FinishTransaction'ı çağırdığınızda, Önbelleğe alınan dosyalar hızla temizlenebilir.
Barındırılan İçerik Satın Alma Uygulama
Aşağıdaki bilgiler, Uygulama İçi Satın Almalar belgelerinin tamamıyla birlikte okunmalıdır. Bu belgedeki bilgiler, barındırılan içerikle önceki uygulama arasındaki farklara odaklanır.
Sınıflar
iOS 6'da barındırılan içeriği desteklemek için aşağıdaki sınıflar eklendi veya değiştirildi:
- SKDownload : Devam eden bir indirmeyi temsil eden yeni sınıf. API, ürün başına birden fazla ürüne izin verir, ancak başlangıçta yalnızca bir tane uygulanmıştır.
- SKProduct – Yeni özellikler eklendi:
Downloadable
,ContentVersion
,ContentLengths
dizi. - SKPaymentTransaction – Yeni özellik eklendi:
Downloads
, bu üründe indirilebilir barındırılanSKDownload
içerik varsa bir nesne koleksiyonu içerir. - SKPaymentQueue – Yeni yöntem eklendi:
StartDownloads
. Barındırılan içeriklerini getirmek için nesnelerleSKDownload
bu yöntemi çağır. İndirme işlemi arka planda gerçekleşebilir. - SKPaymentTransactionObserver – Yeni yöntem:
UpdateDownloads
. Store Kit, geçerli indirme işlemleriyle ilgili ilerleme bilgileriyle birlikte bu yöntemi çağırır.
Yeni SKDownload
sınıfın ayrıntıları:
- İlerleme : Kullanıcıya tamamlanma yüzdesi göstergesi görüntülemek için kullanabileceğiniz 0-1 arasında bir değerdir. İndirmenin tamamlanıp tamamlanmadığını algılamak için İlerleme == 1'i KULLANMAYIN, Durum == Tamamlandı'yı denetleyin.
- TimeRemaining : Kalan indirme süresini saniye olarak tahmin etme . -1, tahmini hesaplamaya devam ediyor demektir.
- Durum – Etkin, Bekliyor, Tamamlandı, Başarısız, Duraklatıldı, İptal Edildi.
- ContentURL : dizininde
Cache
içeriğin diske yerleştirildiği dosya konumu. YALNIZCA indirme tamamlandıktan sonra doldurulur. - Error – Durum Başarısız olduğunda bu özelliği denetleyin.
Örnek koddaki sınıflar arasındaki etkileşimler bu diyagramda gösterilir (barındırılan içerik satın alma işlemlerine özgü kod yeşil renkte gösterilir):
Bu sınıfların kullanıldığı örnek kod, bu bölümün geri kalanında gösterilir:
CustomPaymentObserver (SKPaymentTransactionObserver)
İndirilebilir içeriği denetlemek için mevcut UpdatedTransactions
geçersiz kılmayı değiştirin ve gerekirse çağırın StartDownloads
:
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;
}
}
}
Yeni geçersiz kılınan yöntem UpdatedDownloads
aşağıda gösterilmiştir. Store Kit, içinde UpdatedTransactions
tetiklendikten sonra StartDownloads
bu yöntemi çağırır. Bu yöntem, size indirme ilerlemesini sağlamak için belirsiz aralıklarla birden çok kez çağrılır ve indirme işlemi tamamlandığında yeniden çağrılır. Yöntemin bir nesne dizisini SKDownload
kabul olduğuna dikkat edin, böylece her yöntem çağrısı size kuyruktaki birden çok indirmenin durumunu sağlayabilir. Aşağıdaki uygulamada gösterildiği gibi indirme durumları her seferinde denetlenir ve uygun eylemler gerçekleştirilen durumlar.
// 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)
Bu sınıf, her indirme başarıyla tamamlandıktan sonra çağrılan yeni bir yöntem SaveDownload
içerir.
Barındırılan içerik başarıyla indirildi ve dizine sıkıştırması Cache
açıldı. öğesinin yapısı. PKG dosyası, tüm dosyaların bir Contents
alt dizine kaydedilmesini gerektirir, bu nedenle aşağıdaki kod dosyaları alt dizinin içinden Contents
ayıklar.
Kod, içerik paketindeki tüm dosyalar arasında yinelenir ve bu Documents
dosyaları için adlı ProductIdentifier
bir alt klasörde dizinine kopyalar. Son olarak, ödeme kuyruğundan işlemi kaldırmak için çağrısı yapan öğesini çağırırCompleteTransaction
FinishTransaction
.
// 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'
}
Çağrıldığında FinishTransaction
, indirilen dosyaların artık dizinde olması garanti edilmez Cache
. çağrılmadan FinishTransaction
önce tüm dosyalar kopyalanmalıdır.
Diğer Konular
Yukarıdaki örnek kod, barındırılan içerik satın alma işleminin oldukça basit bir uygulamasını gösterir. Dikkate almanız gereken bazı ek noktalar vardır:
Güncelleştirilmiş İçeriği Algılama
Barındırılan içerik paketlerinizi güncelleştirmek mümkün olsa da, Store Kit bu güncelleştirmeleri ürünü indirmiş ve satın almış kullanıcılara göndermek için herhangi bir mekanizma sağlamaz. Bu işlevi uygulamak için kodunuz yeni SKProduct.ContentVersion
özelliği (ise SKProduct
Downloadable
) düzenli olarak denetleyebilir ve değerin artırılıp artırılamadığını algılayabilir. Alternatif olarak bir anında iletme bildirim sistemi oluşturabilirsiniz.
Güncelleştirilmiş İçerik Sürümlerini Yükleme
Yukarıdaki örnek kod, dosya zaten varsa dosya kopyalamayı atlar. İndirilen içeriğin daha yeni sürümlerini desteklemek istiyorsanız bu iyi bir fikir DEĞİlDİr.
Alternatif olarak, içeriği sürüm için adlı bir klasöre kopyalayın ve geçerli sürümü (örneğin NSUserDefaults
, tamamlanmış satın alma kayıtlarını depoladığınız veya depoladığınız her yerde) takip edin.
İşlemleri Geri Yükleme
Çağrıldığında SKPaymentQueue.DefaultQueue.RestoreCompletedTransactions
, Store Kit kullanıcı için önceki tüm işlemleri döndürür. Çok sayıda öğe satın almışlarsa veya her satın almada büyük içerik paketleri varsa, her şey aynı anda indirilmeleri için kuyruğa alınırken geri yükleme çok fazla ağ trafiğine neden olabilir.
Bir ürünün satın alınıp alınmadığını ilişkili içerik paketinin gerçek indirmesinden ayrı olarak izlemeyi göz önünde bulundurun.
İndirmeleri duraklatma, yeniden başlatma ve iptal etme
Örnek kod bu özelliği göstermese de, barındırılan içerik indirmelerini duraklatmak ve yeniden başlatmak mümkündür. , SKPaymentQueue.DefaultQueue
ResumeDownloads
ve CancelDownloads
yöntemlerine PauseDownloads
sahiptir.
Kod, indirme Finished
öncesinde ödeme kuyruğunda çağrılırsa FinishTransaction
indirme otomatik olarak iptal edilir.
İndirilen İçerikte SKIP-Backup Bayrağını Ayarlama
Apple'ın iCloud Yedekleme Yönergeleri, bir sunucudan kolayca geri yüklenen kullanıcı dışı içeriğin yedeklenmemesi gerektiğini önerir (çünkü gereksiz yere iCloud depolama alanını kullanır). Yedekleme özniteliğini ayarlama hakkında daha fazla bilgi için dosya sistemi belgelerine bakın.
Özet
Bu makale, iOS6'da Store Kit'in iki yeni özelliğini kullanıma sunulmuştur: iTunes'u ve diğer içerikleri uygulamanızın içinden satın almak ve kendi uygulama içi satın almalarınızı barındırmak için Apple'ın sunucusunu kullanmak. Bu giriş, Mağaza Seti işlevselliğinin tam kapsamı için mevcut Uygulama İçi Satın Alma belgeleriyle birlikte okunmalıdır.