问题标签 [skdownload]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
951 浏览

ios - 如何检索已购买内容的 SKDownload

当有托管内容时,应用程序购买流程的标准是:

  • 做交易
  • 当交易进入“已购买”状态时,检索 SKDownload 并开始下载
  • 下载完成后,我们可以将交易声明为“完成”
  • 这可以。想象一下,我们想要恢复所有购买的内容,这是因为我们删除并重新安装了我们的应用程序,或者仅仅是因为我们将它安装在另一台设备上。现在,WWDC 2012 会议上证实了这一点,当您恢复所有购买时,您将获得要恢复的内容的完整列表,但您可能不想下载所有内容。在这种情况下,您应该让用户选择要下载的内容,然后将所选产品的 SKDownload 排队;一旦下载终止并且内容安装成功,您就可以宣布交易完成。会议视频没有说明的是您应该如何处理被拒绝或延迟的下载。据我所知,没有办法将 SKDownload 保存在某处并稍后检索它,也没有 API 可以向 iTunes 询问这样的事情“给我这个已购买产品的 SKDownload”。因此,根据我的说法,有两种选择可以绕过这种情况:

  • 您将要求再次恢复未购买的东西;这并不优雅,但它有效
  • 你开始这个过程,然后你暂停它;这将在稍后恢复。但是这个解决方案有几个缺点:您无法控制系统如何管理 SKDownload,如果在一定时间后它可能会取消。我从未尝试过这个解决方案。
  • 其他人是否遇到过这个问题并找到了更好的解决方案?向 Apple 提出增强请求有意义吗?

    0 投票
    1 回答
    98 浏览

    in-app-purchase - 应用内购买在 paymentQueue 处停止:updatedTransactions:

    我尝试将应用内购买与托管在苹果服务器上的内容一起使用。奇怪的是,在检索交易列表时,它说它们都不包含下载。目前我的应用内状态是“准备提交”。必须先提交吗?

    0 投票
    0 回答
    245 浏览

    macos - 如何在 Mac 上查找 SKDownload 的事务?

    在 iOS 上,SKDownload

    @property(nonatomic, readonly) SKPaymentTransaction *transaction

    只要下载了托管内容,就可以方便地完成交易。

    但是在 Mac 上,SKDownload没有那个,所以我发现自己必须浏览SKPaymentQueue并查找具有该下载的交易。

    你们有人这样做吗?

    问题是有时我不会到达“finishTransaction”代码,但我真的不知道如何完成该事务!在 iOS 上这很容易,因为我刚刚完成了与下载相关的事务。

    总而言之,很高兴知道如何在 Mac 上完成下载交易。它是否隐含地发生?

    0 投票
    0 回答
    526 浏览

    ios - StoreKit SKDownload 进度未完成

    我目前正在开发一个应用程序,该应用程序允许用户购买 Apple 托管的可下载内容,到目前为止,我的代码在用户可以购买并且下载完成并且文件完好无损的情况下工作。

    但是我想向用户显示下载进度,因为一些文件非常大,但我发现 SKDownload.progress 运行到大约 60% 或 80% 然后突然停止。

    在我的代码中,我正在执行以下操作:

    但是当我检查日志时,它会显示进度,但会停在这里:

    我还向用户显示了一个进度标签,从用户的角度来看,在观看下载时,当你看到的最后一个数字是 60% 或 80% 时,你会认为它实际上没有下载

    有没有人对此有任何提示,或者它可能是一个错误?

    谢谢亚伦

    0 投票
    0 回答
    124 浏览

    ios - IAP Apple 托管内容下载进度问题


    大家好。我有一个带有 IAP Apple 托管内容的应用程序。SKDownload.progress 运行良好,以 1% 的增量进行,直到大约 0.8,之后我的 updatedDownloads: 方法停止被调用。然后 3-5 分钟后,我得到一个 SKDownloadStateFinished ,一切正常。有没有人对此有任何提示,或者它可能是苹果的错误?该应用程序被拒绝,并显示消息“他在完成应用内购买后下载停滞在 80%”。

    0 投票
    1 回答
    146 浏览

    objective-c - 带有托管内容的 Apple 应用内购买 - 不下载文件

    我创建了一个简单的应用内购买产品,其中包含一个 mp3 文件作为内容。我在itunes connect中设置好,上传了pkg文件,一切顺利——该产品在我的应用程序中被识别,用户可以购买,确认如期而至,但是,有一个小问题:当交易状态更改为“购买”,我调用内容下载方法,开始下载 mp3 文件,但是,更新方法永远不会被调用 (- (void)paymentQueue:(SKPaymentQueue *)queue updatedDownloads:(NSArray *)downloads),而是交易被删除。

    我究竟做错了什么?我应该从下面哪里调用开始下载方法?

    0 投票
    0 回答
    174 浏览

    ios - 消息扩展。SKDownload 获取内容。

    我试图从消息扩展的 SKDownload 中获取内容,然后总是得到权限错误。(xCode 8 b4、iPhone 5、iOS 10 b4) 在此处输入图像描述

    在此处输入图像描述

    0 投票
    0 回答
    83 浏览

    ios - 应用程序进入后台后的SKDownload问题

    在我的应用程序中,如果应用程序处于活动状态,则可以顺利下载由 Apple 托管的内容。但是,如果它进入后台并且经过足够的时间,当它再次变为活动状态时,SKDownload仍然有一个active状态,但没有报告任何进展。我已验证交易尚未完成。

    有谁知道为什么会这样?我的设备在 Wi-Fi 上,我可以验证下载状态,因为我保存SKDownload到了一个实例变量。因此,如果只是在后台没有收到下载进度的问题,我仍然可以从myDownload.progress. 但是,进度与以前完全相同,并且没有更新。

    这对我来说是一个大问题,因为如上所述我确实存储SKDownload到一个变量。我这样做是为了防止重复下载开始。我的资产大于 150MB,因此用户很可能不明白下载资产可能需要多长时间,并会尝试通过再次恢复/“购买”项目来启动第二次下载。因此,我将正在运行的下载存储到一个变量中,当新事务完成时,我检查下载是否已经在运行。这是一个很棒的设计,因为它可以确保在最短的时间内完成下载。如果应用程序在后台运行了很长时间,然后我得到这个状态,就会出现唯一的问题:

    1. 下载报告处于活动状态
    2. 对应的交易尚未完成
    3. 由于某种原因,下载没有进一步进展

    鉴于上述保护措施,问题很明显,因为下载未运行,并且由于应用程序看到重复的活动下载而无法启动新的下载。

    我尝试恢复下载,但它什么也没做(我猜是因为状态没有暂停)。

    更新 1

    我找到了解决这个问题的方法,但对我来说它看起来像一个黑客:

    1. 当应用程序进入后台时暂停下载
    2. applicationWillEnterForeground.
    3. 继续暂停下载

    2是最有趣的部分。我有一个单身人士负责处理所有与商店相关的通知。我将其添加为事务观察者,didFinishLaunchingWithOptions仅在willTerminate. 我验证了应用程序进入前台状态后单例是相同的。然而,除非我再次将其添加为商店观察者,否则我看不到下载恢复。超级有趣。

    0 投票
    2 回答
    281 浏览

    swift - 我应该如何处理失败的 SKDownload?

    处理SKDownload更新时,我不确定如何对.failed状态做出反应。

    我在Apple 的开发者论坛中看到了发布的指南,但这意味着我必须等到用户退出并重新启动应用程序才能重新开始下载。

    稍后当用户重新启动应用程序并在启动时调用 addTransactionObserver 方法时,事务观察器将检测到不完整的Transaction 并通过 updatedTransactions 委托方法通知应用程序。该应用程序可以再次重试下载托管内容。

    与此相反,在本教程中,我被指示做相反的事情,并完成交易以让用户通过恢复购买来尝试再次下载。

    即使下载失败,也有很多方法可以改善用户体验... ...我们可以完成交易,用户可以使用恢复按钮下载文件。

    如果我们给用户选项,那么交易不应该完成,直到我们确定我们不再使用它(例如,如果您计划稍后恢复下载,那么不要完成交易)。

    这意味着我可以恢复失败的下载。那可能吗?

    我的paymentQueue: updatedDownloads方法如下:

    我希望我的用户能够重新尝试失败的下载,而无需重新启动应用程序。

    我怎样才能做到这一点?

    0 投票
    0 回答
    75 浏览

    swift - 使用 SKPaymentQueue 处理应用内购买后访问 SKDownload 的内容

    在成功进行应用内购买后,我一直在尝试访问下载的SKDownloadzip 文件:

    这是处理下载SKDownload文件的函数:

    当我检查download.contentURL它时:

    但是在尝试FileManager使用上面的这行代码访问文件时:

    我不断收到以下错误消息,指出该文件不存在:


    • 我尝试/在最后添加以将 zip 文件视为目录和许多其他内容均无济于事。

    • 我什至尝试访问包含该文件的目录(直到 zip 文件):

    错误说找不到“缓存”目录。

    • 我还尝试"Contents"像随机人找到的示例代码之一一样添加到路径中。

    我已经连续敲了一天多的头,但找不到任何关于此事的文件。任何帮助将不胜感激,谢谢!