我正在尝试在一个应用程序中实现 IAP,我快到了,但仍然面临一些问题。我之前已经发布了另一个问题,因为我发现一个不完整的教程缺少一些东西所以我被卡住了,有人已经帮我解决了这个问题......但在那个教程中他们使用的是一张桌子,而我只想使用普通按钮. 在各种答案之间,有一个答案给了我一种解决这个问题的新方法..所以我试了一下,但我发现的问题出现了:
我收到警告,该人在回答中告诉我在我的头文件中包含以下每个协议:
SKProductsRequestDelegate SKPaymentTransactionObserver SKRequestDelegate
我用这段代码做到了:
@interface BuyTest2 : UIViewController <SKProductsRequestDelegate, SKPaymentTransactionObserver, SKRequestDelegate>
但现在我在 m 文件中收到此警告:
Method 'paymentQueue:updatedTransactions:' in protocol not implemented
这是为什么?我错过了什么吗?(我确定我是……)
当我单击按钮购买硬币时,一切正常,但购买完成后,我不知道如何交付硬币......我有我的代码来做,但我不知道把它放在哪里......我该怎么做?
如果我再次尝试进行测试购买,我会收到消息说我已经购买了该项目并且我必须单击“确定”才能下载它......但之后没有任何反应......我真的没有给一些东西下载,但我只需要添加一些硬币到一个变量,然后用 NSUserDefaults 保存它......
这是我正在使用的代码:
在文件 .hi 中
@interface BuyTest2 : UIViewController <SKProductsRequestDelegate, SKPaymentTransactionObserver, SKRequestDelegate>
@property (nonatomic, retain) SKProduct *currentProduct;
@property(nonatomic, readonly) SKPaymentTransactionState transactionState;
@property (nonatomic, retain) SKProductsRequest *ualRequest;
在文件 .mi 中得到:
-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
if(response.products.count > 0)
{
SKProduct* product;
for(int i = 0; i<response.products.count; i++)
{
product = [response.products objectAtIndex:i];
if([product.productIdentifier isEqualToString:@"com.mycompany.myapp.1"])
{
self.currentProduct = product;
[self beginPaymentWithProduct:product];
}
}
}
}
- (void)beginPaymentWithProduct:(SKProduct*)product
{
SKPayment *payment = [SKPayment paymentWithProduct:product];
[[SKPaymentQueue defaultQueue] addPayment:payment];
}
- (BOOL)canMakePurchases
{
return [SKPaymentQueue canMakePayments];
}
- (IBAction)buyCoins:(id)sender
{
if([self canMakePurchases])
{
ualRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithArray:[NSArray arrayWithObjects: @"com.mycompany.myapp.1", nil]]];
[ualRequest setDelegate:self];
[ualRequest start];
}
}
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction* transaction in transactions) {
if (transaction.transactionState == SKPaymentTransactionStatePurchased) {
NSLog(@"Transaction Purchased: %@", transaction);
// Make purchase available to the user, etc...
// Once that's all done...
[queue finishTransaction:transaction];
}
else if (transaction.transactionState == SKPaymentTransactionStateFailed) {
NSLog(@"Transaction Failed: %@", transaction);
// Display error to the user, using the error text in the transaction
// This example uses NSLog, typically you'd use UIAlertView here
NSLog(@"Error: %@", [transaction.error localizedDescription]);
}
}
}
谢谢你的帮助...