内购——应用内购买
通过苹果应用程序商店有三种主要赚钱的方式:
直接收费(与国内大部分用户的消费习惯相悖)
广告
O2O -> Online推广 & Offline交易,闭环
不要砍功能,增加内容,而不是增加功能
内购:应用程序本身的增值产品,游戏装备,应用程序中增值功能同样可以内购
第三方支付:跟应用程序无关的
内购:三(苹果)七(开发商)开
提示:
要做好游戏 & 应用,一定要研究心理,要研究哲学
人人都是产品经理
内购的五种产品类别
非消耗品(Nonconsumable)一旦购买,终身拥有
指的是在游戏中一次性购买并拥有永久访问权的物品或服务。非消耗品物品可以被用户再次下载,并且能够在用户的所有设备上共享
消耗品(Consumable),买了就用,用了就没
消耗品购买不可被再次下载,根据其特点,消耗品不能在用户的设备之间跨设备使用,除非自定义服务在用户的账号之间共享这些信息
以下三种类别在iBooks中使用,目前iBooks不支持大陆市场
ISBN:每本书的一个ID
免费订阅(Free subscriptions)
自动续费订阅(Auto-renewing subscriptions)
非自动续费订阅(Nonrenewing subscriptions)
添加StoreKit框架
要使用内购,需要导入StoreKit框架
内购的常用方法
请求有效的产品代号集合
购买指定产品
验证购买(在购买完成之后,验证)
恢复购买(针对非消耗品)
请求有效产品集合
实例化产品请求
SKProductsRequest*request = [[SKProductsRequest
alloc]initWithProductIdentifiers:identifiers];
设置代理
[request setDelegate:self];
启动请求
[request start];
提示:
实例化请求时,必须指定有效的identifiers集合,之所以如此处理,主要是为了确保提交的内购商品真的通过了苹果的审批,处于可用状态!
要想获取到准确的可用产品集合,需要通过代理方法实现
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
- 越狱用户无法测试内购,但是可以购买
购买产品
- 内购的交易过程是通过SKPaymentTransactionObserver监控的,因此需要为IAPHelper添加交易观察者:
添加交易观察者对象
[[SKPaymentQueue
defaultQueue]addTransactionObserver:sharedInstance];
- 由于发起交易需要使用SKProduct对象,因此需要使用字典记录所有可用的商品
NSMutableDictionary
*_productsDict;
交易队列回调方法
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction *transactionin transactions) {
购买完成
if
(transaction.transactionState== SKPaymentTransactionStatePurchased) {
NSLog(@"购买完成%@", transaction.payment.productIdentifier);
[queuefinishTransaction:transaction];
} else
if (transaction.transactionState ==SKPaymentTransactionStateFailed) {
if (transaction.error.code != SKErrorPaymentCancelled)
{
NSLog(@"交易失败:%@", transaction.error.localizedDescription);
}
}
}
}
恢复购买
[[SKPaymentQueue
defaultQueue]restoreCompletedTransactions];
购买数据记录问题——系统偏好
[[NSUserDefaults standardUserDefaults]setBool:isPurchased
forKey:productId];
[[NSUserDefaults
standardUserDefaults]synchronize];
广告简介
在苹果的广告市场上有两套系统
-展现,程序只要嵌入广告即可
-发布
广告的展现
-广告的展现内容,是由苹果根据应用程序的关键字,分类,上架地区等综合评定后自动推送的
-应用程序无需关心
广告
广告收益三七开
添加 iAd.framework 框架
添加 ADBannerView 视图,并设置代理方法
广告条加载完成之前最好隐藏
-
(void)bannerViewDidLoadAd:(ADBannerView *)banner {
self.bannerBottomConstraint.constant = 20.0;
[UIView animateWithDuration:0.5 animations:^{
[self.view layoutIfNeeded];
}];
NSLog(@"加载广告成功");
}
-
(void)bannerView:(ADBannerView *)banner
didFailToReceiveAdWithError:(NSError *)error
{NSLog(@"加载广告失败 %@", error);
}
**********************笔记********************
内购和广告:
- 什么是内购?
内购就是指,在APP内购买某些产品
如果你在App中销售的商品,跟App有关(例如植物大战僵尸中的道具,需要开启关卡,拥有某种技能等等).那么,苹果规定,必须通过内购方式购买.
内购分成:
3 : 7
为什么做内购?
开发者创收的一种模式: free + 内购
某些业务必须使用内购
- 内购的产品类型?
1.非消耗品(Nonconsumable)
买了就一直有,不会消耗,例如开启关卡
一般指的是在游戏中一次性购买并拥有永久访问权的物品或服务。非消耗品物品可以被用户再次下载,并且能够在用户的所有设备上使用
2.消耗品(Consumable)
买了就用,用了就没
专为支持可消耗的物品或服务设计的,消耗品购买不可被再次下载,根据其特点,消耗品不能在用户的设备之间跨设备使用,除非自定义服务在用户的账号之间共享这些信息
3.其他类型
以下三种类别在iBooks中使用,目前iBooks不支持大陆市场
免费订阅(Free
subscriptions)
自动续费订阅(Auto-renewing
subscriptions)
非自动续费订阅(Nonrenewing
subscriptions)
4.内购演练
- 在App管理中心,创建一个App,并填写App信息
注意: 此处创建的App时,填写套装ID,时,必须选择可以内购的套装ID
- 创建内购商品,并添加到App,指定此App,可以销售哪些商品
注意: 创建内购商品的前提,是你已经填写了税务/银行信息,否则的话,无法创建
- 添加用于测试内购的测试账号
- 创建App项目,开始开发
- 代码实现内购流程
(1) 从APP服务器请求数据列表, 并行苹果服务器请求可以销售的商品列表
[XMGDataTool
getGoodsWithResult:^(NSArray *goods) {
NSArray *ids = [goods valueForKeyPath:@"goodID"];
请求哪些商品可以卖
NSSet *idSet = [NSSet setWithArray:ids];
SKProductsRequest *request = [[SKProductsRequest alloc]
initWithProductIdentifiers:idSet];
request.delegate = self;
[request start];
}];
(2) 在代理方法中获取并显示可销售列表
- (void)productsRequest:(SKProductsRequest *)request
didReceiveResponse:(SKProductsResponse *)response
{
self.products = response.products;
}
(3) 用户购买商品, 并监听商品交易状态
取出商品
SKProduct
*product = self.products[indexPath.row];
购买商品
SKPayment
*payMent = [SKPayment paymentWithProduct:product];
把凭证加入到队列,
等待用户付款
[[SKPaymentQueue
defaultQueue] addPayment:payMent];
设置监听者,
监听整个交易状态
[[SKPaymentQueue
defaultQueue] addTransactionObserver:self];
(4) 实现监听交易状态方法
交易状态发生变化时调用
- (void)paymentQueue:(SKPaymentQueue *)queue
updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions
{
[transactions enumerateObjectsUsingBlock:^(SKPaymentTransaction *_Nonnull obj, NSUInteger idx,BOOL * _Nonnull
stop)
{
SKPayment *payment , 小票, 包含商品
SKPaymentTransactionState
transactionState 交易状态
switch
(obj.transactionState) {
case
SKPaymentTransactionStatePurchasing:
NSLog(@"正在付款");
break;
case
SKPaymentTransactionStatePurchased:
{
NSLog(@"付款结束");
[queue finishTransaction:obj];
break;
}
case
SKPaymentTransactionStateFailed:
{
NSLog(@"交易失败");
[queue finishTransaction:obj];
break;
}
case
SKPaymentTransactionStateRestored:
NSLog(@"恢复购买");
break;
case
SKPaymentTransactionStateDeferred:
NSLog(@"推迟付款");
break;
default:
break;
}
}];
}
具体步骤, 请参照步骤截图详解
- 广告
1.广告的作用?
属于创收的一种方式, 你在App内展示广告,苹果会付费给你,分成从原来的4:6 到3:7
2.如何展示广告
导入框架: iAd.framework
添加控件: ADBannerView
实现代理ADBannerViewDelegate,优化用户体验