Я пытался заставить работать простую покупку расходных материалов 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");
}