Storekit в iOS, предоставляя 0 для response.products - PullRequest
1 голос
/ 04 августа 2020

Я пытался заставить работать простую покупку расходных материалов iOS в приложении. К сожалению, response.products возвращался как пустой 0. У меня есть членство в качестве разработчика, я создал покупку внутри приложения itunesconnect с идентификатором продукта «Getit» и протестировал приложение на testflight. У меня есть действующее соглашение о платном приложении, которое было одобрено Apple. Само приложение еще не было отправлено на рассмотрение, но я предполагаю, что Apple позволяет нам протестировать приложение перед тем, как отправить наше приложение или соглашения в первый раз.

controller.h

#import <StoreKit/StoreKit.h>
@interface ViewController : UIViewController <SKProductsRequestDelegate,SKPaymentTransactionObserver> {
    SKProductsRequest *productsRequest;
}
@property (strong, nonatomic) SKProduct *product;

контроллер.m

-(void)fetchAvailableProducts {
    [SKPaymentQueue defaultQueue];
 
    if ([self canMakePurchases]) {
       SKProductsRequest *request = [[SKProductsRequest alloc]
                        initWithProductIdentifiers:
                        [NSSet setWithObject:@"Getit"]];
        request.delegate = self;

        [request start];
     } else {
       
         UIAlertController * alert = [UIAlertController
                                                 alertControllerWithTitle:@"Unable to make purchases"
                                                 message:@"Purchases have been disabled on your device. We cannot proceed with the purchase."
                                                 preferredStyle:UIAlertControllerStyleAlert];

                               UIAlertAction* yesButton = [UIAlertAction
                                                       actionWithTitle:@"Cancel"
                                                       style:UIAlertActionStyleDefault
                                                       handler:^(UIAlertAction * action) {                                                                                                                        
                                                           
                                                       
                                                       }];
         [alert addAction:yesButton];

                               [self presentViewController:alert animated:YES completion:nil];
     }

}
- (BOOL)canMakePurchases {
   return [SKPaymentQueue canMakePayments];
}
#pragma mark -
#pragma mark SKProductsRequestDelegate

-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{

    NSArray *products = response.products;
    NSLog(@"%@", response.products);
    if (products.count != 0)
    {
        _product = products[0];
        SKPayment *payment = [SKPayment paymentWithProduct:_product];
        [[SKPaymentQueue defaultQueue] addPayment:payment];
        
    } else {
      
        UIAlertController * alert = [UIAlertController
                                                        alertControllerWithTitle:@"Unable to make purchases"
                                                        message:@"We are unable to find any available items for purchase"
                                                        preferredStyle:UIAlertControllerStyleAlert];

                                      UIAlertAction* yesButton = [UIAlertAction
                                                              actionWithTitle:@"Cancel"
                                                              style:UIAlertActionStyleDefault
                                                              handler:^(UIAlertAction * action) {
                                                                                                                           
                                                                  
                                                              
                                                              }];
                [alert addAction:yesButton];

                                      [self presentViewController:alert animated:YES completion:nil];
    }

    products = response.invalidProductIdentifiers;

    for (SKProduct *product in products)
    {
        NSLog(@"Product not found: %@", product);
    }
}

#pragma mark -
#pragma mark SKPaymentTransactionObserver

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
        for (SKPaymentTransaction *transaction in transactions)
    {
        switch (transaction.transactionState) {
            case SKPaymentTransactionStatePurchased:
                [self progrets];
                [[SKPaymentQueue defaultQueue]
                     finishTransaction:transaction];
                break;

            case SKPaymentTransactionStateFailed:
                NSLog(@"Transaction Failed");
                [spinner stopAnimating];
              
                [[SKPaymentQueue defaultQueue]
                     finishTransaction:transaction];
                break;

            default:
                break;
        }
    }
}
-(void)progrets {
    self.spinner.hidden = NO;
                              [spinner startAnimating];
                        
                   [self performSelector:@selector(unlockFeature)
                                                   withObject:nil
                                                   afterDelay:0.1];
}

-(void)unlockFeature


   {
        NSLog(@"done");
  }
...