新聞中心
概覽
App Store 收據(jù)是采用 Apple 證書簽名的二進(jìn)制加密文件。要讀取這種加密文件的內(nèi)容,你需要將這個(gè)文件發(fā)送到 verifyReceipt (英文) 端點(diǎn)解析。端點(diǎn)的響應(yīng)中包含可讀的 JSON 正文。與 App Store 的通信結(jié)構(gòu)為 RFC 4627 中定義的 JSON 字典格式。二進(jìn)制數(shù)據(jù)采用 RFC 4648 中定義的 Base64 編碼。收據(jù)會(huì)在安全的服務(wù)器通過 App Store 進(jìn)行驗(yàn)證。有關(guān)與 App Store 建立安全網(wǎng)絡(luò)連接的信息,請(qǐng)參閱“防止不安全的網(wǎng)絡(luò)連接 (英文)”。

警告
不要在你的 App 內(nèi)調(diào)用 App Store 服務(wù)器 verifyReceipt (英文) 端點(diǎn)。你無法直接在用戶設(shè)備和 App Store 之間建立受信任的連接,因?yàn)槟銦o法控制該連接的任何端點(diǎn),從而容易遭受中間人攻擊。
獲取收據(jù)數(shù)據(jù)
要從設(shè)備上的 App 檢索收據(jù)數(shù)據(jù),請(qǐng)使用 NSBundle (英文) 的 appStoreReceiptURL (英文) 方法來找到 App 的收據(jù),再對(duì)該數(shù)據(jù)進(jìn)行 Base64 編碼。接著將這個(gè)以 Base64 編碼的數(shù)據(jù)發(fā)送到你的服務(wù)器。
// Get receipt if available
if let appStoreReceiptURL = Bundle.main.appStoreReceiptURL,
FileManager.default.fileExists(atPath: appStoreReceiptURL.path) {
do {
let receiptData = try Data(contentsOf: appStoreReceiptURL, options: .alwaysMapped)
print(receiptData)
let receiptString = receiptData.base64EncodedString(options: [])
// Read ReceiptData
}
catch { print("Couldn't read receipt data with error: " + error.localizedDescription) }
}
將收據(jù)數(shù)據(jù)發(fā)送到 App Store
在你的服務(wù)器上,創(chuàng)建含有 requestBody (英文) 中詳細(xì)說明的 receipt-data、password (如果收據(jù)包含自動(dòng)續(xù)期訂閱) 和 exclude-old-transactions 鍵的 JSON 對(duì)象。
將這個(gè) JSON 對(duì)象作為 HTTP POST 請(qǐng)求的有效載荷提交。在沙盒中測(cè)試你的 App 時(shí)或在你的 App 處于審核狀態(tài)期間,請(qǐng)使用測(cè)試環(huán)境 URL https://sandbox.itunes.apple.com/verifyReceipt。如果你的 App 已在 App Store 中上架,請(qǐng)使用生產(chǎn) URL https://buy.itunes.apple.com/verifyReceipt。有關(guān)這些端點(diǎn)的更多信息,請(qǐng)參閱“verifyReceipt (英文)”。
重要信息
請(qǐng)先使用生產(chǎn) URL 驗(yàn)證你的收據(jù);如果收到 21007 狀態(tài)代碼,再使用沙盒 URL 進(jìn)行驗(yàn)證。這種方法可以確保你不必在 App 的測(cè)試期間、App Review 審核期間或已在 App Store 上架后切換 URL。
解析響應(yīng)
App Store 的響應(yīng)有效載荷是一個(gè) JSON 對(duì)象,其中包含 responseBody (英文) 中詳細(xì)說明的鍵和值。
in_app 數(shù)組包含非消耗型、非續(xù)期訂閱,以及用戶之前購(gòu)買的自動(dòng)續(xù)期訂閱。根據(jù)需要,檢查響應(yīng)中這些 App 內(nèi)購(gòu)買項(xiàng)目類型對(duì)應(yīng)的值來驗(yàn)證交易。
對(duì)于自動(dòng)續(xù)期訂閱項(xiàng)目,請(qǐng)解析響應(yīng)來獲取關(guān)于當(dāng)前有效訂閱期的信息。在驗(yàn)證訂閱的收據(jù)時(shí),latest_receipt 包含最新編碼的收據(jù),它的值與請(qǐng)求中 receipt-data 的值相同,latest_receipt_info 包含訂閱的所有交易,其中包括初次購(gòu)買和后續(xù)續(xù)期,但不包括任何恢復(fù)購(gòu)買。
你可以使用這些值來檢查自動(dòng)續(xù)期訂閱是不是已到期。將這些值與 expiration_intent (英文) 訂閱欄位相結(jié)合,可以獲取到期的原因。
本文名稱:創(chuàng)新互聯(lián)IOS教程:通過AppStore驗(yàn)證收據(jù)
鏈接分享:http://www.dlmjj.cn/article/cogcose.html


咨詢
建站咨詢
