我已成功在我的应用中实施应用内购买,但在申请产品时遇到了一些问题。从商店返回的产品的顺序与我的标识符列表的顺序不匹配。 我使用以下代码请求产品:
self.request = [[[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObjects: @"50Hints",@"120Hints",@"250Hints",@"400Hints", nil]] autorelease];
//NSLog(@"Sending request...");
request.delegate = self;
[request start];
我收到产品清单:
the products (
"<SKProduct: 0xc660bb0>",
"<SKProduct: 0xc661110>",
"<SKProduct: 0xc661160>",
"<SKProduct: 0xc6611b0>"
)
不是相同的顺序(第一个对应于@&#34; 120提示&#34;而不是@&#34; 50提示&#34;)
在IOS 5之前这不是问题,因为我可以使用[SKPayment paymentWithProductIdentifier:productIdentifier],productIdentifier是与产品名称对应的字符串,但现在我必须使用接受产品的paymentWithProduct(例如SKProduct: 0xc660bb0)而不是名字。所以我必须找出哪个是哪个。
有没有办法使用paymentWithProduct使用其名称购买产品?如果没有,应用程序内购买的订单是否会改变randomely或者它是永久性的吗?
干杯队员 西里尔
答案 0 :(得分:0)
我这样做的方法是使用SKProduct的属性,其中一些我显示在一个表中供用户选择 - 其中一列显示了产品标识符。这是为OSX项目完成的,但概念应该是相同的。
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
self.productsFromItunes = [NSMutableArray array];
for(SKProduct *aProduct in response.products){
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:aProduct,@"theProduct",aProduct.price,@"thePrice",aProduct.localizedTitle,@"theTitle",aProduct.productIdentifier,@"theID",nil];
[self.productsFromItunes addObject:dict];
}
[NSBundle loadNibNamed:@"BuyCredits" owner:self];
[self.buyCreditsWindow makeKeyAndOrderFront:self];// this window has the table of choices
}
// Connected to the "Purchase" and "Cancel" buttons in the Buy Credits window
-(IBAction)buyOrCancel:(NSButton *)sender {
if ([sender.title isEqualToString:@"Purchase"]){
SKProduct *chosenProduct = [self.buyCreditsController.selectedObjects.lastObject valueForKey:@"theProduct"];
SKPayment *thePayment = [SKPayment paymentWithProduct:chosenProduct];
[SKPaymentQueue.defaultQueue addPayment:thePayment]; // This method sends the buy request to the app store
}
[self.buyCreditsWindow orderOut:self];
}