ios - 请求产品信息而不实际开始付款流程

标签 ios objective-c in-app-purchase

我已经为我的应用实现了应用内购买,但为了遵守 Apple 准则,我需要在我的商店 UI 中格式化和显示产品的本地化货币。当用户点击显示商店 UI 时,我创建了一个 productsRequest 来请求和显示相应产品的信息。问题是它还会为我设置的购买启动购买流程。我想要它做的就是在标签中显示格式化的货币,而不开始购买过程。

用于显示商店 UI 的按钮:

-(void)openIAP
{
        if([SKPaymentQueue canMakePayments]){
            NSLog(@"User can make payments");
            SKProductsRequest *productsRequest = [[SKProductsRequest alloc]initWithProductIdentifiers:[NSSet setWithObjects:kRemoveAdsProductIdentifier, nil]];
            productsRequest.delegate = self;
            [productsRequest start];
        } else {
            NSLog(@"User can't make payments, don't open store");
        }
}

产品请求

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{
    SKProduct *validProduct = nil;
    int count = [response.products count];
    if(count > 0){
        validProduct = [response.products objectAtIndex:0];
        NSLog(@"Products Available!");
        _numberFormatter = [[NSNumberFormatter alloc] init];
        [_numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
        [_numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
        [_numberFormatter setLocale:validProduct.priceLocale];
        NSString *formattedPrice = [_numberFormatter stringFromNumber:validProduct.price];
        NSLog(@"The price is %@", formattedPrice);
        [adsPrice setString:formattedPrice];
        [self purchase:validProduct]; //this needs to be moved
    }
    else if(!validProduct){
        NSLog(@"No products available");
        //this is called if your product id is not valid, this shouldn't be called unless that happens.
    }
}

我了解此方法的工作原理,但我不知道如何处理 [self purchase:validProduct]。我尝试使用不同的参数名称创建并调用另一个名为 justProductsRequestSKProductsRequest 方法。它具有与 productsRequest 相同的代码(如上所示)只是没有 [self purchase:validProduct]; 但它仍然调用 productsRequest 而不是 justProductsRequest.

感谢任何帮助。谢谢!

最佳答案

您不应使用产品请求来发起购买。产品请求提供产品信息,例如价格,然后您可以使用这些信息来更新应用程序的 UI。

当您收到 productsRequest:didReceiveResponse: 时,您应该存储收到的产品数组。这包含创建 SKPayment 对象所需的所有 SKProduct 项目。此外,您应该更新您的用户界面以在此处显示您的 IAP 商品的价格(就像您所做的那样)。您应该只需要提出一次此请求。

当你想开始购买流程时(例如,当用户按下一个 IAP 项目的按钮时),在你之前存储的产品数组中通过其标识符找到相关产品,并使用 [SKPayment paymentWithProduct :] 创建支付对象。

In-App Purchase Programming Guide提供了很多重要信息。我所描述的正确购买流程可以在我链接到的页面上的“图 I-1”中看到。

关于ios - 请求产品信息而不实际开始付款流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26129549/

相关文章:

iphone - Objective-c IN APP PURCHASE 实现时出现错误

iphone - 如何改变UIWebview的颜色和字体大小

ios - 找不到匹配的配置文件 : Your build settings specify a provisioning profile with the UUID “fbbe2..” , 但是,没有这样的

ios - 如何不在应用商店中显示旧的订阅值

ios - 通过 iOS11 files app 在 app 中导入多个文件

objective-c - 应用内购买 "Invalid Product Identifier"错误信息

ios - 免费订阅是唯一的应用内购买类型

ios - AVSpeech合成器: AVSpeechSynthesisIPANotationAttribute seems like does not support Chinese

ios - swift 中自定义 NSManagedObject 类核心数据的问题

ios - 分配和初始化 UITableViewCell 的子类有哪些问题