Iphone SFProductsRequest始终返回零

Iphone SFProductsRequest始终返回零,iphone,ios,ipad,in-app-purchase,app-store-connect,Iphone,Ios,Ipad,In App Purchase,App Store Connect,我正在尝试在一个免费应用程序中实现应用内购买 我在itunes connect门户的应用内采购管理器中创建了productd id“test1” 当我以以下方式提出产品请求时: - (id)init { NSSet *productIdentifiers = [NSSet setWithObjects: @"test1", nil]; if ((self =

我正在尝试在一个免费应用程序中实现应用内购买

我在itunes connect门户的应用内采购管理器中创建了productd id“test1”

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

- (id)init {

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

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

}

return self;
}

}

}

}

响应始终为0。我不明白我做错了什么。这段代码来自一个教程。关于应用程序内购买的文档往往非常混乱,itunes connect的整个过程都没有给我信心

我认为应用程序需要在线销售,应用内购买才能正常工作。但是,我决定不包括应用程序内购买,而是让itunes中的应用程序内购买进行连接以供审查。在审查过程中,该应用程序被拒绝,因为它应该与应用程序内购买一起进行测试

但是,如果产品列表总是为零,我如何测试应用程序内购买

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

谢谢

代我向你问好


努诺

看看这里,它回答了我所有的问题(框架也很容易使用:-):

但我不得不说,整个应用内购买是一个PITA——我的应用刚刚发布,当然我下载了它并查看了应用内购买屏幕。你猜怎么着,它是空的

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

编辑:

您需要为您的应用创建应用内购买,并将其设置为在itunes connect中清除以供出售。为了能够在开发模式下进行测试,您不需要上传屏幕截图,也不需要对其进行审查


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

看看这里,它回答了我所有的问题(框架也很容易使用:-):

但我不得不说,整个应用内购买是一个PITA——我的应用刚刚发布,当然我下载了它并查看了应用内购买屏幕。你猜怎么着,它是空的

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

编辑:

您需要为您的应用创建应用内购买,并将其设置为在itunes connect中清除以供出售。为了能够在开发模式下进行测试,您不需要上传屏幕截图,也不需要对其进行审查


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

我找到的解决这个问题的最连贯的方法是这个清单。它应该广泛传播,以避免任何人路过同样的问题,这确实是非常耗时和令人沮丧的:

  • 您是否已为您的应用ID启用应用内购买
  • 您的产品是否已获准出售
  • 您是否已提交(或拒绝)您的申请
  • 您的项目的.plist捆绑包ID是否与您的应用程序ID匹配
  • 您是否为新的应用程序ID生成并安装了新的配置文件
  • 您是否已使用此新的资源调配配置文件将项目配置为代码签名
  • 您是否正在为iPhone OS 3.0或更高版本进行构建
  • 您在发出SKProductRequest时是否使用完整的产品ID
  • 将产品添加到iTunes Connect后,您是否等待了几个小时
  • 您的银行详细信息是否在iTunes Connect上有效?(通过马克)
  • 您是否尝试过从设备中删除应用并重新安装?(通过Hector、S3B、Alex O、Joe和Alberto)
  • 你的设备被越狱了吗?如果是这样,您需要恢复越狱以使IAP正常工作。(通过哦,我的上帝,罗曼和xfze)
  • 您是否从real iTunes帐户注销
  • 你试过重新启动设备吗
  • 你在使用这个设备吗?(在模拟器上不工作)

积分归

我发现这个问题最连贯的解决方案是这个清单。它应该广泛传播,以避免任何人路过同样的问题,这确实是非常耗时和令人沮丧的:

  • 您是否已为您的应用ID启用应用内购买
  • 您的产品是否已获准出售
  • 您是否已提交(或拒绝)您的申请
  • 您的项目的.plist捆绑包ID是否与您的应用程序ID匹配
  • 您是否为新的应用程序ID生成并安装了新的配置文件
  • 您是否已使用此新的资源调配配置文件将项目配置为代码签名
  • 您是否正在为iPhone OS 3.0或更高版本进行构建
  • 您在发出SKProductRequest时是否使用完整的产品ID
  • 将产品添加到iTunes Connect后,您是否等待了几个小时
  • 您的银行详细信息是否在iTunes Connect上有效?(通过马克)
  • 您是否尝试过从设备中删除应用并重新安装?(通过Hector、S3B、Alex O、Joe和Alberto)
  • 你的设备被越狱了吗?如果是这样,您需要恢复越狱以使IAP正常工作。(通过哦,我的上帝,罗曼和xfze)
  • 您是否从real iTunes帐户注销
  • 你试过重新启动设备吗
  • 你在使用这个设备吗?(在模拟器上不工作)

信用卡转到

嗨!谢谢你的回复。但请描述一下你的经历。你需要什么样的产品清单?产品清单表明应用内购买由苹果stor审查
- (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];