xcode restoreCompletedTransactions无法在带有Apple托管内容的沙箱中工作

时间:2014-03-25 19:44:34

标签: xcode transactions in-app-purchase restore

我在应用程序商店中有很多应用程序,但我的第一次应用内购买遇到了问题。 我正在iPad上测试xcode 5,沙盒中有许多测试用户。 应用内购买适用于Apple托管的其他视频文件。

原始购买和视频下载顺利。恢复购买正常,但如果我删除应用程序并重新安装它,恢复不起作用。 但是,重新安装应用程序后,如果我进行了回购并通过“确认您的应用程序内购买” - > “你想买 _ _?” - > [环境沙箱] - >按“购买”并获取 - > “您已经购买了应用程序内购买,但尚未下载”[环境沙箱] - >然后按“确定”,然后恢复购买并下载视频。 我的猜测是,重新购买mumbo-jumbo在事务队列中设置了一个事务,但在重新安装后没有设置“restoreCompletedTransactions”。

在下面的代码中,当还原不起作用时,仅显示“Restore transaction START”和“Restore transaction END”日志。 重新安装应用后,“restoreCompletedTransactions”似乎没有找到任何交易。

我搜索过几十个帖子(Wenderlich,Troy Brant是一个完整的演练等)但似乎大部分还原都是重置原始购买附带的内容标记,而不是后续下载或不担心用户删除应用程序释放空间并重新安装。

期望用户完成“购买” - > “”你已经购买了“路线是一个糟糕的解决方案,因为有些人可能害怕他们正在重新购买应用程序。 唯一的另一种选择是将所有视频放在初始包中,然后使用钥匙串重置标志,但这会增加下载的大小。

任何建议都会受到欢迎。 如果有人知道将事务添加到事务队列的方法,那将是一种可能的解决方案。

//按下恢复按钮时调用:

- (void) restoreTapped
{                            
    NSLog (@"Restore transaction START");

    [ [SKPaymentQueue defaultQueue] restoreCompletedTransactions ];

    NSLog (@"Restore transaction END");
}

// SKPaymentTransactionObserver委托方法:

-(void) paymentQueueRestoreCompletedTransactionsFinished : (SKPaymentQueue *) queue
{
    NSLog (@"received restored transactions: %i", queue.transactions.count);

    for (SKPaymentTransaction * transaction in queue.transactions)
    {
        [ [SKPaymentQueue defaultQueue] startDownloads : transaction.downloads ];
    }
}


-(void) paymentQueue : (SKPaymentQueue *) queue updatedTransactions : (NSArray *) transactions
{
    for (SKPaymentTransaction * transaction in transactions)
    {
        switch (transaction.transactionState)
        {
            case SKPaymentTransactionStatePurchased:

                           [omitted]                
                 break;

            case SKPaymentTransactionStateRestored:

                     NSLog (@"Transaction State restored.");
                 break;


            case SKPaymentTransactionStateFailed:

                 NSLog (@"Failed transaction.");
                 [self failedTransaction : transaction];    break;

            default:                                       break;
        }
    }
}

0 个答案:

没有答案