У меня странная проблема с покупкой в приложении ...
После того, как я запрашиваю информацию о продукте, иногда по какой-то причине автоматически вызывается paymentQueue: updatedTransactions.
В методе моего магазина viewDidLoad я инициализирую и запускаю запрос:
- (void)viewDidLoad
{
[super viewDidLoad];
productsArray = [[NSArray alloc] init];
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
NSSet *productIdentifiers = [NSSet setWithObjects:PRODUCT_ID, nil];
productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
productsRequest.delegate = self;
[productsRequest start];
}
Затем я получаю ответ:
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
productsArray = [[NSArray alloc] initWithArray:response.products];
NSLog(@"Products Count: %d",[productsArray count]);
NSLog(@"Invalid Products Count: %d",[response.invalidProductIdentifiers count]);
if ([productsArray count] > 0)
{
NSLog(@"Product title: %@" ,[productsArray objectAtIndex:0]);
[self hideLoadingView];
} else {
UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"No products found"
message:@"There might have been a problem. Please try again soon." delegate:self
cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
[alertView release];
[self hideLoadingView];
[purchaseBtn setEnabled:NO];
}
[productsRequest release];
[[NSNotificationCenter defaultCenter] postNotificationName:kInAppPurchaseManagerProductsFetchedNotification object:self userInfo:nil];
}
Здесь я ожидаю завершения процесса, иподождите, пока пользователь нажмет кнопку покупки ... но иногда (например, в 70% случаев) я получаю всплывающее окно с именем пользователя / паролем, чтобы купить товар ... но пользователь этого не сделалнажмите что-нибудь ... (и если пользователь уже "вошел в систему", то он покупает элемент без запроса. Это НЕ так, как должно быть.
Этот метод иногда вызывается автоматически:
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
NSLog(@"updated transaction");
for (SKPaymentTransaction *transaction in transactions)
{
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
NSLog(@"transationStatePurchased");
[self completeTransaction:transaction];
break;
case SKPaymentTransactionStateFailed:
NSLog(@"transationStateFailed");
[self failedTransaction:transaction];
break;
default:
break;
}
}
}
и это IBAction кнопки покупки:
-(IBAction)buyItem:(id)sender {
[self showLoadingView];
SKPayment *payment = [SKPayment paymentWithProductIdentifier:[(SKProduct *)[productsArray objectAtIndex:0] productIdentifier]];
[[SKPaymentQueue defaultQueue] addPayment:payment];
}
}
Я думал, что окно предупреждения пользователя / пароля StoreKit не должно отображаться, пока я не вызову defaultQueue's "метод addPayment, которыйrs ТОЛЬКО в IBAction.
Есть идеи?Спасибо!