在应用程序购买下载没有发生

时间:2013-10-20 18:19:55

标签: ios in-app-purchase

我从Apple服务器托管内容下载工作,但在IAP UI的进一步开发中,我遇到了需要重新下载内容的情况。

这种情况下的内容是一个zip文件,它是在Xcode中创建的一组图像和一个包含相关数据的plist文件。

原始下载工作正常,我能够像处理目录一样处理zip文件。

在继续开发应用程序时,我从测试设备中删除了该应用程序。这意味着内容不再出现在设备上。 in app事务从未完成,所以我希望下载再次处理。

最初,zip文件已下载并保存到caches目录,我可以从那里处理它。现在,似乎IAP框架认为zip文件存在,但实际上并非如此。 paymentQueue:updatedDownloads:方法在下载状态等于SKDownloadStateFinished时触发,不会发生任何下载活动。好。这不在我的掌控之中。我只需要查看我给出的下载URL,对吧?因此,在case SKDownloadStateFinished:内我调用了[self processURL:download.contentURL fromProduct:download.contentIdentifier];,它处理引用的下载。这是该方法的开始:

-(void)processURL:(NSURL *)directoryURL fromProduct:(NSString *)productIdentifier
{
   int itemsAdded = 0;
   NSFileManager *filemanager = [NSFileManager defaultManager];
   NSMutableSet *masterIndex = [NSMutableSet new];
   BOOL isDir;
   if ([filemanager fileExistsAtPath:[directoryURL path] isDirectory:&isDir]) {
      NSLog(@"URL %@ exists. Is it a directory? %@",directoryURL,isDir?@"YES":@"NO");
   } else {
      NSLog(@"URL %@ does not exist.",directoryURL);
   }

我得到的是输出:

URL file://localhost/private/var/mobile/Applications/40733984-E18D-4450-A98E-D8CCC56D2600/Library/Caches/8E29E63C-9C32-4D92-AC84-23BDA946DE5F.zip/ does not exist.

拨打[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];似乎没有帮助。它只是认为没有重新下载zip文件就完成了。

有关该怎么做的任何建议?

编辑:这真的令人沮丧。自从我的原帖后,我尝试了以下内容: *重新启动我的iPad *重新启动Xcode *在我的iPad上干净(我没有屏住呼吸 - 我希望清除缓存目录,我认为清洁实用程序无法访问) *使用plist文件中的更新信息更新了我的应用内购买包。 *更新了应用内购买套餐的版本。

当它试图下载时,它仍然试图下载相同的zip文件名,但它仍然不存在。我想通过更改包,即使使用相同的包名,下载也会提取不同的zip名称。但也许它只是一个哈希或包名。

我知道caches目录以某种方式被破坏了。我的下一步将是使用不同的包名创建另一个包。我猜这会工作正常,但这并不能解决我的问题。

我也知道可能导致问题的情况。似乎Xcode 5响应按下构建和运行按钮的速度较慢。结果是我点击了两次。当然,这会导致问题。在这种情况下,我认为,我有一种致命的拥抱,锁定了我的iPad。我不得不手动关闭电源并重新启动两次,然后才能再次正常恢复。

编辑: 新项目未下载。这是我检查过的物品清单。请编辑此项以包含更多项目,以检查您是否有更多想法。

  • 确保测试用户尚未在生产中使用。如果是这样,则需要创建新的测试用户。
  • 确保对象注册为SKPaymentTransactionObserver。这包括设置界面,以及在启动时拨打[[SKPaymentQueue defaultQueue] addTransactionObserver:self]
  • 确保用户可以付款。
  • 确保transaction.transactionState == SKPaymentTransactionStatePurchased(或SKPaymentTransactionStateRestored,如果要恢复交易)
  • 确保交易未完成([[SKPaymentQueue defaultQueue] finishTransaction:transaction])。
  • 确保产品ID与iTunes Connect中设置的产品ID匹配(如果不是这样,您将无法购买)。
  • 在物理设备上进行测试。无法在模拟器上测试这些下载。
  • (推测)关闭App Store的通知,以防止测试用户被取消。

1 个答案:

答案 0 :(得分:1)

根据我使用Apple托管下载进行应用内购买的经验,如果收到下载对象且指定的URL指向不存在的文件,则该事务现在毫无价值(可能来自测试用户无效或已删除)。最好的办法是完成该交易,如果您需要再次下载,请通过购买或恢复来申请新的交易。新的不仅仅是指向已删除文件的反刍交易,而是与一组新的下载相关联。