【问题标题】:iOS download non-consumable content from server with in-app purchaseiOS 通过应用内购买从服务器下载非消耗性内容
【发布时间】:2012-09-16 23:13:28
【问题描述】:

我已阅读并搜索了有关 iOS 应用内主题的所有内容。至少来自谷歌(减去无休止的应用内黑客链接)。我找不到的一件事是有关如何从服务器获取内容并在收据验证后将其存储到手机上的说明或教程。我知道我可以将内容存储在我自己的服务器上,也可以使用应用程序加载器将其打包并让 Apple 托管它。我得到了整个非消耗性内容,并使用您自己的服务器或 NSUserDefaults 来记住购买的物品。我找不到关于如何从我自己的服务器或 Apple 的服务器获取应用内购买内容的编码教程,以及我可以在手机上的哪个位置存储它?正常的套接字调用?我可以将内容存储在应用的目录中吗?

例如,我有一个现有的应用程序,我想通过应用程序内购买来销售新图像。现有图像位于捆绑包中。如何将捆绑的图像从服务器返回到我的应用程序中?我可以接受每次购买的新捆绑包,我了解您无法修改现有捆绑包。

【问题讨论】:

    标签: objective-c ios in-app-purchase


    【解决方案1】:

    当您购买成功时,您将获得交易对象。不是吗?

    - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
    

    遍历每个事务对象并使用以下代码:

    if (transaction.downloads)
    {
        [[SKPaymentQueue defaultQueue] startDownloads:transaction.downloads];
    }
    

    成功下载后,您将收到一个委托调用:

    -(void)paymentQueue:(SKPaymentQueue *)queue updatedDownloads:(NSArray *)downloads
    {
        for (SKDownload *download in downloads)
        {
            switch (download.downloadState) {
                case SKDownloadStateActive:
                    NSLog(@"Download progress = %f and Download time: %f", download.progress, download.timeRemaining);
                    break;
                case SKDownloadStateFinished:
                    NSLog(@"%@",download.contentURL);
                    // Download is complete. Content file URL is at
                    // path referenced by download.contentURL. Move
                    // it somewhere safe, unpack it and give the user
                    // access to it
                    break;
                default:
                    break;
            }
        }
    }
    

    下载后,您将获得下载数据的 URL,现在您可以将其存储在库的应用程序支持文件夹中,并防止其自动同步到云端(如果需要)。就是这样。

    【讨论】:

    • 我的做法完全一样。在我收到 SKDownloadStateFinished 事件后,下载 url 似乎不存在。 (我正在使用 [[NSFileManager defaultManager] fileExistsAtPath:[download.contentURL absoluteString] 来检查或使用 iFunBox 之类的东西来检查)。有什么想法吗?
    • @bagusflyer,您是否先检查您的购买是否成功? itunesconnect 上可能存在一些配置问题。
    • 感谢@Satyam svv,如果我使用,我突然可以获取文件: NSString* srcPath = [[download.contentURL relativePath]stringByAppendingPathComponent:@"Contents"]; if ( [[NSFileManager defaultManager]fileExistsAtPath:srcPath)
    • @Satyamsvv 我已经实现了托管功能,并且能够使用 download.contentURL 从 iTunes 下载内容。如何在 SKDownloadStateFinished 状态下将此包写入/传输到应用程序文档目录?我无法解压它,所以我可以访问它。
    • @AjaySharma 在方法“- (void)paymentQueue:(SKPaymentQueue *)queue updatedDownloads:(NSArray *)downloads”中,downloads是一个“SKDownload”数组,SKDownload的对象会有“ contentURL”,您可以从中找到它下载到的位置。从那里,您可以复制。它也只是一个拉链。如果你愿意,你可以解压它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多