十、<iOS IAP>內購測試常見問題

1 、在iTunes Connect中,每個應用程序可以創建多少格內置購買產品 ID ?

閱讀 In-App Purchase Configuration Guide for iTunes Connect 中的Configuring a Product來尋找答案。

2、我的iOS應用程序當前是使用了一個 wildcard App ID 的 Provisioning Profile 來簽名的。我應該如何讓我的 App ID 支持內置購買?

閱讀 App Distribution Guide 的 https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/MaintainingProfiles/MaintainingProfiles.html#//apple_ref/doc/uid/TP40012582-CH30-SW4 來學習如何讓你的 App ID 支持內置購買。

3、不在 iTunes Connect 中找不到 Manage In-App Purchase 按鈕?

由于以下原因,你或許沒有 Manage In-App Purchase 按鈕:

  • 你的 iTunes Connect 賬號不是一個管理員或技術人員賬號。
  • 你的團隊代理人還沒有同意最新的 iOS 或 Mac 開發者計劃許可協議(
  • 你沒有最新支付的應用合同。

4、我必須上傳一個二進制文件來測試內置購買嗎?

不需要,測試內置購買不要求上傳一個二進制文件。

重要提示:不要把開發二進制上傳到iTunes Connect,直到應用程序審核通過。如果iTunes Connect里有二進制文件,并且它的功能還不完善,應用審核時會審核該二進制并且很可能會駁回該開發二進制文件。 如果你或應用審核駁回你在iTunes Connect中最近的二進制文件,測試內置購買將失敗。這種情況的變通辦法是上傳一個沒有內置購買功能的二進制文件,這樣就可以被審核通過。當二進制文件審核通過以后,恢復帶有內置購買功能的二進制測試。

5.我該如何解決“你的賬戶信息已經改變”錯誤?

你之所以得到這個錯誤,是因為你在測試內置購買時用測試用戶賬號登陸了設備。 解決該錯誤的辦法是,在設備的設置那登出應用商店,然后在 iTunes Connect 重新創建一個新的測試用戶賬號并用它測試內置購買。

6、為什么我的產品標識符在 invalidProductIdentifiers 數組中返回?

這可能是以下原因造成的:

  • 你沒有完成所有的財務要求。
  • 你沒有使用一個 explicit App ID.
  • 你沒有使用跟你的 explicit App ID 相關聯的 Provisioning Profile .
  • 你在代碼中沒有使用正確的產品標識符。 關于產品標識符,請看Technical Q&A, QA1329, 'In-App Purchase Product Identifiers' 以獲得更多信息。
  • 你沒有在iTunes Connect中出售你的內置購買產品。
  • 你或許已經修改了你的產品,但是這些更改并不是適用于所有的應用商店服務器。
  • 你應用審查被駁回,你在 iTunes Connect 中最新的二進制文件。

7、我該如何解決“你已經完成了該內置購買,但是它還沒被下載。”錯誤信息?

這是因為你沒有在你的應用程序里調用 SKPaymentQueue 的 finishTransaction: 方法。 調用該方法把一個交易從支付列表里移除。

8、我該如何解決"你已經成功購買。點擊 OK 再次免費下載。"錯誤信息?

該信息是一個提醒,而不是一個錯誤。它說你正在嘗試購買一個你已經購買過的非消耗產品。再次購買已經購買過的非消耗產品并不需要再次支付。調用支付隊列的 restoreCompletedTransactions 方法不能恢復應用程序中的任何產品。

9、調用交易隊列的 restoreCompletedTransactions 方法可能不會重新購買。

這可能是以下原因造成的:

  • 你以前并沒有購買任何非消耗,自動更新訂閱,或免費訂閱的產品。
  • 你正在嘗試恢復不能恢復的非自動更新訂閱或者消耗產品。
  • restoreCompletedTransactions 方法只能恢復非消耗,自動更新訂閱和免費訂閱產品。
注意:當沒有可恢復的產品時,Store Kit 不會調用 paymentQueue:updatedTransactions: 方法。

10、什么時候我應該恢復我的內置購買產品?

你只能在以下兩種情況下才可以恢復你的自動更新訂閱或者非消耗產品:

  • 為了在用戶的額外設備上下載它們時。
  • 當它們的相關應用程序被刪除時,為了可以在設備上重新下載它們。

11、我該如何解決"這不是一個測試用戶賬號。請在沙盒環境重新創建一個新賬號。"錯誤信息?

該錯誤是因為當 Store Kit 請求你確認購買時,你輸入了你的iTunes 用戶賬號。解決辦法是在你的設備的設置那登出你的應用商店,當 Store Kit 要求你確認購買時輸入測試用戶賬號。

12.我該如何取回 receipt 數據?

首先使用 appStoreReceiptURL 方法定位你的應用 receipt ,然后如列表2中所示讀取整個 receipt 數據。(僅適用于 iOS 7, OS X10.7 以后版本)
Listing 2 Retrieving the receipt data

NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
 // Test whether the receipt is present at the above URL 
if(![[NSFileManager defaultManager] fileExistsAtPath:[receiptURL path]])
{ 
NSData *receiptData = [NSData dataWithContentsOfURL:receiptURL];
 }
注意:對于支持 iOS6 或早先版本的應用程序,使用 SKPaymentTransaction 對象的 transactionReceipt 特性來取回你的 receipt 數據,如列表3.

Listing 3 Retrieving the receipt data in iOS 6 and earlier

-(void)completeTransaction:(SKPaymentTransaction *)transaction{ NSData *receiptData = [transaction transactionReceipt];}

13、驗證 receipt 失敗,狀態是一個<數字字符串>(iOS)

這是由以下原因造成的:

  • 你沒有在你的 iOS 應用程序中用 base64加密你的 receipt 數據。
  • 發送到應用商店的對象不是 JSON 格式。請看列表4,它是用于自動更新訂閱的一個正確的 JSON 對象。
    Listing 4 valid sample receipt for verifying an auto-renewable subscription
{ 
"receipt-data" : "...", "password" : "..."
}

14、我給我的應用程序添加了內購功能。我該如何測試它 (iOS)?

要想測試內購是否正確實現,請遵循以下步驟:

  • 通過 Ad Hoc 發布方法下載你的初始應用程序。
  • 還是通過 Ad Hoc 發布方法下載你的更新版應用程序,用來驗證它覆蓋 (overwrites) 了初始應用程序。
  • 嘗試使用更新版本,試著從它那內購產品。

15.驗證我的 receipt,我應該使用什么 url ?

當你在沙盒你測試你的應用程序,以及當你的應用程序正在審核中時,使用沙盒 url: https://sandbox.itunes.apple.com/verifyReceipt

一旦你的應用程序在應用商店成功出售,使用生產 url: https://buy.itunes.apple.com/verifyReceipt

16、我該如何驗證我的自動更新訂閱 receipt(iOS)?

首先總是用生產 URL(production URL) 來驗證你的自動更新訂閱 receipt;如果你收到一個21007狀態碼,則使用沙盒URL來驗證。按照這種方法來驗證可以確保,當你在沙盒中測試或審核時,或者在應用商店出售時,你不需要不得不在應用程序切換URL。

注意:21007狀態碼表明該 receipt 是一個沙盒 receipt ,但是它被發送到生產服務 (production service) 以用于驗證。

17、我該如何解決 "Current receipt invalid or mismatched ds person id" 錯誤消息 (OS X)?

我的內置購買已經在 iTunes Connect 里本地化了很多語言。但是 localizedDescription 和 localizedTitle 特性總是以英語返回信息,即使我的測試設備默認語言不是英語。
localizedDescription 和 localizedTitle 根據當前的 iTunes 商店設置的默認語言來返回本地化信息,而不是根據當前的設備語言設置。 舉例,如果你的內置購買在 iTunes Connect里本地化了德語,但是你用英語測試用戶賬號登陸了,那么 localizedDescription 和 localizedTitle 會返回英語信息。 要想 localizedDescription 和 localizedTitle 返回德語信息,請用一個德語測試用戶賬號登陸你的測試設備。

參考
App Distribution Guide
iTunes Connect Developer Guide
In-App Purchase Programming Guide
Receipt Validation Programming Guide
In-App Purchase Configuration Guide for iTunes Connect
Technical Q&A, QA1329, 'In-App Purchase Product Identifiers'

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容