你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> 應用內購(In

應用內購(In

編輯:IOS開發基礎

本文檔為您解答應用內購相關的常見問題。

配置(Configuration)

1.我必須上傳一個二進制文件來測試應用內購麼?

不,測試應用內購(In-App Purchase,以下簡稱IAP)不需要上傳二進制文件。

注:在應用程序准備好接受審核批准之前,不要將開發中的二進制文件上傳到iTunes Connect。如果二進制文件出現在iTunes Connect中,但功能不完整,那麼App Review將審查二進制文件,很有可能會拒絕該文件。在iTunes Connect中,如果App Review拒絕了最新的二進制文件,測試IAP將會失敗。一個變通方案是上傳沒有IAP功能的二進制文件通過App Review。一旦二進制文件通過審核,就可以測試IAP功能。

2.我如何啟用通配符App ID來支持IAP?

參考如下步驟:

  • 在Xcode或者iTunes Connect中識別確認app當前的Bundle ID。更多信息請查看About Bundle IDs。

  • 參考Registering App IDs中的步驟1-6和8-10,更新通配符App ID以支持IAP。

3.支持自動訂閱商品的最低版本是什麼?

  • iOS系統:iOS 4.2 

  • OS系統:OS X 10.9

4.何時使用SKPaymentQueue的restoreCompletedTransactions方法?

在如下兩種情況下,你只能使用SKPaymentQueue的restoreCompletedTransactions方法來恢復自動訂閱或者非消耗性商品:

1.在消費者擁有的其他設備上安裝它們。

2.在相關應用程序被刪除的設備上重新安裝它們。

5.在iTunes Connect中,可以為每個應用程序創建多少個IAP商品ID?

閱讀Configuring a Product可以找到答案。

錯誤信息(Error Messages)

1.您的賬戶信息已經更改(Your account info has changed)

由於你在設備上登陸App Store時使用的是測試賬戶,所以你會收到一條“您的賬戶信息已經更改”的消息。一旦使用這個賬戶登陸商品購買環境,沙盒(Sandbox)就會檢測到你的用戶賬戶不可用。要解決這個問題,需要在設備的設置應用程序中退出當前賬號,在iTunes Connect中創建一個新的測試賬戶,當Store Kit提示確認從你的應用內購買時,使用這個賬戶。

2.不能連接到iTunes Store(Cannot connect to iTunes Store)

 “Cannot connect to iTunes Store”的問題或許是由以下的一個或多個原因引起:

  • 沙盒不可達。

  • 你的應用程序沒有bundle version(CFBundleVersion)。更多信息請查看Setting the Version Number and Build String

  • 你的應用程序是在模擬器上運行,不支持應用內購買。

  • 你嘗試購買的商品不在出售之列。更多信息請查看Query the App Store for product information before presenting your app’s store UI

3.該Apple ID尚未在iTunes Store中使用(This Apple ID has not yet been used in this iTunes Store)

收到該條消息意味著你使用測試賬號登陸了iTunes Store。要解決這個問題,你需要在設備中的設置應用程序中退出當前賬號,在iTunes Connect中創建一個新的測試賬戶,當Store Kit提示確認從你的應用程序內購買時,使用這個賬戶。

4.你已經購買該商品,點擊確定再次免費下載該商品(You've already purchased this. Tap OK to download it again for free)

該條消息並不是一個通知而非錯誤提示。它的意思是你正在購買一個已經購買過的非消耗性商品。你無需為已經購買過的非消耗性商品付費。

5.你已購買該應用內購買商品,但尚未下載(You've already purchased this In-App Purchase but it hasn't been downloaded)

收到該條消息是因為你在應用程序中沒有調用SKPaymentQueue的finishTransaction:method方法。調用finishTransaction:方法可以從購買隊列中刪除一個事務。

6.該賬戶不是測試賬戶,請在沙盒環境中創建一個新賬戶(This is not a test user account. Please create a new account in the Sandbox environment)

當Store Kit提示確認購買時,你使用iTunes賬戶登錄,會收到這個信息。要解決這個問題,需要在設備中的設置應用程序中退出App Store,當Store Kit提示確認從你的應用程序內購買時,使用沙盒測試用戶賬戶。

本土化(Localization)

在iTunes Connect中我的應用內購已本土化為多種語言。但是,localizedDescription和localizedTitle屬性總是返回英文信息,即便測試設備的語言不是英文。

localizedDescription和localizedTitle返回的本土化信息語言是基於當前iTunes Store的語言而不是當前設備所設置的語言。比如,在iTunes Connect中你的應用內購針對德語進行了本地化,但你使用英文測試賬戶登錄,那麼localizedDescription和localizedTitle都將返回英文信息。如果需要返回德語信息,在你的測試設備上使用德語測試賬號登陸。

Receipt

1.我應該使用哪個URL來驗證Receipt?(What url should I use to verify my receipt?)

  • 在沙盒中測試應用程序以及應用程序處於審核狀態時,使用沙盒URL:https://sandbox.itunes.apple.com/verifyReceipt 

  • 當應用程序通過審核上架App Store時,使用商品URL:https://buy.itunes.apple.com/verifyReceipt 

注:確保將應用程序用於驗證的receipt發送至App Store。

一定要先使用商品URL核實你的receipt;如果收到一個21007狀態碼,那接下來要使用沙盒URl驗證。按照這個步驟,當app處於測試狀態或在sandbox環境下進行審核,或者上架App Store,可讓你避免在URL之間切換。

21007狀態碼表示該receipt是一個sandbox receipt,但已被發送至商品服務進行驗證。0狀態碼表示已正確驗證receipt。

2.當前receipt 無效或者與當前用戶ID不匹配(Current receipt invalid or mismatched ds person id)

收到這條消息是因為你的應用程序中缺少OS X App Store receipt。更多關於如何從應用程序中獲取receipt的消息請查看:Receipt Validation Programming Guide

3.Receipt驗證失敗,狀態為<一串數字>(Verifying my receipt fails with a status of

可能原因:

  • 在iOS app中,你沒有使用base64編碼對回單數據進行編碼。

  • 發布到App Store的對象不是JSON格式。Listing 1是自動訂閱的正確JSON對象:

Listing 1  驗證自動訂閱的有效receipt示例:

{
    "receipt-data" : "...",
        "password" : "..."
}

4.應用審核不能查看已購買成功的目錄

如果應用程序在購買成功後通過App Store驗證receipt,請檢查你的應用程序是否使用了正確的App Store URL來驗證receipt。更多信息請查看What url should I use to verify my receipt? 

5.在購買成功後,我的應用程序使用paymentQueue:updatedTransactions:驗證receipt。但是,返回的receipt中包含了一個空in_app數組而不是預期的產品。

空in_app數組表示Store Kit沒有為當前用戶記錄任何交易。或許是沒有更新應用程序receipt,若果是這樣,應用程序可以通知用戶尚未出現receipt,是否要進行刷新。如果用戶同意,應用程序會使用SKReceiptRefreshRequest類來更新receipt。此時,如果Store Kit已經記錄用戶購買信息,那應用程序receipt將會顯示在in_app數組中。更多關於如何更新receipt的信息請查看:Refreshing the App Receipt

訂閱(Subscriptions)

1.使用Xcode 6不能將托管內容上傳至iTunes Connect

這是目前存在的一個bug。為了解決這個問題,請使用Application Loader上傳包含托管內同的包。步驟如下:

  • 在Xcode Archives Organizer中,選擇包含托管內容的文檔。

  • 單擊Export

  • 在彈出的對話框中,選擇Export as an Installer Package.

  • 單擊Next開始生成你的包,然後選擇Export保存你的包(一個文件擴展名為.pkg的文件)。

  • 使用Application Loader上傳這個包,更多信息請查看:Using Application Loader

下圖演示為托管內容生成一個包,圖中的數字對應上述步驟。 

708.png

2.如何從自動更新訂閱服務更改為IAP商品?

參考如下步驟:

  • 在iTunes Connect中關掉Clear for Sale標志,從而移除當前自動更新訂閱的商品/服務,然後將其從代碼中移除。此時將會禁止商品/服務的自動更新,並會給用戶發一封郵件。記住,你必須為用戶提供已付費的商品/服務,直到訂閱終止。此外,之前自動更新訂閱的商品/服務都是可恢復的。例如,如果你的用戶在4月1號購買了一個月的訂閱,但是這個訂閱將在4月19日下線,那你也必須提供已購買的內容直到5月1日。

  • 創建一個新的IAP商品類型,然後更新二進制文件來使用它。更多信息請查看:Creating In-App Purchase Products

注:需要該步驟是因為一旦應用內購類型被創建,則不能再更改。

3.通過App Store中驗證應用程序receipt,然後分析是否需要向你的用戶提供相關功能。更多信息請查看:Receipt Validation Programming Guide

3.如何知道用戶是否將其聯系信息分享給我?

使用receipt中的Subscription Expiration Date (expires_date)字段來檢測用戶是否將自己的信息共享給你。

假設你決定為購買一個月訂閱服務並願意分享個人信息的顧客提供7天免費試用,Store Kit將為你提供一個receipt,這個receipt的expires_date存儲了7天再加1個月的長度。在首次購買後,你的訂閱服務將於1月零7天後到期,此後的每個月都將為其開啟自動更新。

4.即使在前台運行,我的應用程序也未收到任何自動更新提醒

如果你的應用程序有一個穩定的交易觀察者,那麼在打開或者從後台恢復時,它都將接收到所有自動更新提醒。更多信息請查看:Add a transaction queue observer at application launch

疑難解答(Troubleshooting)
1.為什麼我的產品標識符在invalidProductIdentifiers數組中被退返?

或許由於以下一個或多個原因:

1.沒有使用Explicit App ID。

2.在iTunes Connect中,蘋果拒絕了你最新向iTunes Connect提交的二進制碼。

3.你沒有清除iTunes Connect中在售的IAP產品。

4.沒有使用與正確的App ID相關聯的Provisioning Profile注冊你的應用程序。

5.可能修改了商品,但是這些修改沒有在所有App Store的服務器中生效。

6.未能完成所有財政需求表。更多信息請查看:Contracts, Tax, and Banking

7.你的商品由蘋果托管上,內容尚未上傳至iTunes Connect上。更多關於上傳托管內容的信息請查看:Hosting Non-Consumable Products with Apple

注:商品內容上傳到iTunes Connect上之前,你的商品標識符將是無效的。如果內容還沒准備好,那麼可在iTunes Connect中禁用Hosting Content with Apple功能便可以解決這個問題。一旦內容准備好可以上傳了,就可重新啟用該功能。

8.在iTunes Connect中指定的商品標示符與應用程序中SKProductsRequest對象所使用的標示符不匹配。更多關於商品標示符的信息請查看:Technical Q&A, QA1329, 'In-App Purchase Product Identifiers'。

2.調用payment queue的restoreCompletedTransactions 方法不能恢復app中的任何商品

可能由以下一個或多個原因引起:

1.你的商品有尚未完成的交易。如果付費隊列中有未完成的交易,則恢復進程不返回商品。更多關於結束交易的信息請查看:Finish the transaction。

2.你沒有任何先前購買過的非消耗類、自動更新訂閱以及免費訂閱的商品。

3.你試圖恢復的非更新訂閱或消耗類商品是不可恢復的類型。restoreCompletedTransactions方法只能恢復非消耗類商品、自動更新訂閱以及免費訂閱的商品。

注:在無可恢復產品的情況下,Store Kit不會調用paymentQueue:updatedTransactions:方法。

4.應用程序的編譯版本號(CFBundleVersion) 沒有按照開發指南創建版本號。CFBundleVersion是一個由點號隔開的三個無符號整數組成的字符串。更多信息請查看:Setting the Version Number and Build String。

參考:

App Distribution Guide

iTunes Connect Developer Guide

In-App Purchase Programming Guide

Receipt Validation Programming Guide

Getting Started with In-App Purchase on iOS and OS X

Technical Note TN2387 In-App Purchase Best Practices

In-App Purchase Configuration Guide for iTunes Connect

Technical Q&A, QA1329, 'In-App Purchase Product Identifiers'

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved