0

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

我正在使用以下代码恢复应用内购买。

- (void) paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
{

    //NSLog(@"into method1");
    purchasedItemIDs = [[NSMutableArray alloc] init];

    NSLog(@"received restored transactions: %i", queue.transactions.count);
    for (SKPaymentTransaction *transaction in queue.transactions)
    {
        NSString *productID = transaction.payment.productIdentifier;
        [purchasedItemIDs addObject:productID];
    }

    // [customSpinner hide:YES];

    if (queue.transactions.count==0)
    {

        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"FameFace" message:@"It seems you have not buy this Package" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
        [alert show];
        [alert release];

    }

    else
    {

        NSLog(@"Data available");


       NSString *isInApp = [[NSUserDefaults standardUserDefaults]valueForKey:@"Package"];

        if ([isInApp 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 ([isInApp 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 ([isInApp 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];
            }


        }
}

以下是交易成功时的代码。

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

                break;

            case SKPaymentTransactionStatePurchased:
                //[self downloadFromURL:[NSURL URLWithString:@"http://www.iphonedevnation.com/tutorials/ForestGreen.mp3"]];
                // flgCheck = 1;
                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];

                [self completeTransaction:transaction];
   NSString *isInApp = [[NSUserDefaults standardUserDefaults]valueForKey:@"Package"];
 if ([isInApp isEqualToString:@"Pack1"])
                {
                    //by manthan...7th  may
                    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 ([isInApp 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 ([isInApp isEqualToString:@"Pack3"])
                {
                    //by manthan... 7th may
                    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];
                    }
                }

这工作正常。

我正在做的是当用户从 In App Purchase 购买包时,我在我的数据库中插入一些图像。

但是由于产品是非消耗品,如果用户删除应用程序并尝试恢复图像,我的数据库不会得到更新。

任何帮助将不胜感激。

谢谢...

已编辑

当用户尝试恢复购买时,我将我的代码放在下面的方法中。

由于我有一个恢复按钮,并且在按下该按钮时,用户之前购买了可能是 2,3 或 4 个的包(用户购买过的 5 个包中的任何一个,因为这些是非消耗性产品)。

case SKPaymentTransactionStateRestored:
                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];

                NSString *pk = [[NSUserDefaults standardUserDefaults]valueForKey:@"Package"];

                if ([pk isEqualToString:@"Pack1"])
                {
                    //by manthan...7th  may
                    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 ([pk isEqualToString:@"Pack2"])
                {
                    //by manthan... 7th may
                    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 ([pk isEqualToString:@"Pack3"])
                {
                    //by manthan... 7th may
                    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];
                    }
                }

当只有一次购买时,我可以简单地在SKPaymentTransactionStateRestored中更新我的数据库。

但是当我有多个非消耗品时,我该怎么办?

已编辑

 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"])
                {
                    //by manthan... 7th may
                    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"])
                {
                    //by manthan... 7th may
                    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];
                    }
                }
4

1 回答 1

2

您需要SKPaymentTransactionStateRestoredupdatedTransactions方法中使用 case 来执行此操作。

恢复时会执行这种情况。

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
    for (SKPaymentTransaction * transaction in transactions)
   {
        switch (transaction.transactionState)
        {
            case SKPaymentTransactionStatePurchased:
                //do your stuff
                break;
            case SKPaymentTransactionStateFailed:
                //do your stuff
                break;
            case SKPaymentTransactionStateRestored:
                //do your database stuff
            default:
                break;
        }
    };
}

参考

支付交易状态

事务的状态。

enum { SKPaymentTransactionStatePurchasing,
SKPaymentTransactionStatePurchased, SKPaymentTransactionStateFailed,
SKPaymentTransactionStateRestored };

typedef NSInteger SKPaymentTransactionState;

常数

SKPaymentTransactionStatePurchasing

The transaction is being processed by the App Store.

SKPaymentTransactionStatePurchased

The App Store successfully processed payment. Your application should provide the content the user purchased.

SKPaymentTransactionStateFailed

The transaction failed. Check the error property to determine what happened.

SKPaymentTransactionStateRestored

This transaction restores content previously purchased by the user. Read the originalTransaction property to obtain information about the original purchase.

Available in iOS 3.0 and later.

Declared in SKPaymentTransaction.h.

查看SKPaymentTransaction了解更多信息

于 2013-05-07T12:45:05.240 回答