5

我知道之前有人问过:iPhone In App Purchase - response.products 还是空的?

但我也在尝试实现应用内购买,但我的 response.products 是空的。我的情况:

我一次上传并拒绝了我的二进制文件。

但后来我又把状态放回等待上传。(有关系吗?)

我所有的应用内购买产品的状态都是“准备提交”。

我的生产用户已注销。测试用户尚未登录。

-(void) requestProductData{
    SKProductsRequest *productRequest= [[SKProductsRequest alloc] 
                                 initWithProductIdentifiers:[NSSet setWithObjects:
                                                             @"com.mydomain.myapp.Pack1", 
                                                             @"com.mydomain.myapp.Pack2",
                                                             @"com.mydomain.myapp.Pack3",nil]];

productRequest.delegate = self;
[productRequest start];
}

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

NSArray *myProducts = response.products; 

NSLog(@"%d",[myProducts count]);//this prints 0
for(SKProduct * product in myProducts) {
    [products addObject:product];
}
[request autorelease]; 


}

    in my viewdidload:


if([SKPaymentQueue canMakePayments]) {
        NSLog(@"IN-APP:can make payments");
    }
    else {
        NSLog(@"IN-APP:can't make payments");
    }

    /*load transaction history to see if the user already bought some packs*/
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    products = [[NSMutableArray alloc] init];
    NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString * path = [documentsDirectory stringByAppendingPathComponent: @"history.plist"];
    self.transactionHistory = [NSMutableArray arrayWithContentsOfFile: path];

    if(!transactionHistory) { 
        NSMutableArray *_transactionHistory = [[NSMutableArray alloc] init]; 
        self.transactionHistory = _transactionHistory;
        [_transactionHistory release];
    } 
    //some other initializations here
    [self requestProductData];

for (NSString *invalidProductId in response.invalidProductIdentifiers)
    {
        NSLog(@"Invalid product id: %@" , invalidProductId);
    }
//this returns 3 of my product id's
4

1 回答 1

12

您有一个无效的产品错误,因此请使用以下主题检查您的配置: 无效的产品 ID

  • 您是否为您的 App ID 启用了应用内购买?
  • 您是否为您的产品检查过清仓?
  • 您是否已提交(并可选择拒绝)您的应用程序二进制文件?
  • 您项目的 .plist Bundle ID 是否与您的 App ID 匹配?
  • 您是否为新的 App ID 生成并安装了新的配置文件?
  • 您是否已将项目配置为使用此新的配置文件进行代码签名?
  • 您是为 iPhone OS 3.0 或更高版本构建的吗?
  • 您在发出 SKProductRequest 时是否使用了完整的产品 ID?
  • 将产品添加到 iTunes Connect 后,您是否等待了几个小时?
  • 您的银行详细信息在 iTunes Connect 上是否有效?
  • 您是否尝试过从设备中删除该应用程序并重新安装?
  • 你的设备越狱了吗?如果是这样,您需要恢复越狱才能使 IAP 正常工作。
于 2011-07-11T18:55:28.017 回答