使用SKProductsRequest请求应用内购买时订单错误

时间:2012-07-18 04:25:32

标签: objective-c cocoa-touch in-app-purchase

我已成功在我的应用中实施应用内购买,但在申请产品时遇到了一些问题。从商店返回的产品的顺序与我的标识符列表的顺序不匹配。 我使用以下代码请求产品:

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或者它是永久性的吗?

干杯队员 西里尔

1 个答案:

答案 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];
}