首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SKDownloadStateFailed状态下,iOS处理IAP下载失败

在SKDownloadStateFailed状态下,iOS处理IAP下载失败
EN

Stack Overflow用户
提问于 2014-01-14 17:50:55
回答 1查看 323关注 0票数 1

我们的应用程序在应用程序购买中提供了苹果托管的额外内容,用户可以下载这些内容,但一些用户报告了下载问题。

它似乎在中途失败,提醒用户并重置所有按钮等,以允许用户再次购买(免费,因为他们已经购买)。如果用户随后尝试在应用程序中重新购买或恢复购买,仍然会失败。以下代码是处理失败状态的代码。

代码语言:javascript
复制
-(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;
        }
    }
}

我已经看过了堆栈溢出和其他地方,在应用程序购买中我能找到的小例子都和上面的一样。任何帮助或信息都是很棒的。

EN

回答 1

Stack Overflow用户

发布于 2014-03-08 11:04:58

我遇到了类似的问题,并在苹果的常见问题解答中找到了一个可能的解决方案: Q:我如何解决“您已经购买了此应用程序内购买但尚未下载”的问题。错误消息?答:你会得到“你已经购买了这个应用内购买,但它还没有下载。”错误消息,因为您没有在应用程序中调用SKPaymentQueue的finishTransaction:方法。调用finishTransaction:允许您从支付队列中删除交易。

我想我会要求我的IAP引擎在应用程序退出时检查是否有IAP正在处理(我的问题发生在用户在下载时停止应用程序),如果有,调用finishTransaction:。

希望能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21110364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档