Как я могу решить проблему при покупке приложения SKProductsResponse invaild ID

#ios #objective-c #iphone #in-app-purchase

#iOS #objective-c #iPhone #покупка в приложении

Вопрос:

Эй, ребята, я разочарован получением продукта из iTunesConnect, но он всегда возвращает неверный идентификатор. Я выполняю все требования, но не получаю от него никакого ответа. Я выполнил эти шаги, и мой ответ — да.. . Пожалуйста, дайте мне какое-нибудь решение для решения этой проблемы. Заранее спасибо..

 1.Have you enabled In-App Purchases for your App ID?
2.Have you checked Cleared for Sale for your product?
3.Have you submitted (and optionally rejected) your application binary?
4.Does your project’s .plist Bundle ID match your App ID?
5.Have you generated and installed a new provisioning profile for the new App ID?
6.Have you configured your project to code sign using this new provisioning profile?
7.Are you building for iPhone OS 3.0 or above?
8.Are you using the full product ID when when making an SKProductRequest? Have you waited several hours since adding your product to iTunes Connect?
9.Are your bank details active on iTunes Connect? (via Mark) Have you tried deleting the app from your device and reinstalling? (via Hector, S3B, Alex O, Joe, and Alberto)
  

Код:

 -(void)fetchAvailableProducts{
    NSSet *productSet = [NSSet setWithObjects:@"com.magazineapp.books",nil];
    productsRequest = [[SKProductsRequest alloc]
                       initWithProductIdentifiers:productSet];
    productsRequest.delegate = self;
    [productsRequest start];
}

- (BOOL)canMakePurchases
{
    return [SKPaymentQueue canMakePayments];
}
- (void)purchaseMyProduct:(SKProduct*)product{
    if ([self canMakePurchases]) {
        SKPayment *payment = [SKPayment paymentWithProductIdentifier:product];
        [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
      //  [[SKPaymentQueue defaultQueue] addPayment:payment];
    }
    else{
        UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:
                                  @"Purchases are disabled in your device" message:nil delegate:
                                  self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
        [alertView show];
    }
}
-(IBAction)purchase:(id)sender{
    [self purchaseMyProduct:[validProducts objectAtIndex:0]];
}

#pragma mark StoreKit Delegate

-(void)paymentQueue:(SKPaymentQueue *)queue
updatedTransactions:(NSArray *)transactions {
    for (SKPaymentTransaction *transaction in transactions) {
        switch (transaction.transactionState) {
            case SKPaymentTransactionStatePurchasing:
                NSLog(@"Purchasing");
                break;
            case SKPaymentTransactionStatePurchased:
                if ([transaction.payment.productIdentifier
                     isEqualToString:kMySubscriptionFeature]) {
                    NSLog(@"Purchased ");
                    UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:
                                              @"Purchase is completed succesfully" message:nil delegate:
                                              self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
                    [alertView show];
                }
                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                break;
            case SKPaymentTransactionStateRestored:
                NSLog(@"Restored ");
                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                break;
            case SKPaymentTransactionStateFailed:
                NSLog(@"Purchase failed ");
                break;
            default:
                break;
        }
    }
}

-(void)productsRequest:(SKProductsRequest *)request
    didReceiveResponse:(SKProductsResponse *)response
{
    SKProduct *validProduct = nil;
    NSUInteger count = [response.products count];
    if (count>0) {
        validProducts = response.products;
        validProduct = [response.products objectAtIndex:0];
        if ([validProduct.productIdentifier
             isEqualToString:kMySubscriptionFeature]) {
            DLog(@"vaild product");
        }
    } else {
        UIAlertView *tmp = [[UIAlertView alloc]
                            initWithTitle:@"Not Available"
                            message:@"No products to purchase"
                            delegate:self
                            cancelButtonTitle:nil
                            otherButtonTitles:@"Ok", nil];
        [tmp show];
    }    
    [activityIndicatorView stopAnimating];
  }
  

Комментарии:

1. Где вы вызываете fetchAvailableProducts метод и включили ли вы возможности цели In App Purchases вашего проекта?

2. да, Алекс, сэр, я включаю покупку в приложении в возможностях целевого проекта и вызываю fetchAvailableProducts в методе viewDidAppear

3. Пожалуйста, поделитесь сведениями об ошибках, которые вы получаете при попытке получить продукты.

4. да, Адил Мирадж, сэр, печатаю описание ответа->_internal->_invalidIdentifiers: <__NSCFArray 0x7a095a20>( com.magazineapp.books )

5. invalidIdentifier предполагается, что идентификаторы продуктов, которые вы предоставляете в своем fetchAvailableProducts методе, не совпадают с идентификаторами продуктов, которые вы зарегистрировали в iTunesConnect. Я думаю, что вы предоставляете свой идентификатор пакета вместо идентификатора продукта. Пожалуйста, проверьте.