我有一个应用程序,我最近更新,以便在应用程序购买中使用.之前的版本(付费但没有在应用内购买)是1.0,当前版本是1.1.
由于应用程序内购买实际上解锁了所有功能(包含在付费版本1.0中),我想要一种方式,如果用户按下我的恢复购买按钮,则最初下载的版本1.0将被升级.
为此,我首先尝试恢复购买,如果回复:
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
Run Code Online (Sandbox Code Playgroud)
如果这为我提供了一个事务计数为0的队列,我检查收据以查看安装的原始版本是否为1.0.
获得收据的代码是根据Apple的文档
- (void)tryRestoreFromOriginalPurchase
{
// Load the receipt from the app bundle
NSError *error;
NSData *receipt = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]];
if (receipt == nil) {
[self restoreFromOriginalVersionWithReceipt:nil];
return;
}
// Create the JSON object that describes the request
NSDictionary *requestContents = @{@"receipt-data": [receipt base64EncodedStringWithOptions:0]};
NSData *requestData = [NSJSONSerialization dataWithJSONObject:requestContents options:0 error:&error];
if (!requestData) {
[self restoreFromOriginalVersionWithReceipt:nil];
return;
}
// Create a POST request with the receipt data
NSURL *storeURL = [NSURL URLWithString:@"https://buy.itunes.apple.com/verifyReceipt"]; …Run Code Online (Sandbox Code Playgroud) 我开发了一个iOS付费应用程序,并在 上发布AppStore。许多用户已经购买并从那里下载。
现在我们已将其更改为免费,但带有一些付费功能。现在的问题是,已经购买该应用程序的过去用户被要求为这些新的付费功能付费。这种情况不应该发生,因为他们之前已经购买了整个应用程序。
此外,如果其中一位老用户在新版本发布之前删除了该应用程序,然后安装了新的免费版本,他也将被要求为这些新功能付费。
有没有办法知道当前Apple帐户是否购买过此应用程序 - 使用App ID- 之前?
如果没有,有没有办法检查该应用程序是否之前安装在设备上然后被删除?
我正在Swift 3中开发一个iOS应用程序,并尝试按照本教程实现收据验证:http://savvyapps.com/blog/how-setup-test-auto-renewable-subscription-ios-app.但是,该教程似乎是使用早期版本的Swift编写的,因此我不得不进行一些更改.这是我的receiptValidation()函数:
func receiptValidation() {
let receiptPath = Bundle.main.appStoreReceiptURL?.path
if FileManager.default.fileExists(atPath: receiptPath!){
var receiptData:NSData?
do{
receiptData = try NSData(contentsOf: Bundle.main.appStoreReceiptURL!, options: NSData.ReadingOptions.alwaysMapped)
}
catch{
print("ERROR: " + error.localizedDescription)
}
let receiptString = receiptData?.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))
let postString = "receipt-data=" + receiptString! + "&password=" + SUBSCRIPTION_SECRET
let storeURL = NSURL(string:"https://sandbox.itunes.apple.com/verifyReceipt")!
let storeRequest = NSMutableURLRequest(url: storeURL as URL)
storeRequest.httpMethod = "POST"
storeRequest.httpBody = postString.data(using: .utf8)
let session = URLSession(configuration:URLSessionConfiguration.default)
let task = session.dataTask(with: storeRequest as URLRequest) { data, …Run Code Online (Sandbox Code Playgroud)