SFProductsRequest总是返回零

时间:2012-02-17 09:38:18

标签: iphone ios ipad in-app-purchase itunesconnect

我正在尝试在免费应用中实施应用内购买。

我已在itunes connect门户网站的应用内购买管理器中创建了一个产品ID“test1”。

当我按以下方式提出产品请求时:

- (id)init {

     NSSet *productIdentifiers = [NSSet setWithObjects:
                             @"test1",
                             nil];

     if ((self = [self initWithProductIdentifiers:productIdentifiers])) {                

}

return self;

}

- (id)initWithProductIdentifiers:(NSSet *)productIdentifiers
{    
if ((self = [super init]))
{
    // Store product identifiers
    _productIdentifiers = [productIdentifiers retain];

    // Check for previously purchased products
    NSMutableSet * purchasedProducts = [NSMutableSet set];

    for (NSString * productIdentifier in _productIdentifiers)
    {
        BOOL productPurchased = [[NSUserDefaults standardUserDefaults] boolForKey:productIdentifier];

        if (productPurchased)
        {
            [purchasedProducts addObject:productIdentifier];
            NSLog(@"Previously purchased: %@", productIdentifier);
        }

        NSLog(@"Not purchased: %@", productIdentifier);
    }

    self.purchasedProducts = purchasedProducts;
}

return self;

}

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {

NSLog(@"Received products results...");   
self.products = response.products;
self.request = nil;    

[[NSNotificationCenter defaultCenter] postNotificationName:kProductsLoadedNotification object:_products]; 

NSLog(@"%d",[self.products count]);
NSEnumerator *e = [self.products objectEnumerator];

id object;

while(object=[e nextObject])
{
    NSLog(@"item");
    NSLog(@"%s",(char*)object);
}

}

- (void)requestProducts {

self.request = [[[SKProductsRequest alloc] initWithProductIdentifiers:_productIdentifiers] autorelease];
_request.delegate = self;
[_request start];

}

响应总是0.我不明白我做错了什么。此代码来自教程。关于应用程序购买的文档往往很混乱,itunes连接的整个过程并没有给我信心。

我认为该应用程序需要在线销售才能在应用内购买。但是,我决定不加入应用程序购买,但让itunes中的应用程序购买连接进行审核。在审核过程中,该应用程序被拒绝,因为它应该与应用内购买进行测试。

但是,如果产品列表始终为零,我如何测试应用内购买?

如果有经验的人可以给我一个建议,因为我已经疯了!

谢谢,

致以最诚挚的问候,

努诺

2 个答案:

答案 0 :(得分:3)

我发现这个问题的最一致的解决方案就是这个清单。它应该是广泛传播的,以避免任何人通过同样的问题,这是非常耗时和绝望的:

  • 您是否为应用ID启用了应用内购买?
  • 您是否已检查过您的产品已清关待售?
  • 您是否已提交(并可选择拒绝)您的应用程序二进制文件?
  • 您项目的.plist捆绑ID是否与您的应用ID相匹配?
  • 您是否为新的App ID生成并安装了新的配置文件?
  • 您是否已使用此新配置文件将项目配置为代码签名?
  • 您是否正在为iPhone OS 3.0或更高版本构建?
  • 您在制作SKProductRequest时是否使用完整的产品ID?
  • 自从将产品添加到iTunes Connect后,您有几个小时的时间?
  • 您的银行详细信息是否在iTunes Connect上有效? (通过马克)
  • 您是否尝试从设备中删除该应用并重新安装? (通过Hector,S3B,Alex O,Joe和Alberto)
  • 你的设备越狱了吗?如果是这样,您需要恢复IAP的越狱才能工作。 (通过哦,我的上帝,罗马和xfze)
  • 您是从真实的iTunes帐户注销的吗?
  • 您是否尝试过重启设备?
  • 你在设备上吗? (不适用于模拟器)

积分转到Troy Brant

答案 1 :(得分:0)

看看这里,回答了我的所有问题(框架也很简单: - ):

http://blog.mugunthkumar.com/coding/iphone-tutorial-%E2%80%93-in-app-purchases/

但我必须说整个应用程序内购买的东西是PITA - 我的应用程序刚刚发布,当然我下载了它并检查了应用内购买屏幕。猜猜看,它完全是空的!

经过一些阅读后,似乎即使所有产品都被接受并准备出售,应用内购买产品仍然需要一段时间才能在网上上线--3小时后它终于有效......

编辑:

您需要为自己的应用创建应用内购买,并将其设置为在itunes connect中清除销售。您无需上传屏幕截图或已经过审核,以便能够在开发模式下对其进行测试。

你是如何命名itunes connect的购买?通常,您应该使用com.companyname.productname.purchasename名称,并且您从应用程序ha请求的名称完全相同。