Xóa các giao dịch mua từ hộp cát mua hàng trong ứng dụng iOS cho người dùng thử nghiệm


116

Có ai có bất kỳ ý tưởng nào về cách đặt lại và / hoặc xóa hộp cát mua hàng trong ứng dụng iOS không?

Tôi có một ứng dụng mà tôi đang thử nghiệm với hộp cát và tôi muốn thử nghiệm các giao dịch mua mới mà không cần phải tạo người dùng thử nghiệm mới mỗi khi mua thứ gì đó.

Nếu tôi không làm điều này, thì tôi (tất nhiên) luôn nhận được thông báo rằng mặt hàng mua trong ứng dụng đã được mua khi tôi nhấp vào nút mua trong ứng dụng của mình.

Câu trả lời:


75

IMO có 3 điều bạn có thể làm để kiểm tra các vật tư không tiêu hao:

  1. Bạn có thể có nhiều tài khoản thử nghiệm được liên kết với một email. Ví dụ: Gmail cho phép bạn thêm chuỗi "dấu cộng" vào email để tạo bí danh cho địa chỉ : vì vậy tester+01@gmail.comtester+02@gmail.comcả hai thực sự chỉ cần truy cập tester@gmail.com. Có thể các máy chủ email khác cũng làm như vậy. Khi bạn tạo một tài khoản thử nghiệm, bạn cần giới thiệu: họ, tên, địa chỉ email, mật khẩu, câu hỏi bí mật, câu trả lời bí mật, ngày sinh và quốc gia lưu trữ iTunes. Bạn có thể đặt chính xác cùng một dữ liệu (bao gồm cả mật khẩu) cho tester+01@gmail.comtester+02@gmail.comvà bạn sẽ có hai tài khoản thử nghiệm. Cuối cùng, trong tester@gmail.comhộp thư đến của bạn, bạn sẽ nhận được hai email xác minh từ Apple để xác nhận cả hai tài khoản thử nghiệm.

  2. Giả sử bạn có sản phẩm không thể tiêu thụ với ID sản phẩm @ "Extra_Levels". Thay vì viết @ "Extra_Levels" trong tất cả các phương thức (requestProduct, buyProduct, ...), chỉ cần viết PRODUCT_ID1và đặt một số tệp tiêu đề #define PRODUCT_ID1 @"Extra_Levels"(không có dấu chấm phẩy!), Sau đó bộ xử lý sẽ tìm kiếm PRODUCT_ID1 và thay thế nó cho @ "Extra_Levels". Sau đó, tạo một không thể tiêu thụ mới có tên @ "Extra_Levels_01" và thay đổi #define sẽ tốt như đặt lại giao dịch mua cho tất cả người dùng thử nghiệm của bạn.

  3. Như các ứng dụng đã chỉ ra, bạn có thể kiểm tra hành vi chính xác của mã khi bạn mua IAP không tiêu hao bằng cách sử dụng IAP tiêu hao trước tiên (để người dùng thử nghiệm có thể thực hiện nhiều lần mua nếu cần) để loại bỏ một số lỗi. Tất nhiên, bạn cũng nên kiểm tra mã với IAP thực không tiêu hao sau đó.


17
Chà, tôi chưa bao giờ biết đến tính năng gmail siêu bí mật này. Thật hữu ích!
bobobobo

4
Tôi vừa phát hiện ra rằng bạn không thực sự phải xác minh email người dùng thử nghiệm của mình. bạn chỉ cần đặt 123@123.com với mật khẩu chỉ định (bạn vẫn sẽ sử dụng mật khẩu ở chế độ hộp cát) và nó vẫn hoạt động. Tôi vừa mới kiểm tra tối qua.
sooon

3
Thủ thuật PLUS SIGN cho bí danh email không chỉ là một thứ trong GMail. Đó là một truyền thống rất lâu đời giữa các máy chủ email, có từ nhiều thập kỷ trước. Nhưng nó không bao giờ được kết hợp vào bất kỳ thông số kỹ thuật email nào. Vì vậy, hãy kiểm tra nó với máy chủ email cụ thể của bạn để chắc chắn rằng nó hiểu rõ về tính năng này.
Basil Bourque

2
Tôi would'n nghĩ rằng không thể để xóa mua In-App cho tài khoản thử nghiệm;) Viva của Apple :)
Bartłomiej Semańczyk

12
+Địa chỉ email không còn có thể được sử dụng để đăng ký Apple ID.
pkamb

32

Bạn không thể làm điều này, theo như tôi biết. Phần mềm phụ trợ hộp cát hoạt động giống như một tài khoản thực - khi nó được mua, nó sẽ được mua (và do đó bạn có thể kiểm tra khôi phục). Bạn nên thực hiện hầu hết quá trình phát triển của mình với những thứ trong cửa hàng được lấp lánh và sau đó khi bạn thử nghiệm thực tế, chỉ cần tạo một vài tài khoản thử nghiệm.


3
Đồng ý với samvermette, đây là điều khó hiểu khi thử nghiệm hoạt động rất chặt chẽ với một cửa hàng thực. Ít nhất phải có một cách để xóa các giao dịch mua trong hộp cát. Để thực hiện nhiều giao dịch mua cho cùng một người dùng với mục đích thử nghiệm, tôi cũng đã thêm một loại Tiêu dùng.
ứng dụng từ

4
@samvermette Sự khác biệt duy nhất là bạn lấy SKPaymentTransactionStateRestoredlại từ cửa hàng ứng dụng, thay vì SKPaymentTransactionStatePurchased. Vì bạn không sử dụng tiền thật ở đây, cho tất cả các mục đích và mục đích, SKPaymentTransactionStateRestoredtương đương 100% SKPaymentTransactionStatePurchasedso với thử nghiệm. Thiết lập lại trạng thái ứng dụng của bạn để "unpurchased" thực sự là tùy thuộc vào bạn (chỉ cần xóa các mục nhập liên quan keychain hoặc bất cứ điều gì bạn đang sử dụng để bộ nhớ cache mà "dùng đã mua X")
bobobobo

9

Tôi có 2 mặt hàng mua trong ứng dụng. 1 cho sản xuất. và cái còn lại để thử nghiệm. khi tôi cần "xóa", tôi xóa mục trong ứng dụng và tạo mục mới (15 giây trong itunes kết nối và 1 giây để thay đổi id sản phẩm trong mã)

nếu tôi không cần kiểm tra "người dùng mới", tôi sử dụng mục sản xuất trong ứng dụng.


Có, tạo một bản sao mới của sản phẩm và thay đổi tên sản phẩm trong mã (có thể là đã # xác định nó) cho đến nay dường như là giải pháp dễ dàng nhất để thử nghiệm thực tế.
JulianSymes

7

Về mặt kỹ thuật, bạn không cần điều đó.

Nếu bạn nhận được SKPaymentTransactionStateRestored, nó tương đương 100% với việc cửa hàng ứng dụng xác minh người dùng và cho phép anh ta mua hàng. Tôi có một công tắc như:

- (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
     }
  }
}

Câu hỏi về việc logic ứng dụng của bạn / rút lại giao dịch mua rất đơn giản: nếu bạn đang lưu trữ các giao dịch mua trong chuỗi khóa, hãy xóa chuỗi khóa của bạn. Nếu bạn đang làm theo cách khác, chỉ cần thay đổi trạng thái ứng dụng cục bộ của bạn để giả vờ như người dùng chưa từng mua nó trước đây. Hộp thoại yêu cầu mua hàng vẫn hoàn toàn giống nhau, chỉ khác là khi bạn bấm CÓ, nó sẽ cung cấp cho bạn SKPaymentTransactionStateRestoredthay vì SKPaymentTransactionStatePurchased.


5

Việc xóa ứng dụng của bạn và cài đặt lại cũng hoạt động để thử nghiệm hộp cát. Rõ ràng là phụ thuộc vào ứng dụng, nhưng tôi đang thử nghiệm một ứng dụng dựa trên đăng ký chỉ mua khi đăng ký vào lúc này nên đây là giải pháp dễ dàng nhất.


3

Kiểm tra SimStoreKit . Đó là "phiên bản mô phỏng của StoreKit của iPhone, để thử nghiệm giao diện người dùng cửa hàng trên iPhone Simulator hoặc thậm chí trên thiết bị mà không cần phải thiết lập IAP trong Connect."

SimStoreKit lưu trữ các giao dịch mua theo mặc định của người dùng dưới khóa ILSimSKTransactions. Vì vậy, để xóa tất cả các giao dịch mua, bạn có thể làm:

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

Trên trình mô phỏng, bạn có thể chỉ cần gỡ bỏ ứng dụng của mình và cài đặt lại.

Tôi đã sử dụng thành công SimStoreKit để gỡ lỗi mặt trước cửa hàng ứng dụng của mình trước khi thử nghiệm với hộp cát. Cái hay của thư viện này là nó có thể được thiết lập để sử dụng các tên lớp giống như khung StoreKit thực (bằng cách thực hiện #define ILSimReplaceRealStoreKit 1trước khi thực hiện #include <ILSimStoreKit.h>).

Trong các tệp nguồn mà tôi cần truy cập StoreKit, tôi bao gồm tệp tiêu đề này:

#import <TargetConditionals.h>

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

Điều này có ảnh hưởng đến việc sử dụng SimStoreKit khi tôi chạy trên trình mô phỏng và StoreKit thực khi tôi chạy trên thiết bị.


không thể làm việc này. Tôi đang gặp lỗi bản dựng. Tôi sao chép tất cả các file trong zip vào dự án của tôi và thay thế tất cả các #import <StoreKit / StoreKit.h> với #define ILSimReplaceRealStoreKit 1 #import "ILSimStoreKit.h"
Jay Q.

Bạn chỉ cần các tệp bắt đầu bằng ILSimSK. Những thứ khác dành cho ứng dụng demo. Có lẽ bạn nên đăng một câu hỏi với lỗi chính xác mà bạn đang gặp phải. "Tôi đang gặp lỗi xây dựng" không nói lên nhiều điều.
Emile Cormier

-1

Ngoài ra, để tạo nhiều giải pháp người dùng thử nghiệm, bạn có thể tạo nhiều thử nghiệm khi mua ứng dụng trong kết nối iTunes, sau đó bạn không cần thay đổi tài khoản người dùng.


1
Lý do cho lượt phản đối là: 1. Đây không phải là giải pháp tốt vì bạn có thể đang cố gắng thử nghiệm giải pháp mua Trong ứng dụng cụ thể có thể yêu cầu nhiều tình huống với đăng nhập của người dùng ứng dụng và tính khả dụng của nội dung trên nhiều thiết bị / nền tảng. 2. Việc tạo nhiều lần mua thử nghiệm cũng tẻ nhạt như tạo nhiều tài khoản thử nghiệm. 3. Ngoài ra, câu trả lời không được định dạng rất tốt.
mickeymoon

-1

Chỉ cần tiếp tục sử dụng cùng một tài khoản thử nghiệm, khôi phục giao dịch mua thay vì hoàn thành tài khoản mới. Rốt cuộc, cho dù bạn bắt đầu mua hàng mới hay khôi phục lại cái cũ, ỨNG DỤNG CỦA BẠN sẽ làm điều tương tự (ít nhất là ban đầu, có thể giao diện người dùng sẽ cập nhật khác khi hoàn thành). Apple là những người xử lý mọi thứ theo cách khác nhau trong những tình huống khác nhau - đừng lo lắng về điều đó.

Đặt logic phân phối của bạn trong trường hợp SKPaymentTransactionStateRestored trong việc triển khai phương pháp này để thử nghiệm:

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

Sau đó, hãy đảm bảo đặt logic phân phối đó vào trường hợp SKPaymentTransactionStatePurchased.

Cuối cùng, vì hầu hết chúng ta đều bị ám ảnh cưỡng chế ở các mức độ khác nhau, hãy thực hiện bài kiểm tra cuối cùng với một tài khoản mới (không phải là vấn đề lớn để thực hiện bài kiểm tra thứ hai để chắc chắn tuyệt đối).

Điều cuối cùng cần lưu ý: xem xét vị trí của quả táo. Nếu có vấn đề với việc các nhà phát triển phải lãng phí thời gian tạo hàng chục hoặc hàng trăm tài khoản để kiểm tra IAP kỹ lưỡng, thì họ đã giải quyết được vấn đề. Không có vấn đề gì cả.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.