#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. Я думаю, что вы предоставляете свой идентификатор пакета вместо идентификатора продукта. Пожалуйста, проверьте.