首页 文章

由于恢复IAP,Apple拒绝了我的应用程序

提问于
浏览
8

我有一个恢复按钮 . 问题是,如果他们没有“完成恢复,并且他们尝试购买物品,并且他们已经购买了该物品,我需要告诉他们他们已经购买了它而不进行购买 . 所以我需要一种方法来知道他们购买了哪些物品,而不进行恢复 . 我试图在用户试图购买时首先进行恢复,但苹果拒绝了我的应用 . 他们表示,在显示“确认应用程序内购买”对话框之前,无法进行还原 .

请帮我找到正确的方法 .

提前致谢 .

3 回答

  • 1

    您可以将这些数据保存在NSUserDefaults中 . 而且您不需要显示警告说已经购买了这些物品 . 如果它的非消费品苹果显示警告说他们已经购买了该物品!

    EDIT:

    1)您需要在视图中添加3个按钮

    • 购买按钮

    • 还原按钮

    • 演示版

    如果您在应用中支持应用内购买,则需要为用户提供还原选项 . 否则Apple将拒绝您的应用 .

    2)如果用户按下购买按钮,请不要检查用户是否已经购买了您的应用程序 . 因为Apple不会向用户收取两次相同的非消费品 . 所以只需查看您的购买代码,如果用户已购买它,Apple的StoreKit框架将调用它的委托方法

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

    SKPaymentTransactionStatePurchased

    交易状态 . 所以你可以给他登录屏幕 .

    3)如果用户按下恢复按钮,则只需执行恢复代码

    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
    

    并且在第二步中它将调用具有相同事务状态的委托方法 . 因此,您可以向用户显示登录页面 .

    4)如果用户按下演示版按钮,请向他演示演示版 .

    5)如果用户购买了您的应用程序,将其删除,如果他重新安装,请将其视为新用户 . 向他展示这3个按钮,用户可以恢复购买,然后您可以向他显示登录页面 .

    6)如果您确实需要跟踪是否在确切的设备上购买应用程序,那么您可以使用钥匙串存储您的数据,因为即使应用程序已卸载或删除,也不会删除钥匙串项目 . 这个Api会帮助很多link,看看吧

    要么

    您可以在Keychain数据上参考Apple的documentation

  • 2

    根据Apple "a restore cannot occur before the Confirm In-App Purchase dialog is displayed."使用 *- (void) paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue )queue function ,检查代码

    - (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error {  
         NSLog(@"%@",error);
    }
    
    // Call This Function
    - (void) checkPurchasedItems
    {
        [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
        [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
    }
    
    //Then this delegate Function Will be fired
    - (void) paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
    {
        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];
    
            NSLog(@"%@",purchasedItemIDs);
        }
    }
    
  • 6

    据我所知,没有其他办法可以做到这一点 .

    您应该提供还原按钮以恢复应用内购买,否则Apple将拒绝您的应用 .

    如果不显示应用程序内购买确认警报,您将无法连接到应用内服务器或恢复功能 .

相关问题