iPhone应用内购买 – response.products仍然是空的?

基本上,我试图在应用程序购买testing应用程序之前,我把它们实施到我的公司正在合适的应用程序。 我已经阅读了大约1000次的商店套件pdf和其他片段,但是产品仍然是空的。 这正是我到目前为止所做的:

安装testing应用程序和In App Purchasetesting项目
我在iPhone开发中心的公司开发人员门户网站上为“Test App One”创build了一个新的应用程序ID。 我确定前缀是com.mycompany.testappone以确保可以configuration应用程序购买。 留在应用程序ID部分,我通过勾选“启用应用程序内购买”选项configuration应用程序购买。

我在iTunes Connect中创build了“Test App One”,并完成了通常的程序,但是select了“稍后上传二进制文件”,并没有提交审核,因为该应用程序什么都不做。 当然,我们不必提交应用程序来检查这个工作?! 然后,我点击了应用程序购买pipe理,并创build了一个新的产品ID“test1”,并批准它,以便清除销售。


我在XCode中build立了一个名为TestAppOne的新项目,这里是我现在使用的唯一两个类:

TestAppOneAppDelegate.h:

 #import <UIKit/UIKit.h> #import <StoreKit/StoreKit.h> @interface TestAppOneAppDelegate : NSObject <UIApplicationDelegate, SKRequestDelegate, SKProductsRequestDelegate> { UIWindow *window; } 

TestAppOneDelegate.m:

 #import "TestAppOneAppDelegate.h" static NSString *kMyFeatureIdentifier1 = @"com.mycompany.testappone.test1"; @implementation TestAppOneAppDelegate @synthesize window; - (void)applicationDidFinishLaunching:(UIApplication *)application { if([SKPaymentQueue canMakePayments]) { NSLog(@"IN-APP:can make payments"); } else { NSLog(@"IN-APP:can't make payments"); } [self requestProductData]; [window makeKeyAndVisible]; } - (void)requestProductData { NSLog(@"IN-APP:requestProductData"); SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject:kMyFeatureIdentifier1]]; request.delegate = self; [request start]; NSLog(@"IN-APP:requestProductData END"); } - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { NSLog(@"IN-APP:productsRequest"); NSArray *myProduct = response.products; NSLog(@"IN-APP:array count: %i", [myProduct count]); [request autorelease]; NSLog(@"IN-APP:productsRequest END"); } - (void)dealloc { [window release]; [super dealloc]; } @end 

在设备上testing
我创build了一个沙盒testing帐户,并在iPhone上从我的iTunes帐户注销,但未使用testing帐户login,因为文档告诉我们在采购阶段提示我们之前不要这样做。 我然后build立应用程序,这里是我得到的日志:

 IN-APP:can make payments IN-APP:requestProductData IN-APP:requestProductData END IN-APP:productsRequest IN-APP:array count: 0 IN-APP:productsRequest END 

任何人都可以告诉我,如果我离开了任何阶段,或者如果有什么我做错了。 不幸的是,似乎没有任何苹果公司的例子。

其实我认为你必须提交这个工作的二进制文件。

您可以将发布date设置为遥远的将来。

另一个常常被忽视的重要步骤是您需要确保您有一个位于iTunes连接的“合同,税收和银行业务”部分下的iOS付费应用合同设置。 首先,您必须点击请求button,然后您必须点击3个设置button(联系人信息,银行信息,税务信息)

检查是否有无效的产品ID。

 - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { for (NSString *invalidProductId in response.invalidProductIdentifiers) { NSLog(@"Invalid product id: %@" , invalidProductId); } } 

如果有无效的产品编号,请访问http://troybrant.net/blog/2010/01/invalid-product-ids/

这是一个非常全面的问题清单。

检查XCode中的软件包标识符(例如com.company.appname)是否与iTunes Connect中的软件包标识符相匹配。

您不必提交二进制文件即可运行。

只需删除设备上的应用程序,然后从XCode重新启动它。 它为我解决了这个问题。

无需上传二进制文件,或者在iTunes Connect中创build应用内购买后等待数小时。

无需上传用于Sandboxtesting的InAppPurchase二进制文件。 您只需在iTunesConnect中添加InAppPurchase项目,并将其置于“仅提交”(必须)状态。 如果你提交它的审查,它会一直给你的response.product空。

感谢alpere的回答,我发现我使用了错误的产品ID。 这不是我想的de.company.appname.PROFESSIONAL_LICENSE 。 只是在我的情况下使用PROFESSIONAL_LICENSE (没有带领捆绑ID的东西)工作:)

尝试添加免费订阅产品。 如果它出现在响应那么你的代码没有任何错误。 由于免费认购是唯一不需要协议,税收和银行的types,如果出现,而其他types则不是,那么这是一个与您的合同有关的问题。

在我的情况下,原因是苹果托pipe的内容错误地打开。 该产品只有当我把它关掉时才可用