【问题标题】:Restore already bought in-app-purchases on iPhone?恢复已经在 iPhone 上购买的应用内购买?
【发布时间】:2011-12-07 08:59:03
【问题描述】:

到目前为止:重新安装后,用户需要点击“购买功能”,然后他对 0.99 美元的问题感到害怕,然后必须登录,然后被告知该功能已经购买,他免费获得.

我知道苹果是一种宗教,用户是坚定的信徒,但没有更好的方法吗? :-) 我想要的是在不实际购买的情况下检查该功能。让用户输入他的帐户信息似乎是必要的,也许买一个 0.00 美元的功能?还是有什么方法可以做到这一点?

我将 MKStoreKit 用于整个应用内购买,但任何解决方案都会很棒。


更新

感谢 darvids0n,您的方法解决了我的问题!这是其他尝试相同的人的一些工作代码:

- (void)removePreviousPurchases { //just for sandbox testing
    [[MKStoreManager sharedManager] removeAllKeychainData];
}

- (void)restorePreviousPurchases { //needs account info to be entered
    if([SKPaymentQueue canMakePayments]) {
        [[MKStoreManager sharedManager] restorePreviousTransactionsOnComplete:^(void) {
             NSLog(@"Restored.");
             /* update views, etc. */
        }
        onError:^(NSError *error) {
            NSLog(@"Restore failed: %@", [error localizedDescription]);
            /* update views, etc. */
        }];
    }
    else
    {
        NSLog(@"Parental control enabled");
        /* show parental control warning */
    }
}

【问题讨论】:

    标签: ios in-app-purchase restore


    【解决方案1】:

    如果 0.99 美元的商品是非消耗品,那么您应该提供一个“恢复购买”按钮(或类似按钮)来调用

    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
    

    假设您已经添加了一个事务观察器,并实现了protocol,包括一个处理恢复事务的案例(状态为SKPaymentTransactionStateRestored),这将起作用。

    【讨论】:

    • 谢谢,终于找到了可以使用的MKStore-Kit方法! (见编辑我的问题)
    • 如果我有 10 个非消耗品购买 ID,其中 4 个是用户购买的。在恢复过程中,我怎样才能知道哪些是以前购买的,哪些不是?
    • @Satyamsvv 您不会收到用户未购买的购买的回调。在SKPaymentTransactionObserver 方法-paymentQueue:updatedTransactions: 中你只会得到4 个更新的事务,其中transactionState 将是SKPaymentTransactionStateRestored
    • 不幸的是,我根本没有收到 paymentQueue:updatedTransactions: 电话。我在这里发布了我的问题:stackoverflow.com/questions/13686919/… 你能验证并告诉我我做错了什么吗?
    • 嗨@darvids0n,如何检查他们是否没有要恢复的项目并向用户显示合适的消息。
    【解决方案2】:

    添加这两个方法:

    [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    
    [[SKPaymentQueue defaultQueue]restoreCompletedTransactions];
    

    【讨论】:

    • 这两个方法应该在哪里添加?
    • 我应该把这个放在哪里
    • SKPayment *payment = [SKPayment paymentWithProduct:product]; [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; [[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; [[SKPaymentQueue defaultQueue] addPayment:payment];
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    相关资源
    最近更新 更多