iOS:如何检测用户是否订阅了可自动更新的订阅

rig*_*nmr 35 storekit ios swift

希望标题是不言自明的.我正在尝试做这样的事情:

checkIfUserIsSubscribedToProduct(productID, transactionID: "some-unique-transaction-string", completion: { error, status in
    if error == nil {
        if status ==  .Subscribed {
            // do something fun
        }
    }
 }
Run Code Online (Sandbox Code Playgroud)

做了类似我提供的假设代码吗?我觉得我正在服用疯狂的药片

编辑

在类似的问题中,我一直看到一个通用的答案"哦,你必须验证收据"但没有解释如何,甚至收据是什么.有人可以向我提供如何"验证收据"吗?我试过这个教程,但似乎没有用.

编辑 - 为赏金

请解决以下情况:用户订阅我的自动续订订阅并因此获得更多数字内容 - 很酷,实施.但是,如何在每次打开应用程序时检查该订阅是否仍然有效(即他们没有取消订阅)?检查这个的最简单的解决方案是什么?有没有像我在问题中提供的假设代码?请引导我完成此操作并提供有关该主题的任何进一步详细信息.

rig*_*nmr 27

我知道每个人都非常关心我以及我在这方面做了什么 - 不要害怕,解决了我的问题.主要问题是我在这个链接中尝试了垃圾和过时的代码,但它没有工作,所以我放弃了它.然后我回到它并实现它,Alamofire它很有效.这是代码解决方案:

斯威夫特3:

let receiptURL = Bundle.main.appStoreReceiptURL
let receipt = NSData(contentsOf: receiptURL!)
let requestContents: [String: Any] = [
    "receipt-data": receipt!.base64EncodedString(options: []),
    "password": "your iTunes Connect shared secret"
]

let appleServer = receiptURL?.lastPathComponent == "sandboxReceipt" ? "sandbox" : "buy"

let stringURL = "https://\(appleServer).itunes.apple.com/verifyReceipt"

print("Loading user receipt: \(stringURL)...")

Alamofire.request(stringURL, method: .post, parameters: requestContents, encoding: JSONEncoding.default)
    .responseJSON { response in
        if let value = response.result.value as? NSDictionary {
            print(value)
        } else {
            print("Receiving receipt from App Store failed: \(response.result)")
        }
}
Run Code Online (Sandbox Code Playgroud)

  • 来自Apple的警告:"重要提示:请勿从您的应用程序调用App Store服务器/ verifyReceipt端点" (5认同)
  • 我同意你的好答案,但是出于安全方面的考虑,最好用苹果的服务器端查看到期日期.`let currentTime = NSDate().timeIntervalSince1970 let expired = currentTime> expiresTime`如果用户将设备的日期更改为过去,则该检查可能会通过, (3认同)