如何知道iOS订阅是否处于活动状态
我正在向我的应用程序添加iOS inapp订阅。下面是Ray Wenderlich网页上的一篇精彩教程: 本教程基本上遵循以下步骤:如何知道iOS订阅是否处于活动状态,ios,in-app-subscription,Ios,In App Subscription,我正在向我的应用程序添加iOS inapp订阅。下面是Ray Wenderlich网页上的一篇精彩教程: 本教程基本上遵循以下步骤: 认购 收到收据 在Apple中验证收据(这应该通过后端完成,但为了简单起见,教程会在应用程序中完成) 一旦收据经过验证,苹果就会用JSON解析的收据进行响应 该应用程序在本地存储购买的项目,并将其与sessionID(创建的UUID)关联 完成教程后,似乎一切都很好,但我有两个问题的困难 每次用户进入应用程序时,都会检查其是否具有有效的sessionID和有效的
guard SubscriptionService.shared.currentSessionId != nil,
SubscriptionService.shared.hasReceiptData else {
showRestoreAlert()
return
}
loadSelfies()
hasReceiptData执行以下操作:
var hasReceiptData: Bool {
return loadReceipt() != nil
}
private func loadReceipt() -> Data? {
guard let url = Bundle.main.appStoreReceiptURL else {
return nil
}
do {
let data = try Data(contentsOf: url)
return data
} catch {
print("Error loading receipt data: \(error.localizedDescription)")
return nil
}
}
}
这些方法只检查收据是否存在,而不检查其他内容
要检查currentSessionId,请使用以下方法:
var currentSessionId: String? {
didSet {
NotificationCenter.default.post(name: SubscriptionService.sessionIdSetNotification, object: currentSessionId)
}
}
并且currentSessionId的值在Apple响应收据验证时设置:
func UploadReceive(完成:((成功:Bool)->Void)?=nil){
如果let receiptData=loadReceipt(){
SelfieService.shared.upload(收据:receiptData){[weak self](结果)在
guard let strongSelf=self-else{return}
切换结果{
案例。成功(让结果):
strongSelf.currentSessionId=result.sessionId
strongSelf.currentSubscription=result.currentSubscription
完成?(真)
案例。失败(let错误):
打印(“