【问题标题】:How do I read receipt data with existing paid iOS app?如何使用现有的付费 iOS 应用读取收据数据?
【发布时间】:2015-10-06 19:14:06
【问题描述】:

我有一个付费应用,我正在考虑通过应用内购买免费提供。如果我进行切换,我需要检查用户是否已经为应用程序付费,然后启用付费功能。

我认为下面的代码应该可以满足我的需求,但我不确定如何测试它。我构建了应用程序并使用我的设备上的开发配置文件运行它,receitpData 是空的。因此,我使用分发配置文件构建了应用程序并将其提交到应用程序商店,然后使用试飞下载了应用程序,但我仍然遇到同样的问题。

如何从现有应用中获取收据数据?

我是否需要为此应用启用应用内购买才能获取此数据?

NSURL *receiptUrl = [[NSBundle mainBundle] appStoreReceiptURL];
NSData *receiptData = [NSData dataWithContentsOfURL:receiptUrl];

【问题讨论】:

    标签: ios objective-c xcode storekit


    【解决方案1】:

    我想通了:

    #import <StoreKit/StoreKit.h>
    

    别忘了添加它的代表

    <SKPaymentTransactionObserver, SKProductsRequestDelegate>
    

    代码如下:

    SKReceiptRefreshRequest* request = [[SKReceiptRefreshRequest alloc] initWithReceiptProperties:nil];
    request.delegate = self;
    [request start];
    

    然后:

    -(void)requestDidFinish:(SKRequest*)request{
        if([request isKindOfClass:[SKReceiptRefreshRequest class]]){
            NSLog(@"YES, You purchased this app");
        }
    }
    
    - (void)request:(SKRequest*)request didFailWithError:(NSError *)error{
        NSLog(@"NO, you need to buy it");
    }
    

    【讨论】:

    • 我还没有跨过这座桥,但我会在某个时候跨过。感谢您发布此内容。
    • @TomKrones 嗨。此解决方案在生产中是否适合您?正如我在生产环境中看到的那样,我也收到了我的应用程序的付费和免费版本的收据。如何区分为应用付费和不付费的用户?
    • @AntonVlasov 我不确定。我最终不需要在应用程序中进行此类检查。
    • 其实我找到了解决办法。我只是在收据上使用原始应用版本字段,这样我就可以确定哪个应用版本用户首先免费或付费安装。当用户首次从 App Store 获取应用时,原始应用版本等于 info.plist 中的 Xcode“构建”字段。
    • @AntonVlasov:你是如何解析收据文件的?我找到了很多 macOS 的教程,但是对于 iOS,我发现的唯一的教程需要包括 openssl 库。您介意分享您的方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多