【问题标题】:iOS in-app restore purchases nightmareiOS 应用内恢复购买噩梦
【发布时间】:2015-03-15 18:17:56
【问题描述】:

我已经阅读了互联网上的所有线程等,当我尝试恢复购买的产品(沙盒环境)时,仍然得到零恢复交易。

我通过 iTunes connect 创建了 3 个非续订产品和 2 个沙盒测试器。

我在设置实际购买产品的能力时遇到了零问题;一切都很好。

我创建了一个“恢复购买”按钮,并试图让它工作。我一直在测试以下内容:安装应用程序并进行购买。再次购买,它会询问我是否要续订。删除应用并退出应用商店。重新安装应用程序并按恢复购买...零!!!

这是我正在使用的一些代码:

-(void)viewDidLoad
{
    [super viewDidLoad];

    //in-app purchase setup
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
}
-(void)viewDidAppear:(BOOL)animated
{
    //make request for in-app products
    if([SKPaymentQueue canMakePayments])
    {
        SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObjects:@"product1_id",@"product2_id",@"product3_id",nil]];
        request.delegate = self;

        [request start];
    }
    else
    {
        //alert user
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"..." message:@"Please enable In App Purchase in settings" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
    }
}

-(IBAction)restoreTransactionsPressed
{
    _refreshRequest = [[SKReceiptRefreshRequest alloc] init];
    _refreshRequest.delegate = self;
    [_refreshRequest start];
}
-(void)requestDidFinish:(SKRequest *)request
{
    if([request isKindOfClass:[SKReceiptRefreshRequest class]])
    {
        NSLog(@"Got a new receipt... %@",request.description);
        [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
    }
}
-(void)request:(SKRequest *)request didFailWithError:(NSError *)error
{
    NSLog(@"%@",error.description);
}

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
    NSLog(@"updatedTransactions");

    for(SKPaymentTransaction *transaction in transactions)
    {
        NSLog(@"updatedTransaction:%@ ... state:%@",transaction.originalTransaction.payment.productIdentifier,transaction.transactionState);

        switch(transaction.transactionState)
        {
            case SKPaymentTransactionStatePurchased:
                NSLog(@"SKPaymentTransactionStatePurchased");
                //unlock feature code
                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                break;

            case SKPaymentTransactionStateFailed:
                NSLog(@"SKPaymentTransactionStateFailed");
                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                break;

            case SKPaymentTransactionStateRestored:
                NSLog(@"SKPaymentTransactionStateRestored");
                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                break;

            default:
                break;
        }
    }
}

-(void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
{
    NSLog(@"paymentQueueRestoreCompletedTransactionsFinished");

    NSLog(@"received restored transactions: %i", (int)queue.transactions.count);

    for(SKPaymentTransaction *transaction in queue.transactions)
    {
        NSLog(@"transaction:%@",transaction);
    }
}
-(void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error
{
    NSLog(@"restoreCompletedTransactionsFailedWithError %@",error);
}

为什么我总是得到零恢复交易?

似乎“restoreCompletedTransactions”没有依次调用 - paymentQueue:updatedTransactions: 如果有帮助的话。

我不确定 SKReceiptRefreshRequest 是否必要,但我尝试在恢复前刷新收据和在恢复前不刷新收据。

请不要发布帖子的链接。我已经调查了几天了!有人声称苹果的沙盒过去有问题……这可能是原因吗? tyvm 进阶;感谢所有帮助!

【问题讨论】:

  • 您甚至可以恢复在沙盒环境中进行的购买吗?
  • 你说你有非更新产品。 Apple's documentation 表示无法恢复的原因之一是:“您正在尝试恢复不可恢复的非续订订阅或消耗品。”
  • 我不知道……Apple的文档/编程指南中没有提到这种情况吗?
  • 在询问之前你应该先看看四周。经过大约 30 秒的搜索,我找到了 this。这可能会回答您的问题。
  • 很高兴能帮上忙

标签: ios in-app-purchase restore storekit


【解决方案1】:

根据Apple's documentation,您无法恢复非续订订阅。另外,请阅读here 以获得更详细的说明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2012-06-21
    • 1970-01-01
    相关资源
    最近更新 更多