IOS记录App开发订阅功能

APP开发


浏览:1224 次

最近,我遇到App需要开发订阅功能。我查阅了很多资料,参考了很多,结合我所知道的,我仍然记录了下来。

其原理如下

逻辑1

1.1.当App启动时,进行订阅监控(以下代码)

-(无效)添加观察员

{

[[SKPaymentQueue defaultQueue]addTransactionObserver:self];

}

1.2.收到订阅记录后,将数据同步到服务器。服务器处理后,修改其他数据,如用户时间

1.3.订阅成功后刷新UI以显示UI

逻辑2

2.1取消订阅状态,单击UI区域进行订阅

//1.创建账单

SKPayment*payment=[SKPaymentpaymentWithProduct:self.buyProduct];

//2.将账单添加到交易队列

[[SKPaymentQueue defaultQueue]addPayment:支付];

2.2成功订阅后,同步到服务器(与1.2相同)

2.3订阅成功后刷新UI以显示UI(与1.3相同)

订阅成功,请检查地址

api地址的正式验证

沙盒验证api地址

图像.png

图像.png

下面是一个简单的代码

IAP经理.h

@接口IAPManager:NSObject

+(instancetype)管理器;

//添加侦听器

-(无效)添加观察员;

//直接购买

-(void)buyServers:(void(^)(BOOL成功))块;

//恢复购买

-(无效)恢复;

@结束

IAP经理.m

#导入“IAPManager.h”

#导入

#导入“UserRequest.h”

@接口IAPManager()

@属性(非原子,强)SKProductsRequest*请求;

@属性(非原子,强)SKProduct*buyProduct;

@属性(非原子,副本)无效(^buyBlock)(BOOL成功);

@属性(非原子,强)UserRequest*UserRequest;

@性质(非原子,保留)dispatch_group_t群;

@属性(非原子,保留)dispatch_queue_t groupQueue;

@结束

静态IAPManager*manager=nil;

@实施IAPManager

+(实例类型)管理器

{

静态dispatch_once_tonceToken;

dispatch_once(&onceToken^{

经理=[self new];

});

回报经理;

}

-(id)初始化

{

如果(self=[超级初始化]){

}

回归自我;

}

-(无效)添加观察员

{

[[SKPaymentQueue defaultQueue]addTransactionObserver:self];

}

//请求适销商品

-(无效)请求产品

{

如果(![SKPaymentQueue canMakePayment]){

//您的手机尚未打开进行程序内支付

回来

}

[HUD显示];

//3.获取productid的集合(在集合中)

NSSet*set=[NSSet setWithArray:@[@“SmartStickOneMonth”]];

//4.向苹果公司发送适销商品请求

_请求=[[SKProductsRequest alloc]initWithProductIdentifiers:set];

_请求。delegate=自我;

[请求开始];

}

-(void)buyServers:(void(^)(BOOL))块

{

如果(![SKPaymentQueue canMakePayment]){

//您的手机尚未打开进行程序内支付

if(块){

块(NO);

}

回来

}

自己buyBlock=块;

如果(self.buyProduct!=无){

【自行支付】;

回来

}

//3.获取productid的集合(在集合中)

NSSet*set=[NSSet setWithArray:@[@“SmartStickOneMonth”]];

//4.向苹果公司发送适销商品请求

_请求=[[SKProductsRequest alloc]initWithProductIdentifiers:set];

_请求。delegate=自我;

[请求开始];

}

/**

*当可销售商品的请求结果为

*

*@param响应响应存储适销商品的结果

*/

-(void)productsRequest:(SKProductsRequest*)请求didReceiveResponse:(SK产品响应*)响应

{

for(SKProduct*回应产品.products){

//用于节省价格

NSMutableDictionary*priceDic=[NSMutable字典];

//货币单位

NSNumberFormatter*numberFormator=[[NSNumber Formatter alloc]init];