#ios #iphone #in-app-purchase #nsarray
#iOS #iPhone #покупка в приложении #nsarray
Вопрос:
Я реализую покупку в приложении. И у меня возникла проблема при выполнении методов делегирования store kit.
Вот мой код следующим образом:
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
NSLog(@"Received products results...");
NSLog(@"response.products.......%@",response.products);
self.products = response.products;
self.request = nil;
proUpgradeProduct = [_products count] == 1 ? [[_products objectAtIndex:0] retain] : nil;
if (proUpgradeProduct)
{
NSLog(@"Product title: %@" , proUpgradeProduct.localizedTitle);
NSLog(@"Product description: %@" , proUpgradeProduct.localizedDescription);
NSLog(@"Product price: %@" , proUpgradeProduct.price);
NSLog(@"Product id: %@" , proUpgradeProduct.productIdentifier);
}
NSLog(@"products.....%@",_products);
for (NSString *invalidProductId in response.invalidProductIdentifiers)
{
NSLog(@"Invalid product id: %@" , invalidProductId);
}
[[NSNotificationCenter defaultCenter] postNotificationName:kProductsLoadedNotification object:_products];
[self buyProductIdentifier:proUpgradeProduct.productIdentifier];
}
- (void)buyProductIdentifier:(NSString *)productIdentifier {
if ([SKPaymentQueue canMakePayments])
{
NSLog(@"Buying %@...", productIdentifier);
SKPayment *payment = [SKPayment paymentWithProductIdentifier:productIdentifier];
[[SKPaymentQueue defaultQueue] addPayment:payment];
}
else
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"StoreKit" message:@"You are not authorised to purchase from AppStore"
delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alert show];
[alert release];
}
}
- (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)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
in (void)buyProductIdentifier:(NSString *)productIdentifier
— method.
Что мне делать?
Ответ №1:
-
Вы должны установить
SKPaymentTransactionObserver
defaultQueue
:[[SKPaymentQueue defaultQueue] addTransactionObserver:manager];
-
Метод
paymentQueue:updatedTransactions:
будет вызван только послеStoreKit
завершения работы с транзакциями в вашемdefaultQueue
: когда пользователь отменил или купил (или транзакция была восстановлена) продукт.
Комментарии:
1. где я должен написать [[SKPaymentQueue defaultQueue] addTransactionObserver:self];? я написал это в (void)buyProductIdentifier:(NSString *)ProductIdentifier
2. здесь я сталкиваюсь с проблемой, что когда я нажимаю на третью кнопку оплаты, я вызываюсь четырьмя методами..