Following in app purchase, app crashing on startup. productIdentifier=nil?

后端 未结 5 1520
天命终不由人
天命终不由人 2020-12-05 14:09

I have a few users who have reported that after attempting an in app purchase the app is now crashing on startup. I have asked them to delete and reinstall the app which has

5条回答
  •  星月不相逢
    2020-12-05 14:48

    Elaborating on Shawn's answer, in - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions you probably have some code like this:

    - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
    {
        for (SKPaymentTransaction *transaction in transactions)
        {
            switch (transaction.transactionState)
            {
                case SKPaymentTransactionStatePurchased:
    
                                    [self completeTransaction:transaction];
    
                                    break;
    
                            case SKPaymentTransactionStateFailed:
    
                                    [self failedTransaction:transaction];
    
                                    break;
    
                            case SKPaymentTransactionStateRestored:
    
                                    [self restoreTransaction:transaction];
    
                            default:
    
                                    break;
            }     
        }
    }
    
    - (void) restoreTransaction: (SKPaymentTransaction *)transaction
    {   
        /* Handle restore here */
        [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; 
    }
    

    You can handle nil productIdentifiers in restoreTransaction: by adding a check to see if the productIdentifier is nil, like this:

    - (void) restoreTransaction: (SKPaymentTransaction *)transaction
    {   
        if (!transaction.originalTransaction.payment.productIdentifier) {
            NSLog(@"productIdentifier is nil; Apple bug?");
            [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
            return;
        }
    
        /* Handle restore here */
        [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
    }
    

    This technique fixed the problem for me in my app. The app started, logged "productIdentifier is nil; Apple bug?" and didn't crash. When I then manually re-restored transactions, Apple sent a valid transaction, and the app worked as designed.

提交回复
热议问题