关于iOS内购的一些代码整理分析
来源:互联网 发布:怎样成为淘宝直播 编辑:程序博客网 时间:2024/04/27 14:03
//需导入StoreKit.frameowrk 框架
#import "ViewController.h"
#import <StoreKit/StoreKit.h>
@interface ViewController ()<SKProductsRequestDelegate,SKPaymentTransactionObserver>
@property (nonatomic,strong) NSArray *allProducts;
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
// 01-请求可销售的商品列表
NSString *path = [[NSBundlemainBundle]pathForResource:@"products.json"ofType:nil];
NSData *data = [NSDatadataWithContentsOfFile:path];
NSDictionary *dict = [NSJSONSerializationJSONObjectWithData:dataoptions:0error:nil];
NSArray *allProductId = [dict valueForKeyPath:@"productId"];
SKProductsRequest *request = [[SKProductsRequestalloc]initWithProductIdentifiers:[NSSetsetWithArray:allProductId]];
request.delegate =self;
//开始
[requeststart];
// 07-排到了你 支付 柜台开收据
//监听者 : 监听交易队列中的交易对象的交易状态
[[SKPaymentQueuedefaultQueue]addTransactionObserver:self];
//08-去商店取得商品 提供增值服务
}
#pragma mark - SKProductsRequest
// Sent immediately before -requestDidFinish:
// 02-返回可以销售的商品列表
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response NS_AVAILABLE_IOS(3_0);
{
for (SKProduct *productin response.products) {
NSLog(@"%@ %@ %@ %@",product.localizedTitle,product.localizedDescription,product.price,product.productIdentifier);
}
self.allProducts = response.products;
//刷新
[self.tableViewreloadData];
}
// 03-展示商品 到界面上UI
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
returnself.allProducts.count;
}
//tableView
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *identifier=@"cell";
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:identifier];
if (cell==nil) {
cell=[[UITableViewCellalloc] initWithStyle:UITableViewCellStyleSubtitlereuseIdentifier:identifier];
}
SKProduct *product = self.allProducts[indexPath.row];
//赋值
cell.textLabel.text = [NSStringstringWithFormat:@"%@ %@",product.localizedTitle,product.price];
return cell;
}
// 04-用户选择购买 点击事件
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//选择的商品
SKProduct *product = self.allProducts[indexPath.row];
// 05-商品开个小票 创建交易对象
SKPayment *payment = [SKPaymentpaymentWithProduct:product];
//SKPaymentTransaction 被添加到交易队列中的交易对象
// 06-去柜台排队支付 添加交易对象到队列
[[SKPaymentQueuedefaultQueue]addPayment:payment];
}
#pragma mark - SKPaymentTransactionObserver //NS_AVAILABLE_IOS(3_0);
//交易对象的交易状态改变的时候就会调用
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions
{
/*
SKPaymentTransactionStatePurchasing, // 交易正在被添加到交易队列中
SKPaymentTransactionStatePurchased, // 交易已经在队列中, 用户付钱了. 客户需要完成交易.
SKPaymentTransactionStateFailed, // 交易失败 交易不再队列.
SKPaymentTransactionStateRestored, // 交易被重新购买. 客户端需要完成交易.
SKPaymentTransactionStateDeferred NS_ENUM_AVAILABLE_IOS(8_0), // 交易在队列中, 最终状态不确定.
*/
//成功
for (SKPaymentTransaction *tin transactions) {
if (t.transactionState ==SKPaymentTransactionStatePurchased) {
NSLog(@"购买成功提供增值服务!");
[[SKPaymentQueuedefaultQueue]finishTransaction:t];
}
if (t.transactionState ==SKPaymentTransactionStateRestored) {
NSLog(@"恢复购买成功!");
[[SKPaymentQueuedefaultQueue]finishTransaction:t];
}
}
}
- (IBAction)click:(id)sender {
[[SKPaymentQueuedefaultQueue]restoreCompletedTransactions];
}
@end
- 关于iOS内购的一些代码整理分析
- iOS 一些整理过的常用代码
- 关于Java中内部类的一些概念整理
- 关于ios代码混淆的一些注意事项
- 关于代码内外部质量提升的一些看法
- 整理一些iOS常用到的代码片段
- 关于iOS,Xcode的一些小技巧整理
- 关于iOS block中警告问题的一些整理
- 关于iOS开发一些优秀的博客整理
- 关于iOS开发一些优秀的博客整理
- iOS 内购流程整理
- IOS内购代码
- 关于iOS内购
- 关于9行代码导致系统崩溃的分析整理
- 关于9行代码导致系统崩溃的分析整理
- Ios常用一些小代码整理
- 关于iOS内存 指针一些整理
- 关于CVS的一些整理
- 88.Min Stack
- socket套接字
- mongodb 如何追踪集群数据
- 如何将Microstrategy For Mobile SDK项目从Eclipse转移到Android Studio中?
- mybatis access denied问题
- 关于iOS内购的一些代码整理分析
- javaweb学习总结(五)——Servlet学习1
- thinkphp查询select操作
- Non-Blocking Channel Operations
- Android开发之EditText属性详解
- 蓝牙学习之旅——低功耗蓝牙之频带和通道
- 最常见的eclipse快捷键
- MySQL索引使用方法和性能优化
- 基于Chromium内核的Android WebView