在Auto Renewable Subscription中,修改订阅计划需要更新两个属性:新计划的productID和原计划的“cancellation_date”属性。如果没有更新“cancellation_date”属性,Auto Renewable Subscription会将计划续订日期视为取消日期。因此,更改计划后应更新该属性。
以下是使用Swift更新“cancellation_date”属性的示例代码:
func updateSubscriptionPlan(){
let newProductId = "new_plan_product_id"
let currentPlan = //获取当前的订阅Plan
var originalTransaction: SKPaymentTransaction? = nil
for transaction in currentPlan.transactions {
if transaction.transactionState == .purchased {
originalTransaction = transaction
break
}
}
if let originalTransaction = originalTransaction {
let currentExpirationDate = originalTransaction.transactionReceipt?.expirationDate // 获取当前计划的到期日期
let originalTransactionId = originalTransaction.transactionIdentifier // 获取原始交易ID
let upgradeParams: [String: Any] = [
"product_id": newProductId,
"cancellation_date": "\(currentExpirationDate!.timeIntervalSince1970)" // 更新cancellation_date属性
]
let appStoreReceipt = // 获取当前应用程序的Receipt
let request = SKReceiptRefreshRequest(receiptProperties: appStoreReceipt)
request.delegate = self
request.start()
let appleServer = InAppPurchaseHelper.sharedHelper().getAppleServer()
appleServer.postUpgradeProductWithApple(originalTransactionId, upgradeParams: upgradeParams, withResponse: { (success, responseData) in
if success {
// 更新本地的订阅计划
} else {
// 计划更新失败,处理错误信息
}
})
}
}