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];