【问题标题】:IAP Restore buttonIAP 恢复按钮
【发布时间】:2014-08-16 18:52:12
【问题描述】:

我正在使用非消耗性 IAP 并尝试让“恢复”按钮正常工作。

我注意到,当用户尝试购买他们已经购买的东西时,会出现一条 Apple 提醒,说“你已经购买了这个。你想再次免费获得它吗?”

所以我想知道如何为我的恢复按钮使用相同的收据验证方法/代码?

我似乎找不到它的代码。我看过paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 和其他地方?

你能帮忙吗?谢谢!

更新

- (IBAction)purchaseRestore:(id)sender {
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    [[SKPaymentQueue defaultQueue]restoreCompletedTransactions];
    // Stack
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
    NSLog(@"4 IBAction Purchase Restore Method");
}

更新 2 我不知道我是否做对了,加倍了一些代码,还是添加了不需要的代码。

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
    for (SKPaymentTransaction *transaction in transactions) {
        switch (transaction.transactionState) {
            case SKPaymentTransactionStatePurchasing:
                NSLog(@"2 Payment Queue updatedTransactions - needs to verify logged in user: Purchasing Product From Store!");
                break;
            case SKPaymentTransactionStatePurchased:
                if ([transaction.payment.productIdentifier
                     isEqualToString:INAPP_PRODUCT_ID_3]) {
                    NSLog(@"3 Payment Queue updatedTransactions - Product Purchased From Store!");
                    //Not sure if I need this
                    UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:
                                              @"3 Payment Queue updatedTransactions - Seems to to this twice: Purchase is completed succesfully" message:nil delegate:
                                              self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
                    [alertView show];

                    [self saveTransactionReceipt:transaction];
                    NSLog(@"3 Payment Queue updatedTransactions - Save Transaction Receipt: Called after product purchased");
                    [self saveValue:transaction];
                    NSLog(@"3 Payment Queue updatedTransactions - Save Value: Called after product purchased");
                    [self showButtonThree];
                    NSLog(@"3 Payment Queue updatedTransactions: will Show button Three now");

                    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
                    [defaults setBool:YES forKey:@"purchasedThree"];
                    NSLog(@"updatedTransactions Yes for purchasedTeamThree: %hhd", [defaults boolForKey:@"purchasedThree"]);
                    [defaults synchronize];

                    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                    NSLog(@"3 Payment Queue finishTransaction: Run");
                }
                break;
            case SKPaymentTransactionStateRestored:
                    NSLog(@"Restored");
                    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                break;
            case SKPaymentTransactionStateFailed:
                purchaseButton.enabled = YES;
                NSLog(@"2 Payment Queue updatedTransactions: Purchase failed ");
                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                break;
            default:
                break;
        }
    }
}

【问题讨论】:

    标签: ios in-app-purchase


    【解决方案1】:

    您的问题实际上对我也很有用,因为您让我意识到,我目前在 AppStore 的审批过程中待处理的应用程序可能会被拒绝,因为我没有实现恢复按钮(我只是添加了一个标签说再次按下购买按钮将恢复以前的购买)。

    执行还原过程的正确方法是实现一个调用此方法的按钮:

    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
    

    然后,当然是恢复仅限付费用户使用的应用功能。

    希望这会有所帮助。

    【讨论】:

    • 您好,感谢您的回复。那真的是唯一需要的线路吗?我一直在尝试一大堆不同的东西,但无法让它发挥作用。你把那行代码放在哪里,购买恢复按钮时的 IBAction,或者放在updatedTransactions 部分,或者其他什么地方?谢谢!
    • @Reez 不客气!我添加了一个与调用[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 的IBAction 相关联的恢复按钮,然后在-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 中添加了一个用于SKPaymentTransactionStateRestored 的开关盒,与我想你也为SKPaymentTransactionStatePurchased 设置的开关盒非常相似。我也在 StackOverflow 上查看了其他答案,这似乎就是你需要做的。它实际上在我的测试中有效,但我的审批流程仍在等待中......
    • 知道了,我在上面添加了我的恢复按钮代码,现在添加了[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];...你能告诉我你的SKPaymentTransactionStateRestored 使用什么吗?我理解你所说的应该类似于SKPaymentTransactionStatePurchased,但我无法确切知道需要哪些部分才能被解雇。
    • 这是我的-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 方法。我将把它分成这个和另一个评论。 { for (SKPaymentTransaction *transaction in transactions) { switch (transaction.transactionState) { case SKPaymentTransactionStatePurchased: [self unlockFeature]; // your method to unlock paid features [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; break;
    • case SKPaymentTransactionStateRestored: [self restorePreviousPurchase]; // your method to unlock paid features [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; break; case SKPaymentTransactionStateFailed: // NSLog(@"Transaction Failed"); [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; break; default: break; } } }
    猜你喜欢
    • 2014-12-02
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    相关资源
    最近更新 更多