创新互联IOS教程:通过AppStore验证收据

概览

App Store 收据是采用 Apple 证书签名的二进制加密文件。要读取这种加密文件的内容,你需要将这个文件发送到 verifyReceipt (英文) 端点解析。端点的响应中包含可读的 JSON 正文。与 App Store 的通信结构为 RFC 4627 中定义的 JSON 字典格式。二进制数据采用 RFC 4648 中定义的 Base64 编码。收据会在安全的服务器通过 App Store 进行验证。有关与 App Store 建立安全网络连接的信息,请参阅“防止不安全的网络连接 (英文)”。

警告

不要在你的 App 内调用 App Store 服务器 verifyReceipt (英文) 端点。你无法直接在用户设备和 App Store 之间建立受信任的连接,因为你无法控制该连接的任何端点,从而容易遭受中间人攻击。

获取收据数据

要从设备上的 App 检索收据数据,请使用 NSBundle (英文) 的 appStoreReceiptURL (英文) 方法来找到 App 的收据,再对该数据进行 Base64 编码。接着将这个以 Base64 编码的数据发送到你的服务器。

// 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) }
}

将收据数据发送到 App Store

在你的服务器上,创建含有 requestBody (英文) 中详细说明的 receipt-datapassword (如果收据包含自动续期订阅) 和 exclude-old-transactions 键的 JSON 对象。

将这个 JSON 对象作为 HTTP POST 请求的有效载荷提交。在沙盒中测试你的 App 时或在你的 App 处于审核状态期间,请使用测试环境 URL https://sandbox.itunes.apple.com/verifyReceipt。如果你的 App 已在 App Store 中上架,请使用生产 URL https://buy.itunes.apple.com/verifyReceipt。有关这些端点的更多信息,请参阅“verifyReceipt (英文)”。

重要信息

请先使用生产 URL 验证你的收据;如果收到 21007 状态代码,再使用沙盒 URL 进行验证。这种方法可以确保你不必在 App 的测试期间、App Review 审核期间或已在 App Store 上架后切换 URL。

解析响应

App Store 的响应有效载荷是一个 JSON 对象,其中包含 responseBody (英文) 中详细说明的键和值。

in_app 数组包含非消耗型、非续期订阅,以及用户之前购买的自动续期订阅。根据需要,检查响应中这些 App 内购买项目类型对应的值来验证交易。

对于自动续期订阅项目,请解析响应来获取关于当前有效订阅期的信息。在验证订阅的收据时,latest_receipt 包含最新编码的收据,它的值与请求中 receipt-data 的值相同,latest_receipt_info 包含订阅的所有交易,其中包括初次购买和后续续期,但不包括任何恢复购买。

你可以使用这些值来检查自动续期订阅是不是已到期。将这些值与 expiration_intent (英文) 订阅栏位相结合,可以获取到期的原因。

网站标题:创新互联IOS教程:通过AppStore验证收据
网站地址:http://www.shufengxianlan.com/qtweb/news30/342830.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联