之前一直是使用 MKStoreKit 在做 IAP(In-App Purchases,应用内支付),API 简单好用,不过作者许久不更新,最近改为 RMStore

Unknown pruduct identifier

IAP 支付时需要提前请求商品信息,商品信息获取到之后才能购买,官方 demo 中有相关代码:

_products = @[@"net.robotmedia.test.consumable",
                  @"net.robotmedia.test.nonconsumable",
                  @"net.robotmedia.test.nonconsumable.2"];
    
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
    [[RMStore defaultStore] requestProducts:[NSSet setWithArray:_products] success:^(NSArray *products, NSArray *invalidProductIdentifiers) {
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
        _productsRequestFinished = YES;
        [self.tableView reloadData];
    } failure:^(NSError *error) {
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Products Request Failed", @"")
                                                           message:error.localizedDescription
                                                          delegate:nil
                                                 cancelButtonTitle:NSLocalizedString(@"OK", @"")
                                                 otherButtonTitles:nil];
        [alertView show];
    }];

可以放在 AppDelegate 中程序启动就去下载

Cannot connect to iTunes Store

这个问题是苹果的低级错误,解决方法也是千奇百怪,比如 stackoverflow 的这篇讨论 http://stackoverflow.com/questions/2359739/iphone-store-kit-cannot-connect-to-itunes-store

尝试了一圈都不行,最后 restore purchase 搞定

IAP 状态不对

填写好应用信息之后,先不要急着提交二进制文件,正确的操作流程:

  1. 填写应用信息
  2. 创建 IAP
  3. 在应用信息修改页面下方选择上一步创建的 IAP 来更改 IAP 状态
  4. 程序里调试 IAP
  5. 申请上传并提交二进制文件