相关疑难解决方法(0)

无法获取用户安装的原始应用版本(收据验证)?

我有一个应用程序,我最近更新,以便在应用程序购买中使用.之前的版本(付费但没有在应用内购买)是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)

storekit in-app-purchase ios7 receipt-validation

7
推荐指数
2
解决办法
1154
查看次数

iOS 检查用户是否之前购买过该应用程序

我开发了一个iOS付费应用程序,并在 上发布AppStore。许多用户已经购买并从那里下载。

现在我们已将其更改为免费,但带有一些付费功能。现在的问题是,已经购买该应用程序的过去用户被要求为这些新的付费功能付费。这种情况不应该发生,因为他们之前已经购买了整个应用程序。

此外,如果其中一位老用户在新版本发布之前删除了该应用程序,然后安装了新的免费版本,他也将被要求为这些新功能付费。

有没有办法知道当前Apple帐户是否购买过此应用程序 - 使用App ID- 之前?

如果没有,有没有办法检查该应用程序是否之前安装在设备上然后被删除?

app-store in-app-purchase ios

6
推荐指数
0
解决办法
1087
查看次数

在Swift中实现收据验证3

我正在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)

in-app-purchase ios receipt-validation swift swift3

5
推荐指数
4
解决办法
1万
查看次数