在应用程序购买 - SKProduct请求失败

时间:2012-03-13 18:26:22

标签: iphone ios xcode in-app-purchase

我正在实施此代码:

if ([SKPaymentQueue canMakePayments])
{
    // Display a store to the user.
    NSLog(@"Device Can Make Payments");
    SKProductsRequest *ProductRequst = [[SKProductsRequest alloc]initWithProductIdentifiers:[NSSet setWithObjects:@"slalomtfcoins", nil]];
    ProductRequst.delegate = self;
    [ProductRequst start];
}
else {
    // Warn the user that purchases are disabled.
    NSLog(@"Device Can't Make Payments");
    UIAlertView *thealert = [[UIAlertView alloc]initWithTitle:@"Your Device Limited" message:@"we have noticed that you device restrictions setting are currently limited. you can change it ny going to Settings -> General -> Restrictions and turn it off" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [thealert show];
    [thealert release];
}



-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{
SKProduct *VailProduct = nil;
NSLog(@"%d",[response.products count]);
int count = [response.products count];
if (count>0) {
    VailProduct = [response.products objectAtIndex:0];
    NSLog(@"Products are availble");
} else if (!VailProduct){
    NSLog(@"Products are Not availble");
}    

}

并且日志打印“产品不可用”。 我的p.list中的包ID是正确的 并且产品ID与itunes connect相同。

问题是什么?

感谢

4 个答案:

答案 0 :(得分:1)

你是从xcode运行应用程序吗?如果你使用“环境沙箱”来发布使用应用程序内购买的未发布应用程序,你必须从xcode运行它以使用“environment-sandbox”

答案 1 :(得分:1)

要尝试的事情。

  • 删除然后重新下载xcode和中的配置文件 设备
  • 从设备中删除应用
  • 退出商店
  • 列表项
  • 硬重启设备
  • 构建并运行应用
  • 再试一次

我发现的另一个修复程序可能不会有帮助,但您可以尝试创建一个新的测试帐户用户并尝试使用该修复程序。由于您的问题只是验证,而不是购买,这可能不会有帮助。我只是提到它,以防你在路上遇到问题。

此外,如果这是第一次这样做,您应该仔细检查应用ID和产品ID。

答案 2 :(得分:1)

如果您的设备不在美国商店,则沙盒中似乎存在可以通过转到设备中的iTunes并切换商店来修复的错误。当您在应用中再次尝试购买时,它应该提示您更改回其他商店。

另外,请确保您在设备上进行测试,而不是在模拟器上进行测试,并确保使用通过iTunes Connect创建的测试帐户。

答案 3 :(得分:0)

在xCode 4.5.1上我确定(因为我尝试)你可以使用iPhone模拟器进行所有应用程序内购买过程。
它只是有点慢,有时会超时,所以你必须重新购买或重新启动模拟(在模拟器和iPhone中)。
在代码中,您可以设置Bool并在成功购买流程后为其指定TRUE。使用NSLog确保一切顺利 之后,您可以使用该bool满足您的所有需求。

另一件事:您必须确保产品标识符完全正确,例如:
com.example.myapp.purchase1
com.example.myapp.purchase2
...
将这些值放在iTunes Connect和应用程序中。

也许你只需等待一段时间进行iTunes更新(对我来说,我不知道为什么,等待的时间非常短:只需几分钟甚至更短)