簡體   English   中英

用於iOS非消費類應用程序內購買的恢復按鈕

[英]Restore button for iOS non-consumable in-app purchase

不幸的是,由於沒有恢復按鈕,Apple拒絕了我的應用程序。 我希望為用戶提供無縫體驗,但存在一些問題。

- (void)purchaseProUpgrade
{ 
   [[SKPaymentQueue defaultQueue] addTransactionObserver:self];

   // User is prompted for iTunes username and password here (1)
   [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}

// Then this delegate Function Will be fired
- (void) paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
{
    if( queue.transactions.count == 0 ) {

        [self setUpgradeProductId];

       // User is prompted for iTunes username and password here (2)
        SKPayment *payment = [SKPayment paymentWithProductIdentifier:kInAppPurchaseProUpgradeProductId];
       [[SKPaymentQueue defaultQueue] addPayment:payment];                                                                 

    }else {

      [[NSNotificationCenter defaultCenter] postNotificationName:kInAppPurchaseManagerTransactionSucceededNotification object:self userInfo:NULL];
    }
  }

以上是一個很好的解決方案嗎? 邏輯是:

  1. 用戶按下按鈕即可刪除應用內購買。
  2. 檢查用戶是否已經購買(用戶必須輸入用戶名和密碼)
  3. 如果用戶已進行購買,請恢復
  4. 如果用戶尚未進行購買,請提示付款(用戶必須再次輸入密碼)。

這種方法的問題是:1。額外的服務器調用2.用戶必須輸入兩次詳細信息。

有沒有人真正實現了可以演示的“恢復”按鈕?

無需實現自己的邏輯只需實現這一點

- (IBAction)restorePreviousTransaction:(id)sender {
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}

這將調用此方法

 - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
   case SKPaymentTransactionStateRestored:
                if ([self respondsToSelector:@selector(restoreTransaction:)]) {
                    [self restoreTransaction:transaction];
                    return;                
}

這將調用這些委托方法以實現事務成功或失敗

- (void)restoreTransaction:(SKPaymentTransaction *)transaction
-(void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error
-(void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue

將此代碼添加到已添加還原按鈕的頁面:

- (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);
    }
}

Apple拒絕使用In App Purchase的應用程序,該應用程序沒有恢復購買按鈕。 在應用視圖中,添加還原按鈕。 然后在In App Purchase幫助程序類中,添加以下方法:

- (void)restoreCompletedTransactions {
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 
}

現在從按鈕單擊操作調用此方法,它將恢復以前的購買。

*- (IBAction)restorePreviousTransaction:(id)sender {
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}
delegate method call:
 - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
   case SKPaymentTransactionStateRestored:
                if ([self respondsToSelector:@selector(restoreTransaction:)]) {
                    [self restoreTransaction:transaction];
                    return;                
}
- (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);
    }
}*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM