Bir test kullanıcısı için iOS uygulama içi satın alma korumalı alanından satın alma işlemlerini temizleme


116

İOS uygulama içi satın alma korumalı alanını sıfırlama ve / veya temizleme konusunda herhangi bir fikri olan var mı?

Korumalı alanda test ettiğim bir uygulamam var ve her bir şey satın aldığımda yeni bir test kullanıcısı oluşturmak zorunda kalmadan yeni satın alımları test etmek istiyorum.

Bunu yapmazsam, (tabii ki) her zaman uygulamamın satın al düğmesine tıkladığımda uygulama içi satın alma öğesinin zaten satın alındığına dair bir mesaj alıyorum.

Yanıtlar:


75

IMO Sarf malzemeleri olmayan malzemelerin test edilmesini katlanılabilir hale getirmek için yapabileceğiniz 3 şey vardır:

  1. Bir e-postayla ilişkilendirilmiş birçok test hesabınız olabilir. Örneğin Gmail, bir adres için takma adlar oluşturmak üzere e-postaya bir "artı" dizesi eklemenize izin verir : yani tester+01@gmail.comve tester+02@gmail.comikisi de gerçekten gidin tester@gmail.com. Muhtemelen diğer e-posta barındırıcıları da aynı şeyi yapar. Bir test hesabı oluşturduğunuzda şunları tanıtmanız gerekir: ad, soyad, e-posta adresi, şifre, gizli soru, gizli cevap, doğum tarihi ve iTunes mağazası ülkesi. Sen ötürü tam olarak (şifre dahil) aynı verileri koyabilirsiniz tester+01@gmail.comve tester+02@gmail.comve iki test hesapları olacaktır. Son olarak, tester@gmail.comgelen kutunuzda , her iki test hesabını da onaylamak için Apple'dan iki doğrulama e-postası alacaksınız.

  2. Ürün kimliği @ "Extra_Levels" olan bir sarf malzemeniz olmadığını varsayalım. Tüm yöntemlerde (requestProduct, PurchProduct, ...) @ "Extra_Levels" yazmak yerine, sadece yazın PRODUCT_ID1ve bazı başlık dosyalarına #define PRODUCT_ID1 @"Extra_Levels"(noktalı virgül olmadan!) Koyun, ardından önişlemci PRODUCT_ID1'i arayacak ve onu @ "Extra_Levels" yerine koyacaktır. Daha sonra @ "Extra_Levels_01" adlı yeni bir sarf malzemesi oluşturmak ve #define'ı değiştirmek, tüm test kullanıcılarınız için satın alma işlemlerini sıfırlamak kadar iyi olacaktır.

  3. Appmatics'in belirttiği gibi, tüketilebilir olmayan bir IAP satın aldığınızda, bazı hatalardan kurtulmak için önce bir sarf malzemesi IAP kullanarak (böylece test kullanıcısı gerektiği kadar satın alma işlemi yapabilir) kodunuzun doğru davranışını test edebilirsiniz. Tabii ki, bundan sonra kodu gerçek sarf malzemesi olmayan IAP ile de test etmelisiniz.


17
Vay canına, bu süper gizli gmail özelliğini hiç bilmiyordum. Ne kadar kullanışlı!
bobobobo

4
Test kullanıcısı e-postanızı gerçekten doğrulamanıza gerek olmadığını öğrendim. 123@123.com adresini belirlediğiniz parola ile girebilirsiniz (parolayı hala korumalı alan modunda kullanacaksınız) ve yine de çalışır. Dün gece test ettim.
2014

3
E-posta takma adları için ARTI İŞARETİ numarası tek başına bir GMail işi değildir. E-posta sunucuları arasında onlarca yıl öncesine dayanan çok eski bir gelenektir. Ancak hiçbir zaman herhangi bir e-posta özelliğine dahil edilmedi. Bu nedenle, bu özelliği anladığından emin olmak için kendi e-posta sunucunuzla test edin.
Basil Bourque

2
Test hesabı için Uygulama İçi satın alımları temizlemenin imkansız olduğunu düşünürdüm;) Viva Apple :)
Bartłomiej Semańczyk

12
+e-posta adresleri artık Apple Kimliklerine kaydolmak için kullanılamaz.
pkamb

32

Bildiğim kadarıyla bunu yapamazsın. Korumalı alan arka ucu, satın alındıktan sonra gerçek bir hesap gibi çalışır (böylece geri yüklemeyi test edebilirsiniz). Geliştirme işleminizin çoğunu mağaza malzemeleri dışarıda bırakarak yapmalısınız ve daha sonra gerçekten test etmeye başladığınızda, birkaç test hesabı oluşturmayı beklemeniz yeterlidir.


3
Samvermette ile aynı fikirde olun, bu testin gerçek bir mağazaya çok yakın çalıştığı için delidir. Korumalı alanda satın alımları temizlemenin en azından bir yolu olmalıdır. Test amacıyla aynı kullanıcı için birkaç satın alma yapmak için ayrıca bir Sarf Malzemesi türü ekledim.
appsmatics

4
@samvermette Tek fark SKPaymentTransactionStateRestored, yerine uygulama mağazasından geri dönmeniz SKPaymentTransactionStatePurchased. Burada gerçek para kullanmadığınız için, tüm niyet ve amaçlar için, testin gittiği sürece SKPaymentTransactionStateRestored% 100 eşdeğerdir SKPaymentTransactionStatePurchased. Uygulamanızın durumunu "satın alınmamış" olarak sıfırlamak gerçekten size kalmış (ilgili anahtar zinciri girişini veya "kullanıcı X'i satın aldı" nı önbelleğe almak için kullandığınız her şeyi silin)
bobobobo

10

2 uygulama içi satın alma öğem var. Üretim için 1. ve diğeri test için. "temizlemem" gerektiğinde, uygulama içi öğeyi silip yeni bir tane oluşturuyorum (itunes connect'te 15 saniye ve koddaki ürün kimliğini değiştirmek için 1 saniye)

"yeni kullanıcıyı" test etmem gerekmiyorsa, üretimi uygulama öğesinde kullanırım.


Evet, ürünün yeni bir kopyasını oluşturmak ve koddaki ürün adını değiştirmek (muhtemelen # tanımlamış olmak) gerçekçi testler için açık ara en kolay çözüm gibi görünüyor.
JulianSymes

7

Teknik olarak buna ihtiyacın yok.

Eğer alırsanız SKPaymentTransactionStateRestored, uygulama mağazasının kullanıcıyı doğrulayıp satın alma işlemine izin vermesine% 100 eşdeğerdir. Şunun gibi bir anahtarım var:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
  for( SKPaymentTransaction *purch in transactions )
  {
    switch( purch.transactionState )
    {
      case SKPaymentTransactionStateRestored:
        info( "PURCHASE RESTORE" ) ;
        // fall thru
      case SKPaymentTransactionStatePurchased:
        [[SKPaymentQueue defaultQueue] finishTransaction:purch];
        // Do regular changes to app state for this purchase,
        // register in keychain, etc.
        break ;

       //.. other cases
     }
  }
}

Uygulamanızın mantığına sahip olma / satın alma işlemini geri alma sorusu basittir: satın alımları anahtar zincirinde önbelleğe alıyorsanız, anahtarlığınızı silin. Bunu başka bir şekilde yapıyorsanız, kullanıcı daha önce hiç satın almamış gibi davranmak için yerel uygulamanızın durumunu değiştirin. Diyalog satın alma talebi hala tamamen aynı, tek fark, YES'e bastığınızda SKPaymentTransactionStateRestoredyerine size veriyor SKPaymentTransactionStatePurchased.


5

Uygulamanızı silmek ve yeniden yüklemek, korumalı alan testi için de çalışır. Açıkçası uygulamaya bağlı, ancak şu anda yalnızca kayıt sırasında satın alınan abonelik tabanlı bir uygulamayı test ediyorum, bu nedenle en kolay çözüm oldu.


3

SimStoreKit'e göz atın . Bu, "iPhone Simulator'daki mağaza kullanıcı arayüzlerini test etmek için iPhone StoreKit'in simüle edilmiş bir sürümüdür, hatta cihazda Connect'te IAP kurmak zorunda kalmadan."

SimStoreKit, satın alımları kullanıcı varsayılanlarında anahtarın altında saklar ILSimSKTransactions. Dolayısıyla, tüm satın alma işlemlerini temizlemek için şunları yapabilirsiniz:

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"ILSimSKTransactions"]

Simülatörde, uygulamanızı kaldırıp tekrar yükleyebilirsiniz.

Korumalı alanla test etmeden önce uygulamamın mağaza cephesinde hata ayıklamak için SimStoreKit'i başarıyla kullandım. Bu kütüphanenin güzelliği, gerçek StoreKit çerçevesi ile aynı sınıf adlarını kullanacak şekilde ayarlanabilmesidir (yapmadan #define ILSimReplaceRealStoreKit 1önce yaparak #include <ILSimStoreKit.h>).

StoreKit'e erişmem gereken kaynak dosyalara şu başlık dosyasını ekliyorum:

#import <TargetConditionals.h>

#if TARGET_IPHONE_SIMULATOR
    #define kILSimAllowSimulatedStoreKit 1
    #define ILSimReplaceRealStoreKit 1
    #import <ILSimStoreKit.h>
#else
    #import <StoreKit/StoreKit.h>
#endif

Bu, simülatörde çalıştırdığımda SimStoreKit'i ve cihazda çalıştığımda gerçek StoreKit'i kullanma etkisine sahiptir.


bu işe yaramadı. Yapı hatası alıyorum. Zip içindeki tüm dosyaları projeme kopyaladım ve tüm #import <StoreKit / StoreKit.h> 'yi #define ILSimReplaceRealStoreKit 1 #import "ILSimStoreKit.h" ile değiştirdim
Jay Q.

ILSimSK ile başlayan dosyalara ihtiyacınız var. Diğer şeyler demo uygulaması içindir. Belki de tam olarak aldığınız hatayı içeren bir soru göndermelisiniz. "Bir yapı hatası alıyorum" pek bir şey söylemiyor.
Emile Cormier

-1

alternatif olarak birden fazla test kullanıcısı çözümü oluşturmak için iTunes connect'te uygulama satın alımlarında birden fazla test oluşturabilir, ardından bir kullanıcı hesabını değiştirmenize gerek kalmaz.


1
Olumsuz oyların nedenleri şunlardır: 1. Uygulama kullanıcısı oturum açma ve çapraz cihaz / platform içerik kullanılabilirliği ile çok sayıda senaryo gerektirebilecek belirli Uygulama İçi satın alma çözümünü test etmeye çalışıyor olabileceğiniz için bu iyi bir çözüm değildir. 2. Birden çok test satın alımı oluşturmak, birden çok test hesabı oluşturmak kadar (daha doğrusu) zahmetlidir. 3. Ayrıca, yanıt çok iyi biçimlendirilmemiş.
mickeymoon

-1

Yenilerini tamamlamak yerine satın alma işlemlerini geri yükleyerek aynı test hesabını kullanmaya devam edin. Sonuçta, ister yeni bir satın alma işlemi başlatın ister eskisini geri yükleyin, UYGULAMANIZ aynı şeyi yapacaktır (en azından başlangıçta, belki de tamamlandığında kullanıcı arayüzü farklı bir şekilde güncellenecektir). Apple, bu farklı durumlarda işleri farklı şekilde ele alan kişilerdir - bunun için endişelenmeyin.

Teslimat mantığınızı, test için bu yöntemin uygulaması içindeki SKPaymentTransactionStateRestored vakasına yerleştirin:

- (void)paymentQueue:(SKPaymentQueue *)queue
 updatedTransactions:(NSArray *)transactions;

Ardından, bu teslimat mantığını SKPaymentTransactionStatePurchased servis talebine koyduğunuzdan emin olun.

Sonunda, çoğumuz değişen derecelerde obsesif-kompulsif olduğumuz için, yeni bir hesapla son bir test yapın (mutlak kesinlik için ikinci bir hesap yapmak çok da önemli değil).

Unutulmaması gereken son şey: elmanın konumunu düşünün. Geliştiricilerin IAP'yi kapsamlı bir şekilde test etmek için onlarca veya yüzlerce hesap oluşturarak zaman kaybetmeleri gereken bir sorun olsaydı, sorunu çözmüş olacaklardı. Sorun yok.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.