我正在尝试生成一个应用程序,要求用户在创建帐户时进行订阅,并且只能通过有效的付费订阅来使用。
除非我认为这一切都错了,否则我认为我想要一种方式以某种方式将他们的订阅与他们的内部帐户绑定到应用程序,而不是他们的苹果ID。
我实际上已经想出了一个解决方案,非常类似于堆栈上发布的类似问题的答案,从收据中提取original_transaction_id并将其存储在firebase中。
这在开发中有效,但是一旦我在应用程序商店中获得应用程序并将其下载到测试中,它就会挂在这里....
func verifyPurchaseForNewAccount(_ purchase: RegisteredPurchase) {
NetworkActivityIndicatorManager.NetworkOperationsStarted()
let appleValidator = AppleReceiptValidator(service: .sandbox)
SwiftyStoreKit.verifyReceipt(using: appleValidator, password: sharedSecret) { result in
NetworkActivityIndicatorManager.NetworkOperationFinished()
switch result {
case .success(let receipt):
print("success")
let productId = "com.glossappllc.theglossapp.monthlysubscription"
switch purchase {
case .monthly:
let purchaseResult = SwiftyStoreKit.verifySubscription(
type: .autoRenewable, productId: productId,
inReceipt: receipt,
validUntil: Date()
)
let receiptArray = receipt["receipt"]?["in_app"] as! NSArray
let originalReceipt = receiptArray.firstObject as! NSDictionary
在这里,它似乎无法找到" original_transaction_id"。
if let originalTransactionID = originalReceipt["original_transaction_id"] as? String {
print("original transaction ID: ", originalTransactionID)
DataService.ds.REF_USERS.child(self.DBuserID).updateChildValues(["isSubscribed": "true", "purchaseID": originalTransactionID])
self.sendToNewUserFlow()
}
}
case .error(let error):
print("error: ", error.localizedDescription)
if case .noReceiptData = error {
self.refreshReceipt()
}
}
}
}
还有另一种方法可以将两个帐户绑在一起吗?
或者有没有办法在Xcode和环境中测试更接近生产? 我知道收据必须仍然存在,但也许某种程度上它的格式不同?
如果我无法通过登录xcode对其进行测试,那就很难知道为什么它不再起作用了......