接上一篇笔记
编程步骤之获取并显示产品信息
购物的第一步是让用户看到商品,装潢门面比什么都重要!显示商品要尽量迅速(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];