1 胰耗、在iTunes Connect中祟剔,每個應(yīng)用程序可以創(chuàng)建多少格內(nèi)置購買產(chǎn)品 ID 隔躲?
閱讀 In-App Purchase Configuration Guide for iTunes Connect 中的Configuring a Product來尋找答案。
2物延、我的iOS應(yīng)用程序當(dāng)前是使用了一個 wildcard App ID 的 Provisioning Profile 來簽名的宣旱。我應(yīng)該如何讓我的 App ID 支持內(nèi)置購買?
閱讀 App Distribution Guide 的 https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/MaintainingProfiles/MaintainingProfiles.html#//apple_ref/doc/uid/TP40012582-CH30-SW4 來學(xué)習(xí)如何讓你的 App ID 支持內(nèi)置購買叛薯。
3响鹃、不在 iTunes Connect 中找不到 Manage In-App Purchase 按鈕?
由于以下原因案训,你或許沒有 Manage In-App Purchase 按鈕:
- 你的 iTunes Connect 賬號不是一個管理員或技術(shù)人員賬號。
- 你的團隊代理人還沒有同意最新的 iOS 或 Mac 開發(fā)者計劃許可協(xié)議(
- 你沒有最新支付的應(yīng)用合同粪糙。
4强霎、我必須上傳一個二進制文件來測試內(nèi)置購買嗎?
不需要蓉冈,測試內(nèi)置購買不要求上傳一個二進制文件城舞。
重要提示:不要把開發(fā)二進制上傳到iTunes Connect,直到應(yīng)用程序?qū)徍送ㄟ^寞酿。如果iTunes Connect里有二進制文件家夺,并且它的功能還不完善,應(yīng)用審核時會審核該二進制并且很可能會駁回該開發(fā)二進制文件伐弹。 如果你或應(yīng)用審核駁回你在iTunes Connect中最近的二進制文件拉馋,測試內(nèi)置購買將失敗。這種情況的變通辦法是上傳一個沒有內(nèi)置購買功能的二進制文件惨好,這樣就可以被審核通過煌茴。當(dāng)二進制文件審核通過以后,恢復(fù)帶有內(nèi)置購買功能的二進制測試日川。
5.我該如何解決“你的賬戶信息已經(jīng)改變”錯誤蔓腐?
你之所以得到這個錯誤,是因為你在測試內(nèi)置購買時用測試用戶賬號登陸了設(shè)備龄句。 解決該錯誤的辦法是回论,在設(shè)備的設(shè)置那登出應(yīng)用商店散罕,然后在 iTunes Connect 重新創(chuàng)建一個新的測試用戶賬號并用它測試內(nèi)置購買。
6傀蓉、為什么我的產(chǎn)品標(biāo)識符在 invalidProductIdentifiers 數(shù)組中返回欧漱?
這可能是以下原因造成的:
- 你沒有完成所有的財務(wù)要求。
- 你沒有使用一個 explicit App ID.
- 你沒有使用跟你的 explicit App ID 相關(guān)聯(lián)的 Provisioning Profile .
- 你在代碼中沒有使用正確的產(chǎn)品標(biāo)識符僚害。 關(guān)于產(chǎn)品標(biāo)識符硫椰,請看Technical Q&A, QA1329, 'In-App Purchase Product Identifiers' 以獲得更多信息。
- 你沒有在iTunes Connect中出售你的內(nèi)置購買產(chǎn)品萨蚕。
- 你或許已經(jīng)修改了你的產(chǎn)品靶草,但是這些更改并不是適用于所有的應(yīng)用商店服務(wù)器。
- 你應(yīng)用審查被駁回岳遥,你在 iTunes Connect 中最新的二進制文件奕翔。
7、我該如何解決“你已經(jīng)完成了該內(nèi)置購買浩蓉,但是它還沒被下載派继。”錯誤信息捻艳?
這是因為你沒有在你的應(yīng)用程序里調(diào)用 SKPaymentQueue 的 finishTransaction: 方法驾窟。 調(diào)用該方法把一個交易從支付列表里移除。
8认轨、我該如何解決"你已經(jīng)成功購買绅络。點擊 OK 再次免費下載。"錯誤信息嘁字?
該信息是一個提醒恩急,而不是一個錯誤。它說你正在嘗試購買一個你已經(jīng)購買過的非消耗產(chǎn)品纪蜒。再次購買已經(jīng)購買過的非消耗產(chǎn)品并不需要再次支付衷恭。調(diào)用支付隊列的 restoreCompletedTransactions 方法不能恢復(fù)應(yīng)用程序中的任何產(chǎn)品。
9纯续、調(diào)用交易隊列的 restoreCompletedTransactions 方法可能不會重新購買随珠。
這可能是以下原因造成的:
- 你以前并沒有購買任何非消耗,自動更新訂閱杆烁,或免費訂閱的產(chǎn)品牙丽。
- 你正在嘗試恢復(fù)不能恢復(fù)的非自動更新訂閱或者消耗產(chǎn)品。
- restoreCompletedTransactions 方法只能恢復(fù)非消耗兔魂,自動更新訂閱和免費訂閱產(chǎn)品烤芦。
注意:當(dāng)沒有可恢復(fù)的產(chǎn)品時,Store Kit 不會調(diào)用 paymentQueue:updatedTransactions: 方法析校。
10构罗、什么時候我應(yīng)該恢復(fù)我的內(nèi)置購買產(chǎn)品铜涉?
你只能在以下兩種情況下才可以恢復(fù)你的自動更新訂閱或者非消耗產(chǎn)品:
- 為了在用戶的額外設(shè)備上下載它們時。
- 當(dāng)它們的相關(guān)應(yīng)用程序被刪除時遂唧,為了可以在設(shè)備上重新下載它們芙代。
11、我該如何解決"這不是一個測試用戶賬號盖彭。請在沙盒環(huán)境重新創(chuàng)建一個新賬號纹烹。"錯誤信息?
該錯誤是因為當(dāng) Store Kit 請求你確認(rèn)購買時召边,你輸入了你的iTunes 用戶賬號聚唐。解決辦法是在你的設(shè)備的設(shè)置那登出你的應(yīng)用商店竟痰,當(dāng) Store Kit 要求你確認(rèn)購買時輸入測試用戶賬號。
12.我該如何取回 receipt 數(shù)據(jù)?
首先使用 appStoreReceiptURL 方法定位你的應(yīng)用 receipt 豫领,然后如列表2中所示讀取整個 receipt 數(shù)據(jù)愚墓。(僅適用于 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 或早先版本的應(yīng)用程序氯哮,使用 SKPaymentTransaction 對象的 transactionReceipt 特性來取回你的 receipt 數(shù)據(jù),如列表3.
Listing 3 Retrieving the receipt data in iOS 6 and earlier
-(void)completeTransaction:(SKPaymentTransaction *)transaction{ NSData *receiptData = [transaction transactionReceipt];}
13躏敢、驗證 receipt 失敗闷愤,狀態(tài)是一個<數(shù)字字符串>(iOS)
這是由以下原因造成的:
- 你沒有在你的 iOS 應(yīng)用程序中用 base64加密你的 receipt 數(shù)據(jù)。
- 發(fā)送到應(yīng)用商店的對象不是 JSON 格式件余。請看列表4肝谭,它是用于自動更新訂閱的一個正確的 JSON 對象。
Listing 4 valid sample receipt for verifying an auto-renewable subscription
{
"receipt-data" : "...", "password" : "..."
}
14蛾扇、我給我的應(yīng)用程序添加了內(nèi)購功能。我該如何測試它 (iOS)魏滚?
要想測試內(nèi)購是否正確實現(xiàn)镀首,請遵循以下步驟:
- 通過 Ad Hoc 發(fā)布方法下載你的初始應(yīng)用程序。
- 還是通過 Ad Hoc 發(fā)布方法下載你的更新版應(yīng)用程序鼠次,用來驗證它覆蓋 (overwrites) 了初始應(yīng)用程序更哄。
- 嘗試使用更新版本,試著從它那內(nèi)購產(chǎn)品腥寇。
15.驗證我的 receipt成翩,我應(yīng)該使用什么 url ?
當(dāng)你在沙盒你測試你的應(yīng)用程序赦役,以及當(dāng)你的應(yīng)用程序正在審核中時麻敌,使用沙盒 url: https://sandbox.itunes.apple.com/verifyReceipt 。
一旦你的應(yīng)用程序在應(yīng)用商店成功出售掂摔,使用生產(chǎn) url: https://buy.itunes.apple.com/verifyReceipt术羔。
16赢赊、我該如何驗證我的自動更新訂閱 receipt(iOS)?
首先總是用生產(chǎn) URL(production URL) 來驗證你的自動更新訂閱 receipt级历;如果你收到一個21007狀態(tài)碼释移,則使用沙盒URL來驗證。按照這種方法來驗證可以確保寥殖,當(dāng)你在沙盒中測試或?qū)徍藭r玩讳,或者在應(yīng)用商店出售時,你不需要不得不在應(yīng)用程序切換URL嚼贡。
注意:21007狀態(tài)碼表明該 receipt 是一個沙盒 receipt 熏纯,但是它被發(fā)送到生產(chǎn)服務(wù) (production service) 以用于驗證。
17编曼、我該如何解決 "Current receipt invalid or mismatched ds person id" 錯誤消息 (OS X)?
我的內(nèi)置購買已經(jīng)在 iTunes Connect 里本地化了很多語言豆巨。但是 localizedDescription 和 localizedTitle 特性總是以英語返回信息,即使我的測試設(shè)備默認(rèn)語言不是英語掐场。
localizedDescription 和 localizedTitle 根據(jù)當(dāng)前的 iTunes 商店設(shè)置的默認(rèn)語言來返回本地化信息往扔,而不是根據(jù)當(dāng)前的設(shè)備語言設(shè)置。 舉例熊户,如果你的內(nèi)置購買在 iTunes Connect里本地化了德語萍膛,但是你用英語測試用戶賬號登陸了,那么 localizedDescription 和 localizedTitle 會返回英語信息嚷堡。 要想 localizedDescription 和 localizedTitle 返回德語信息蝗罗,請用一個德語測試用戶賬號登陸你的測試設(shè)備。
參考
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'