【问题标题】:Validate receipts iOS验证收据 iOS
【发布时间】:2019-02-28 02:27:15
【问题描述】:

看起来苹果这个月正在做任何类型的更新......最近我的应用被这条消息拒绝了

在您的服务器上验证收据时,您的服务器需要能够 处理从 Apple 获取收据的生产签名应用程序 测试环境。推荐的方法适用于您的生产 服务器始终根据生产 App Store 验证收据 第一的。如果验证失败并显示错误代码“使用沙盒收据 在生产中,”您应该针对测试环境进行验证 而是。

我的应用程序之前获得批准...这是我正在使用的代码

  //Sandbox URL
       //let url = URL(string: "https://sandbox.itunes.apple.com/verifyReceipt")!
        let url = URL(string: "https://buy.itunes.apple.com/verifyReceipt")!

    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    request.httpBody = bodyData

    let task = URLSession.shared.dataTask(with: request) { (responseData, response, error) in
        if let error = error {
            completion(.failure(.other(error)))
        } else if let responseData = responseData {
            let json = try! JSONSerialization.jsonObject(with: responseData, options: []) as! Dictionary<String, Any>
            //print(json)
            let session = Session(receiptData: data, parsedReceipt: json)
            self.sessions[session.id] = session
            let result = (sessionId: session.id, currentSubscription: session.currentSubscription)
            completion(.success(result))
        }
    }

    task.resume()
}

【问题讨论】:

  • 它可能已被拒绝,因为您是在应用程序上进行验证,而不是像 Apple 建议的那样在服务器上进行验证。
  • 但为什么我需要服务器? 1 周前批准的版本没有服务器
  • 也许他们上次没有测试应用内购买?您的 IAP 验证将失败,因为您仅针对生产端点进行验证,但在审核期间您需要针对沙盒进行验证。如果您不使用服务器,那么验证收据的价值就会小得多。
  • 不同的审阅者可能会注意到不同的事情,有时您的应用不会被一个人审阅一次,而一旦您提交更新就会被审阅。如果您不想使用服务器,则可以跳过验证...
  • 我怎样才能跳过验证?如果我从来没有这个问题? (我给你发了一封电子邮件 Emilio)

标签: ios swift


【解决方案1】:

您不必使用服务器。如果需要,您可以在客户端上验证它。或者,如果您愿意,您可以完全放弃任何验证(不推荐)。

您遭到拒绝很可能是因为这一次,他们使用了测试环境来验证 IAP。

他们的documentation 状态

如果您要进行收据验证,请务必验证您的收据 使用生产 URL (https://buy.itunes.apple.com/verifyReceipt) 第一的。即使在您的应用程序用于 沙盒环境。 App Review 将审核生产版本 您的应用程序在沙盒中。当您的应用程序处理收据时,它必须 能够检测到 21007 接收状态码并发送 收据到沙盒收据验证服务器 (https://sandbox.itunes.apple.com/verifyReceipt)。一旦你的应用是 批准并在生产环境中运行,发送 首先接收到生产服务器是正确的操作。

请注意,他们没有指定收据验证的完成位置。

您的代码缺少的是对沙盒的回退。所以这次他们拒绝了你。

【讨论】:

  • 那么我必须对我的代码进行哪些更改?抱歉,但我不确定我必须做什么
  • Apple 文档中的说明非常清楚。您已经从响应中获得了 JSON。检查收据状态码。如果是 21007,请使用沙盒再次调用。如果失败了,那就是真正的失败。
猜你喜欢
  • 1970-01-01
  • 2016-06-24
  • 2015-12-26
  • 2015-01-08
  • 1970-01-01
  • 2016-09-30
  • 1970-01-01
  • 2023-04-05
  • 2014-07-19
相关资源
最近更新 更多