美文网首页iOS技术专题程序员干货
iOS内置付费开发笔记二(获取产品信息)

iOS内置付费开发笔记二(获取产品信息)

作者: 陈旭冉 | 来源:发表于2014-05-13 12:26 被阅读1182次

    上一篇笔记

    编程步骤之获取并显示产品信息

    购物的第一步是让用户看到商品,装潢门面比什么都重要!显示商品要尽量迅速(App Store的查询速度普遍要2-3秒,要不要建立自己的服务器?),不能显示缺货的商品(看到心仪的产品,商家告诉你缺货, 多么痛的领悟!),Store UI要人性,价格显示要到位...
    Apple官网给出的流程图如下:


    第一步 在工程中引入storekit.framework并且在文件中

     #import <StoreKit/StoreKit.h>
    

    第二步 product identifier存在哪里?

    • 可以保存在app bundle中

    • 也可以保存在自己的服务器上
      以下是Apple给出的存储在本地的一个例子(product_ids.plist)。

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
      "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
      <plist version="1.0">
      <array>
        <string>com.example.level1</string>
        <string>com.example.level2</string>
        <string>com.example.rocket_car</string>
      </array>
      </plist>
      

    如果使用自己的服务器, 可以传输JSON格式的文件, Apple同样给出了相关的例子:

      [
      "com.example.level1",
      "com.example.level2",
      "com.example.rocket_car"
      ]
    

    第三步 读取本地product_ids.plist文件

    NSURL *url = [[NSBundle mainBundle] URLForResource:@"product_ids" withExtension:@"plist"];
    NSArray *productIdentifiers = [NSArray arrayWithContentsOfURL:url];
    

    第四步 根据Product IDs从App Store获取产品的信息

    - (void)validateProductIdentifiers:(NSArray *)productIdentifiers{
        SKProductsRequest *productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithArray:productIdentifiers]];
        productsRequest.delegate = self;
        [productsRequest start];
    }
    
    // SKProductsRequestDelegate protocol method
    - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{
        self.products = response.products;
        for (NSString *invalidIdentifier in response.invalidProductIdentifiers) {
        // Handle any invalid product identifiers. 处理有效的ProductIdentifiers, 缺货的,错误的不能有!
        }
        [self displayStoreUI]; // Custom method 显示Store的UI
    }
    

    第五步 显示购买界面UI

    5.1 判断用户是否关闭了内置付费,如果关闭了,就提示一下

    if ([SKPaymentQueue canMakePayments]) {
       [self displayStoreUI]; // Custom method
    } else {
        NSLog(@"用户禁止应用内付费购买.");
    }
    

    5.2 购买界面UI上价格要显示的清楚明了

    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
    [numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    [numberFormatter setLocale:product.priceLocale];
    NSString *formattedPrice = [numberFormatter stringFromNumber:product.price];
    

    相关文章

      网友评论

        本文标题:iOS内置付费开发笔记二(获取产品信息)

        本文链接:https://www.haomeiwen.com/subject/winrtttx.html