iPhone In App Purchase - response.products仍然是空的?

use*_*485 41 iphone storekit in-app-purchase iphone-sdk-3.0

基本上,我尝试在测试应用程序中设置应用程序购买,然后再将其应用到我公司正在开发的应用程序中.我已经阅读了商店套件pdf和其他片段大约1000次,但产品仍然是空的.这正是我到目前为止所做的:

设置测试应用程序和In App Purchase测试项目
我在iPhone开发人员中心的公司开发人员门户上为"Test App One"创建了一个新的应用程序ID.我确保前缀是com.mycompany.testappone确保可以配置应用内购买.保持应用ID部分,我通过勾选"启用应用内购买"选项配置应用购买.

我在iTunes Connect中创建了"Test App One",并完成了常规程序,但选择了"稍后上传二进制文件"并且没有提交审核,因为该应用程序什么都不做.当然,我们不必提交应用程序来审查这个工作?!然后,我点击管理应用内购买并创建一个新产品ID为"test1"并批准它以便清除销售.

代码
我在XCode中设置了一个新项目TestAppOne,这里是我现在使用的唯一两个类:

TestAppOneAppDelegate.h:

#import <UIKit/UIKit.h>
#import <StoreKit/StoreKit.h>  

@interface TestAppOneAppDelegate : NSObject <UIApplicationDelegate, SKRequestDelegate, SKProductsRequestDelegate> {
    UIWindow *window;
}
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

在设备上进行测试
我创建了一个沙箱测试帐户,并在iPhone上注销了我的iTunes帐户,但没有使用测试帐户登录,因为文档告诉我们在购买阶段提示之前不要这样做.然后我构建应用程序,这是我得到的日志:

IN-APP:can make payments
IN-APP:requestProductData
IN-APP:requestProductData END
IN-APP:productsRequest
IN-APP:array count: 0
IN-APP:productsRequest END
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我,如果我已经离开了任何阶段,或者是否有任何我做错了.不幸的是,Apple似乎没有任何示例应用程序.

AlB*_*ebe 30

另一个经常被忽视的重要步骤是你需要确保你有一个iOS付费应用程序合同设置,它位于iTunes连接的"合同,税收和银行"部分下.首先,您必须单击请求按钮,然后您必须单击3设置按钮(联系信息,银行信息,税务信息)

  • 我是否必须添加有效的银行帐户才能测试InApp购买? (2认同)
  • 将银行信息添加到 iTunes 帐户有效。 (2认同)

Rhy*_*man 22

实际上我认为你必须提交二进制文件才能工作.

您可以将发布日期设置为遥远的未来.

  • 谢谢.不幸的是,Apple忘了在他们的文档中包含这些非常重要的信息,但是在阅读了这篇有用的教程后我发现了这一点:http://troybrant.net/blog/2010/01/in-app-purchases-a-full -walkthrough / (7认同)
  • 只需提交并立即拒绝.不想在将来设置日期而忘记它! (4认同)

alp*_*ere 19

检查是否存在无效的产品ID.

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

for (NSString *invalidProductId in response.invalidProductIdentifiers)
    {
        NSLog(@"Invalid product id: %@" , invalidProductId);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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


dcR*_*Ray 9

检查XCode中的Bundle Identifier(例如com.company.appname)是否与iTunes Connect中的Bundle Identifier匹配.

您无需提交二进制文件即可使用.


小智 5

只需删除设备上的应用程序,然后从XCode再次启动它.它解决了我的问题.

无需上传二进制文件,或在iTunes Connect中创建应用程序内购买后等待数小时.