0

我有一个应用程序,其中有 5 次非消耗性应用程序内购买。

在每次应用内购买时,我都会用图像更新我的数据库。

有 5 个包可用于 5 个非消耗性应用内购买。

现在有一个恢复购买功能,因为它是非消耗性的应用内购买。

我的应用程序中有一个恢复按钮。但是如何识别已经购买了哪些产品?

我使用以下代码在应用程序购买中恢复。但它不会更新我的数据库,因为它不知道以前购买了哪些产品。

    if ([transaction.payment.productIdentifier isEqualToString:@"Pack1"])
    {
        if ([[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedp1Once"])
        {
           // app already launched
           NSLog(@"Launching secondtime");
       }
       else
       {
           [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedp1Once"];
           NSLog(@"Launching first time");
           requestText= @"Animal";
           [self MakeQueryForUpdate];
           [self getdata];
       }
}


else if ([transaction.payment.productIdentifier isEqualToString:@"Pack2"])
{

    if ([[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedp2Once"])
    {
        // app already launched
        NSLog(@"Launching secondtime");
    }
    else
    {
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedp2Once"];
        NSLog(@"Launching first time");
        requestText= @"Celebrity";
        [self MakeQueryForUpdate];
        [self getdata];
    }

}

else if ([transaction.payment.productIdentifier isEqualToString:@"Pack3"])
{

    if ([[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedp3Once"])
    {
        // app already launched
        NSLog(@"Launching secondtime");
    }
    else
    {
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedp3Once"];
        NSLog(@"Launching first time");
        requestText= @"Nature";
        [self MakeQueryForUpdate];
        [self getdata];
    }
}

如何获取仅购买的产品 ID 的列表?

任何帮助将不胜感激...

4

2 回答 2

5

您可以使用以下方法恢复购买:

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

然后SKPaymentTransactionObserver将调用它的

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions

SKPaymentTransactionStatePurchased交易状态。您可以看到它为交易返回一个数组

您可以使用以下方式获得单笔交易,

for (SKPaymentTransaction * transaction in transactions) {
    NSLog(@"Purchased indentifier : %@", transaction.payment.productIdentifier);
}

这将打印出用户已购买的标识符。您可以针对这些值设置NSUserDefaults

于 2013-05-13T05:43:34.447 回答
4

要获取已购买产品的列表,您可以调用以下函数:

[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

这将返回以前购买的物品的列表。

你可以在这里找到更多细节,这里是苹果的文档。

于 2013-05-13T05:43:33.597 回答