2015-05-27 16 views
6

Tôi muốn biết liệu và khi nhận được ứng dụng được tự động làm mới khi đăng ký tự động gia hạn IAP tự động gia hạn. Các tài liệu ngụ ý rằng việc tiếp nhận ứng dụng được cập nhật khi mua hàng được thực hiện (đổi mới?) Nhưng tôi không nhìn thấy hành vi này trong sandbox IAP:Tự động gia hạn đăng ký và biên nhận ứng dụng

Thông tin về sản phẩm tiêu thụ và đăng ký không đổi mới được thêm vào biên lai khi họ được thanh toán và vẫn ở trong biên nhận cho đến khi bạn hoàn tất giao dịch. Sau khi bạn hoàn tất giao dịch , thông tin này sẽ bị xóa vào lần tiếp theo biên nhận là được cập nhật — ví dụ: trong lần tiếp theo người dùng thực hiện mua hàng.

Thông tin về tất cả các loại giao dịch mua khác được thêm vào biên nhận khi chúng được thanh toán và vẫn còn trong biên nhận vô thời hạn.

Bên cạnh đó, tình trạng tài liệu:

Sau một thuê bao được gia hạn thành công, Cửa hàng Kit cho biết thêm một giao dịch cho công cuộc đổi mới vào hàng đợi giao dịch. Ứng dụng của bạn kiểm tra hàng đợi giao dịch khi khởi chạy và xử lý gia hạn theo cách tương tự như bất kỳ giao dịch nào khác. Lưu ý rằng nếu ứng dụng của bạn đã chạy khi đăng ký gia hạn, người quan sát giao dịch không được gọi; ứng dụng của bạn tìm hiểu về việc gia hạn vào lần tiếp theo được khởi chạy.

Với tôi điều này ngụ ý rằng tôi có thể theo dõi SKPaymentQueue để hoàn tất giao dịch, sau đó kiểm tra biên nhận ứng dụng để tìm hồ sơ về chúng. Nhưng tôi không thấy điều này trong thực tế trong sandbox IAP. Trong hộp cát IAP, tôi có đăng ký tự động gia hạn tự động gia hạn (6 lần cho mỗi người dùng/mua, hành vi hộp cát thông thường) nhưng để khám phá việc gia hạn, tôi cần làm mới biên lai ứng dụng.

Giả sử tất cả điều này đều hoạt động theo cách tôi mong đợi, có các phương pháp hay nhất để thử nghiệm trong hộp cát IAP để kích hoạt hành vi này không?

+0

Bạn có đang xác thực trực tiếp biên nhận hoặc dựa vào mã của bên thứ ba (đục) không? Tôi có một vài ứng dụng với tự động gia hạn đăng ký và không có bất kỳ vấn đề nào với các mục hiển thị trong biên lai. Tất nhiên, tôi xác nhận biên nhận tại mỗi lần khởi chạy ứng dụng ... –

+0

Tôi đang giải mã phía máy khách nhận bằng cách sử dụng RMStore và xác nhận hợp lệ phía máy chủ với Apple. Điều đó dường như có hiệu quả. – TomSwift

+0

Ok, tuyệt. Tôi không biết chi tiết về RMStore; bạn đang đi bộ toàn bộ danh sách các mục hay nó làm điều đó cho bạn? Bạn nên có mục đăng ký cho mỗi lần gia hạn. –

Trả lời

4

Là một mặt lưu ý, tài liệu không phù hợp trên các loại mua và kiên trì của họ trong việc tiếp nhận - xem my answer to this question.

Biên lai được cập nhật trên server-side khi tính năng tự động canh tân ve qua - bạn có thể xác nhận điều này bằng cách kiểm tra cuộc gọi đến phương thức validateReceipt phía máy chủ.

CẬP NHẬT: Đã thấy rằng bạn đang sử dụng RMStore, tôi đã chế nhạo thứ gì đó để tôi có thể xem xét hành vi.

Dường như với tôi, biên nhận phía máy khách đang được cập nhật. Kịch bản của tôi: đăng ký AR một tháng (để gia hạn 5 phút trong hộp cát). Tôi đặt một số mã chẩn đoán trong viewDidLoad:

RMAppReceipt *receipt = [RMAppReceipt bundleReceipt]; 
if (receipt != nil) { 
    NSDateFormatter* localDateTime = [[NSDateFormatter alloc] init]; 
    [localDateTime setTimeZone:[NSTimeZone timeZoneWithName:@"PST"]]; 
    [localDateTime setDateFormat:@"yyyy.MM.dd HH:mm:ss zzz"]; 

    for (RMAppReceiptIAP* purchase in receipt.inAppPurchases) { 
     NSString* cancellationDate = nil; 
     if (purchase.cancellationDate) { 
      cancellationDate = [localDateTime stringFromDate:purchase.cancellationDate]; 
     } 
     NSLog(@"Transaction: %@: product %@, original purchase date: %@, expiration date: %@, cancellation date: %@", 
       purchase.originalTransactionIdentifier, 
       purchase.productIdentifier, 
       [localDateTime stringFromDate:purchase.originalPurchaseDate], 
       [localDateTime stringFromDate:purchase.subscriptionExpirationDate], 
       cancellationDate); 
    } 

Tôi cũng đặt một breakpoint trong RMStore của paymentQueue:updatedTransactions: để xem nếu hàng đợi được cập nhật với mua AR tiếp theo.

Sau đó tôi đã mua một tháng sản phẩm thử nghiệm của mình, đã xác minh giao dịch và sau đó thoát khỏi ứng dụng.

Khi tiếp tục yêu cầu lại ứng dụng trong khoảng thời gian 5 phút, sau đó tôi thấy điểm ngắt trong phương thức SKPaymentTransactionObserver đang được thực hiện với transactionSate SKPaymentTransactionStatePurchased. Nhật ký hiển thị các lần mua bổ sung liên tiếp (chỉ phiên bản cuối cùng được hiển thị):

2015-05-27 14:27:32.828 StoreKitSandbox[5803:1054853] Transaction: 1000000156919353: product com.foo.StoreKitSandbox.1_month_autorenew_foo, original purchase date: 2015.05.27 14:02:59 GMT-7, expiration date: 2015.05.27 14:07:58 GMT-7, cancellation date: (null) 
2015-05-27 14:27:33.350 StoreKitSandbox[5803:1054853] Transaction: 1000000156919353: product com.foo.StoreKitSandbox.1_month_autorenew_foo, original purchase date: 2015.05.27 14:06:02 GMT-7, expiration date: 2015.05.27 14:12:58 GMT-7, cancellation date: (null) 
2015-05-27 14:27:33.774 StoreKitSandbox[5803:1054853] Transaction: 1000000156919353: product com.foo.StoreKitSandbox.1_month_autorenew_foo, original purchase date: 2015.05.27 14:11:07 GMT-7, expiration date: 2015.05.27 14:17:58 GMT-7, cancellation date: (null) 
2015-05-27 14:27:34.174 StoreKitSandbox[5803:1054853] Transaction: 1000000156919353: product com.foo.StoreKitSandbox.1_month_autorenew_foo, original purchase date: 2015.05.27 14:16:00 GMT-7, expiration date: 2015.05.27 14:22:58 GMT-7, cancellation date: (null) 
2015-05-27 14:27:34.637 StoreKitSandbox[5803:1054853] Transaction: 1000000156919353: product com.foo.StoreKitSandbox.1_month_autorenew_foo, original purchase date: 2015.05.27 14:21:04 GMT-7, expiration date: 2015.05.27 14:27:58 GMT-7, cancellation date: (null) 
2015-05-27 14:27:35.069 StoreKitSandbox[5803:1054853] Transaction: 1000000156919353: product com.foo.StoreKitSandbox.1_month_autorenew_foo, original purchase date: 2015.05.27 14:26:15 GMT-7, expiration date: 2015.05.27 14:32:58 GMT-7, cancellation date: (null) 

Bạn có thể repro bằng cách sử dụng phương pháp chẩn đoán này không?

+0

Tôi hiểu rằng biên nhận được cập nhật phía máy chủ - nếu tôi làm mới thủ công biên nhận (nhắc người dùng), nó cũng được cập nhật trong ứng dụng. Tôi muốn biết liệu biên nhận gói ứng dụng có được cập nhật tự động gia hạn không (vì đây là lần mua hàng đầu tiên). Đối với việc giám sát các giao dịch đã hoàn thành, điều này là thông qua addTransactionObserver: tới SKPaymentQueue mặc định. Việc gọi restoreCompletedTransactions hoặc refreshReceipt chỉ nên được thực hiện để đáp ứng với đầu vào của người dùng - mà tôi muốn tránh. – TomSwift

+0

Cảm ơn mọi nỗ lực - Tôi thực sự đánh giá cao nó. Thấp và nhìn, nó bắt đầu làm việc cho tôi quá. Tôi không biết liệu tôi có nên viết phấn cho sandbox gremlins hay gremlins vào cuối tôi không - tôi đã khá mệt mỏi đêm qua khi nó không hoạt động. – TomSwift

Các vấn đề liên quan