首页 > 解决方案 > 从 iPhone 中删除我的帐户时,应用内购买是否有效?

问题描述

我在我的应用程序中使用自动续订订阅应用内购买。我想知道当我在 iPhone 中购买后删除我的苹果帐户时发生了什么。应用内购买是否有效?我正在使用沙盒环境。

如果不是这样,如何知道应用内苹果帐户已被删除?

我尝试验证收据并检查应用内购买的是否过期,但删除苹果帐户后,我总是收到收据响应为真。

这是我的收据请求代码:

@objc func loadreceipt() {
        if let appStoreReceiptURL = Bundle.main.appStoreReceiptURL,
            FileManager.default.fileExists(atPath: appStoreReceiptURL.path) {
            if UD.getS(receiptdata).isEmpty == false {
                Api.inAppPurchasecall(.receiptVarify(rdata: UD.getS(receiptdata), excludeInclude: true)) { response, error in
                    if error == nil {
                        self.checkresponse(response: response as! Map)
                    }else{
                        print(error)
                    }
                }
            }else{
                do {
                    let receiptData = try Data(contentsOf: appStoreReceiptURL, options: .alwaysMapped)
                    let receiptString = receiptData.base64EncodedString(options: [])
                    Api.inAppPurchasecall(.receiptVarify(rdata: receiptString, excludeInclude: true)) { response, error in
                        if error == nil {
                            self.checkresponse(response: response as! Map)
                        }else{
                            print(error)
                        }
                    }
                }
                catch { print("Couldn't read receipt data with error: " + error.localizedDescription) }
            }
        }else{
            requestrefreshreceipt = SKReceiptRefreshRequest()
            requestrefreshreceipt?.delegate = self
            requestrefreshreceipt?.start()
        }
    }

收据响应码:

func checkresponse(response : Map) {
        if let rdata = response["latest_receipt"] as? String {
            UD.setS(receiptdata, rdata)
        }
        if let latestreceiptinfo = response["latest_receipt_info"] as? [Map] {
            if let lastinfo = latestreceiptinfo.first {
                if let expiredate = lastinfo["expires_date"] as? String, let edate = Formatter.customDate.date(from: expiredate) {
                    if let strEdate = gmtToLocal(date: edate) {
                        self.nextBillingDate = strEdate
                    }
                }
                if let expiredate = lastinfo["purchase_date"] as? String, let edate = Formatter.customDate.date(from: expiredate) {
                    if let strEdate = gmtToLocal(date: edate) {
                        self.lastBillingDate = strEdate
                    }
                }
                if let expiretime = lastinfo["expires_date_ms"] as? String, let doubleexpiretime = Double(expiretime) {
                    expireTimeStamp = doubleexpiretime/1000
                    let currenttimestamp = Date().timeIntervalSince1970
                    if let etimestamp = expireTimeStamp {
                        if etimestamp > currenttimestamp {
                            UD.setS(AppConst.SUBSCRIPTION_STATUS, "true")
                            NotificationCenter.default.post(name: NSNotification.Name(rawValue: kRefreshServices), object:nil)
                        }else{
                            UD.setS(AppConst.SUBSCRIPTION_STATUS, "false")
                            NotificationCenter.default.post(name: NSNotification.Name(rawValue: kRefreshServices), object:nil)
                            if let expiredate = lastinfo["expires_date"] as? String, let edate = Formatter.customDate.date(from: expiredate) {
                                if let root = APP_DELEGATE.window?.rootViewController {
                                    if let strEdate = gmtToLocal(date: edate) {
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

标签: iosswiftiphonein-app-purchasein-app-subscription

解决方案


推荐阅读