ios - 应用内购买未获得任何产品

标签 ios iphone ios7 in-app-purchase storekit

我一直在尝试让应用内购买正常运行。目前我在应用程序商店中有一个应用程序(版本 1.1)。我想发布另一个版本(V 1.2),我想在应用程序购买中集成该版本。我为此创建了一个产品。但是当我尝试加载所有产品时,它显示没有产品。

V1.2是准备上传二进制文件的形式。我已经关联了应用程序购买。我只想在 App Purchase 中测试。我已经从我的设备(MAC + iPhone)中删除了所有配置文件。目前我只安装了一个配置文件。

这是我的代码:

-(void)fetchAvailableProducts{
    NSSet *productIdentifiers = [NSSet
                                 setWithObjects:bundle_identifier,nil];
    productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
    productsRequest.delegate = self;
    [productsRequest start];
}

- (void)requestDidFinish:(SKRequest *)request {
    NSLog(@"purchase request finished");
}

- (void)request:(SKRequest *)request didFailWithError:(NSError *)error {
    NSLog(@"%@", [error description]);
}

- (BOOL)canMakePurchases
{
    return [SKPaymentQueue canMakePayments];
}
- (void)purchaseMyProduct:(SKProduct*)product{
    if ([self canMakePurchases]) {
        SKPayment *payment = [SKPayment paymentWithProduct:product];
        [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
        [[SKPaymentQueue defaultQueue] addPayment:payment];
    }
    else{
        UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:
                                  @"Purchases are disabled in your device" message:nil delegate:
                                  self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
        [alertView show];
    }
}

#pragma mark StoreKit Delegate

-(void)paymentQueue:(SKPaymentQueue *)queue
updatedTransactions:(NSArray *)transactions {
    for (SKPaymentTransaction *transaction in transactions) {
        switch (transaction.transactionState) {
            case SKPaymentTransactionStatePurchasing:
                NSLog(@"Purchasing");
                break;
            case SKPaymentTransactionStatePurchased:
                if ([transaction.payment.productIdentifier
                     isEqualToString:bundle_identifier]) {
                    NSLog(@"Purchased ");
                    UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:
                                              @"Purchase is completed succesfully" message:nil delegate:
                                              self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
                    [alertView show];
                }
                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                break;
            case SKPaymentTransactionStateRestored:
                NSLog(@"Restored ");
                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                break;
            case SKPaymentTransactionStateFailed:
                NSLog(@"Purchase failed ");
                break;
            default:
                break;
        }
    }
}

-(void)productsRequest:(SKProductsRequest *)request
    didReceiveResponse:(SKProductsResponse *)response
{
    SKProduct *validProduct = nil;
    int count = [response.products count];
    NSLog(@"%@",response.products);
    if (count>0) {
        validProducts = response.products;
        validProduct = [response.products objectAtIndex:0];
        if ([validProduct.productIdentifier
             isEqualToString:bundle_identifier]) {
        }
    } else {
        UIAlertView *tmp = [[UIAlertView alloc]
                            initWithTitle:@"Not Available"
                            message:@"No products to purchase"
                            delegate:self
                            cancelButtonTitle:nil
                            otherButtonTitles:@"Ok", nil];
        [tmp show];
    }
}

我想知道启用应用内购买的正确程序是什么以及我做错了什么?应该怎么做?

最佳答案

我解决了这个问题,所以我添加这个作为答案。

我混淆了捆绑标识符和产品标识符。我的代码是正确的,我提供了捆绑标识符而不是产品标识符,这就是我没有收到任何产品的原因。

NSSet *productIdentifiers = [NSSet
                                 setWithObjects:product_identifier,nil];
productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];

在上面的代码中使用 product_identifier(s)。因为我只创建了一个产品,所以我使用单个元素来构建集合。

关于ios - 应用内购买未获得任何产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22433896/

相关文章:

javascript - 如何使用 HTML 和 CSS 创建 Facebook iOS 主屏幕版本?

ios - cgcontextaddcurvetopoint 在 swift 3 中不可用

iphone - 在添加到 View 之前在后台线程中更新 UI 元素

ios - 丢失文件 : The bundle does not contain an app icon for iPad of exactly '76x76' pixels

ios - 使用 AFNetworking 避免重复的 HTTP 请求

ios - 核心数据和 iOS 7 : Different behavior of persistent store

ios - 如何防止 iOS 应用程序上的 Mach-O 链接器错误?

iphone - 禁用主页按钮

ios - RxSwift 不能与 UIButton 一起使用

iphone - 如何在 UIWebView 中打开我的 documentDirectory(来 self 的 UITableView)文件?