我们的应用程序在应用程序购买中提供了苹果托管的额外内容,用户可以下载这些内容,但一些用户报告了下载问题。
它似乎在中途失败,提醒用户并重置所有按钮等,以允许用户再次购买(免费,因为他们已经购买)。如果用户随后尝试在应用程序中重新购买或恢复购买,仍然会失败。以下代码是处理失败状态的代码。
-(void) paymentQueue:(SKPaymentQueue *)queue updatedDownloads:(NSArray *)downloads{
for (SKDownload *download in downloads){
switch (download.downloadState){
case SKDownloadStateActive:{
//code removed for post
break;
}
case SKDownloadStateCancelled:{ break; }
case SKDownloadStateFailed:
{
//log the error
NSLog(@"Transaction error: %@", download.transaction.error.localizedDescription);
//let the user know
[[[UIAlertView alloc] initWithTitle:@"Error!" message:[NSString stringWithFormat:@"%@ download failed, please try again later", download.contentIdentifier] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
//post notification - caught in view controller for updating buy buttons etc
[[NSNotificationCenter defaultCenter] postNotificationName:IAPHelperDownloadFailedNotification object:download userInfo:nil];
// This should delete the download assets from the Cache folder.
NSError* error = nil;
[[NSFileManager defaultManager] removeItemAtURL:download.contentURL error:&error];
if(error){
//
}
//finish the transaction
[[SKPaymentQueue defaultQueue] finishTransaction:download.transaction];
break;
}
case SKDownloadStateFinished:{
//code removed for post
break;
}
case SKDownloadStatePaused:{
break;
}
case SKDownloadStateWaiting:{
break;
}
}
}我已经看过了堆栈溢出和其他地方,在应用程序购买中我能找到的小例子都和上面的一样。任何帮助或信息都是很棒的。
发布于 2014-03-08 11:04:58
我遇到了类似的问题,并在苹果的常见问题解答中找到了一个可能的解决方案: Q:我如何解决“您已经购买了此应用程序内购买但尚未下载”的问题。错误消息?答:你会得到“你已经购买了这个应用内购买,但它还没有下载。”错误消息,因为您没有在应用程序中调用SKPaymentQueue的finishTransaction:方法。调用finishTransaction:允许您从支付队列中删除交易。
我想我会要求我的IAP引擎在应用程序退出时检查是否有IAP正在处理(我的问题发生在用户在下载时停止应用程序),如果有,调用finishTransaction:。
希望能有所帮助。
https://stackoverflow.com/questions/21110364
复制相似问题