iOS In App Purchase非消耗性产品确定是否重新购买或恢复[重复]

问题描述

||                                                                                                                   这个问题已经在这里有了答案:                                                      

解决方法

您可以检查将在restoreTransaction方法之后填充的事务数组,如果事务数组为空,则表示用户首次下载此升级。在另一种情况下,您将检查Array中的所有交易并将
transaction.payment.productIdentifier
与必要的产品标识进行比较。如果不存在,则在交易数组中添加付款。 对于非消耗性应用内购买,我使用了以下代码:
#define kInAppPurchaseProUpgradeProductId @\"upgradeProductId\"

//...
//your payment code for all SKPaymentTransactionStates
//...

//method called when BUY button press
-(void)purchaseProUpgrade{
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}
//when restore completed delegate method calls 
-(void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue{

    if([[[SKPaymentQueue defaultQueue] transactions] count]==0)            
        [self addNewPaymentForProductId:kInAppPurchaseProUpgradeProductId];
    else            
        for (SKPaymentTransaction *transaction in [[SKPaymentQueue defaultQueue] transactions]){

            if (![transaction.payment.productIdentifier isEqualToString:kInAppPurchaseProUpgradeProductId]){
                [self addNewPaymentForProductId:kInAppPurchaseProUpgradeProductId];
                break;
            }
        }    
}

-(void)addNewPaymentForProductId:(NSString *)productId{
    if([SKPaymentQueue canMakePayments]){
        SKPayment *payment = [SKPayment paymentWithProductIdentifier:productId];
        [[SKPaymentQueue defaultQueue] addPayment:payment];
    }
}
唯一的缺点是每次您呼叫
restoreCompletedTransactions
时,都会弹出一个窗口,要求您输入当前用户的密码。此解决方案可确保每次升级的购买时间不会超过1次,但是每次尝试购买其中一个升级时,所有升级都会恢复。     ,不确定,但也许您可以检查ѭ​​3ѭ是否存在或是否不同。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...