RW のチュートリアルを使用して、ユーザーが選択した IAP を購入/購入し、ティックが表示される限り、IAP を実装することができました。また、利用可能な4つのIAPすべてを正常にリストします
私はこれを、よりシンプルで必要なコードが少ない方法で行うことにしました (私が思うに) - ユーザーが Apple がホストするコンテンツをダウンロードできるようにするコードを追加してから、コンテンツをアプリに転送して戻すためのコードを追加するのではなく、選択したビューに
代わりに、アプリ内にコンテンツを埋め込むことを選択し、代わりに、ユーザーがコンテンツ/IAP を購入するまで、適切なビュー コントローラーにリンクされたビュー コントローラーまたはボタンをロックするだけです。ユーザーがコンテンツを購入して IAP をチェックした後、その特定の IAP に関連するビュー コントローラーのロックを解除するように追加したいだけです。
これを達成できるように、これまでにコードに追加するにはどうすればよいですか? 私はアプリ内購入を 4 つ持っています (このコードにリンクする 4 つの個別のビュー コントローラーを意味します)。拡張する必要があるコードは以下のとおりだと思います....
- (void)productPurchased:(NSNotification *)notification {
NSString * productIdentifier = notification.object;
[_products enumerateObjectsUsingBlock:^(SKProduct * product, NSUInteger idx, BOOL *stop) {
if ([product.productIdentifier isEqualToString:productIdentifier]) {
[self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:idx inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
*stop = YES;
}
}];
}
- (void)reload {
_products = nil;
[self.tableView reloadData];
[[SecretsIAPHelper sharedInstance] requestProductsWithCompletionHandler:^(BOOL success, NSArray *products) {
if (success) {
_products = products;
[self.tableView reloadData];
}
[self.refreshControl endRefreshing];
}];
}
#pragma mark - Table View
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _products.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
SKProduct * product = (SKProduct *) _products[indexPath.row];
cell.textLabel.text = product.localizedTitle;
[_priceFormatter setLocale:product.priceLocale];
cell.detailTextLabel.text = [_priceFormatter stringFromNumber:product.price];
if ([[SecretsIAPHelper sharedInstance] productPurchased:product.productIdentifier]) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
cell.accessoryView = nil;
} else {
UIButton *buyButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
buyButton.frame = CGRectMake(0, 0, 72, 37);
[buyButton setTitle:@"Buy" forState:UIControlStateNormal];
buyButton.tag = indexPath.row;
[buyButton addTarget:self action:@selector(buyButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
cell.accessoryType = UITableViewCellAccessoryNone;
cell.accessoryView = buyButton;
}
return cell;
}
- (void)buyButtonTapped:(id)sender {
UIButton *buyButton = (UIButton *)sender;
SKProduct *product = _products[buyButton.tag];
NSLog(@"Buying %@...", product.productIdentifier);
[[SecretsIAPHelper sharedInstance] buyProduct:product];
}