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

警告
不要在你的 App 內(nèi)調(diào)用 App Store 服務(wù)器 verifyReceipt (英文) 端點。你無法直接在用戶設(shè)備和 App Store 之間建立受信任的連接,因為你無法控制該連接的任何端點,從而容易遭受中間人攻擊。
獲取收據(jù)數(shù)據(jù)
要從設(shè)備上的 App 檢索收據(jù)數(shù)據(jù),請使用 NSBundle (英文) 的 appStoreReceiptURL (英文) 方法來找到 App 的收據(jù),再對該數(shù)據(jù)進行 Base64 編碼。接著將這個以 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 (英文) 中詳細說明的 receipt-data、password (如果收據(jù)包含自動續(xù)期訂閱) 和 exclude-old-transactions 鍵的 JSON 對象。
將這個 JSON 對象作為 HTTP POST 請求的有效載荷提交。在沙盒中測試你的 App 時或在你的 App 處于審核狀態(tài)期間,請使用測試環(huán)境 URL https://sandbox.itunes.apple.com/verifyReceipt。如果你的 App 已在 App Store 中上架,請使用生產(chǎn) URL https://buy.itunes.apple.com/verifyReceipt。有關(guān)這些端點的更多信息,請參閱“verifyReceipt (英文)”。
重要信息
請先使用生產(chǎn) URL 驗證你的收據(jù);如果收到 21007 狀態(tài)代碼,再使用沙盒 URL 進行驗證。這種方法可以確保你不必在 App 的測試期間、App Review 審核期間或已在 App Store 上架后切換 URL。
解析響應
App Store 的響應有效載荷是一個 JSON 對象,其中包含 responseBody (英文) 中詳細說明的鍵和值。
in_app 數(shù)組包含非消耗型、非續(xù)期訂閱,以及用戶之前購買的自動續(xù)期訂閱。根據(jù)需要,檢查響應中這些 App 內(nèi)購買項目類型對應的值來驗證交易。
對于自動續(xù)期訂閱項目,請解析響應來獲取關(guān)于當前有效訂閱期的信息。在驗證訂閱的收據(jù)時,latest_receipt 包含最新編碼的收據(jù),它的值與請求中 receipt-data 的值相同,latest_receipt_info 包含訂閱的所有交易,其中包括初次購買和后續(xù)續(xù)期,但不包括任何恢復購買。
你可以使用這些值來檢查自動續(xù)期訂閱是不是已到期。將這些值與 expiration_intent (英文) 訂閱欄位相結(jié)合,可以獲取到期的原因。
網(wǎng)站名稱:創(chuàng)新互聯(lián)IOS教程:通過AppStore驗證收據(jù)
網(wǎng)站鏈接:http://m.fisionsoft.com.cn/article/cogcose.html


咨詢
建站咨詢
