SFProductsRequest 总是返回零
Posted
技术标签:
【中文标题】SFProductsRequest 总是返回零【英文标题】:SFProductsRequest always returning zero 【发布时间】:2012-02-17 09:38:17 【问题描述】:我正在尝试在免费应用程序中实现应用内购买。
我在 iTunes 连接门户的应用内购买管理器中创建了一个产品 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 Connect 中的整个过程并没有给我信心。
我认为应用程序需要在线销售才能在应用程序内购买才能正常工作。但是,我决定不包含在应用购买中,而是让 iTunes 中的应用内购买连接进行审核。在审核过程中,该应用程序被拒绝,因为它应该使用应用内购买进行测试。
但是,如果产品列表总是为零,我该如何测试应用购买呢?
如果有更多经验的人可以给我一个建议,因为我已经对此感到疯狂了!
谢谢,
谨向您致以最诚挚的问候,
努诺
【问题讨论】:
【参考方案1】:我发现这个问题的最连贯的解决方案是这个清单。它应该被广泛传播,以避免任何人通过同样的问题,这确实是耗时和绝望的:
您是否为您的 App ID 启用了应用内购买? 您是否已为您的产品检查过清仓销售? 您是否已提交(并可选择拒绝)您的应用程序二进制文件? 您项目的 .plist Bundle ID 是否与您的 App ID 匹配? 您是否为新的 App ID 生成并安装了新的配置文件? 您是否已将项目配置为使用此新的配置文件进行代码签名? 您是在为 iPhone OS 3.0 或更高版本构建吗? 您在发出 SKProductRequest 时是否使用了完整的产品 ID? 您是否在将产品添加到 iTunes Connect 后等待了几个小时? 您的银行详细信息在 iTunes Connect 上是否有效? (通过马克) 您是否尝试过从设备中删除该应用程序并重新安装? (通过 Hector、S3B、Alex O、Joe 和 Alberto) 您的设备是否越狱了?如果是这样,您需要恢复越狱才能使 IAP 正常工作。 (通过我的上帝、Roman 和 xfze) 您是否从真实的 iTunes 帐户中退出? 您是否尝试过重启设备? 您在设备上吗? (不适用于模拟器)学分转到Troy Brant
【讨论】:
【参考方案2】:看看这里,它回答了我所有的问题(而且这个框架也很容易使用:-):
http://blog.mugunthkumar.com/coding/iphone-tutorial-%E2%80%93-in-app-purchases/
但我不得不说整个应用内购买是一个 PITA - 我的应用刚刚发布,当然我下载了它并检查了应用内购买屏幕。你猜怎么着,它完全是空的!
经过一番阅读,似乎即使一切都被接受并准备好销售,应用内购买产品仍然需要一段时间才能在线上架 - 3小时后它终于奏效了......
编辑:
您需要在 iTunes Connect 中为您的应用创建应用内购买并将其设置为清除销售。您无需上传屏幕截图或对其进行审核,即可在开发模式下对其进行测试。
您是如何在 iTunes Connect 中命名购买的?通常您应该使用 com.companyname.productname.purchasename 名称,并且您从应用中请求的名称必须完全相同。
【讨论】:
嗨!谢谢回复。但请描述一下你的经历。您需要什么产品清单?产品列表是否暗示应用内购买由苹果商店审核团队审核?以上是关于SFProductsRequest 总是返回零的主要内容,如果未能解决你的问题,请参考以下文章