內(nèi)購——應(yīng)用內(nèi)購買
通過蘋果應(yīng)用程序商店有三種主要賺錢的方式:
直接收費(與國內(nèi)大部分用戶的消費習(xí)慣相悖)
廣告
O2O -> Online推廣 & Offline交易已脓,閉環(huán)
不要砍功能屹电,增加內(nèi)容疑俭,而不是增加功能
內(nèi)購:應(yīng)用程序本身的增值產(chǎn)品唁毒,游戲裝備趾撵,應(yīng)用程序中增值功能同樣可以內(nèi)購
第三方支付:跟應(yīng)用程序無關(guān)的
內(nèi)購:三(蘋果)七(開發(fā)商)開
提示:
要做好游戲 & 應(yīng)用椅寺,一定要研究心理梯影,要研究哲學(xué)
人人都是產(chǎn)品經(jīng)理
內(nèi)購的五種產(chǎn)品類別
非消耗品(Nonconsumable)一旦購買,終身擁有
指的是在游戲中一次性購買并擁有永久訪問權(quán)的物品或服務(wù)诅挑。非消耗品物品可以被用戶再次下載四敞,并且能夠在用戶的所有設(shè)備上共享
消耗品(Consumable),買了就用拔妥,用了就沒
消耗品購買不可被再次下載忿危,根據(jù)其特點,消耗品不能在用戶的設(shè)備之間跨設(shè)備使用没龙,除非自定義服務(wù)在用戶的賬號之間共享這些信息
以下三種類別在iBooks中使用铺厨,目前iBooks不支持大陸市場
ISBN:每本書的一個ID
免費訂閱(Free subscriptions)
自動續(xù)費訂閱(Auto-renewing subscriptions)
非自動續(xù)費訂閱(Nonrenewing subscriptions)
添加StoreKit框架
要使用內(nèi)購,需要導(dǎo)入StoreKit框架
內(nèi)購的常用方法
請求有效的產(chǎn)品代號集合
購買指定產(chǎn)品
驗證購買(在購買完成之后硬纤,驗證)
恢復(fù)購買(針對非消耗品)
請求有效產(chǎn)品集合
實例化產(chǎn)品請求
SKProductsRequest*request = [[SKProductsRequest
alloc]initWithProductIdentifiers:identifiers];
設(shè)置代理
[request setDelegate:self];
啟動請求
[request start];
提示:
實例化請求時解滓,必須指定有效的identifiers集合,之所以如此處理筝家,主要是為了確保提交的內(nèi)購商品真的通過了蘋果的審批洼裤,處于可用狀態(tài)!
要想獲取到準確的可用產(chǎn)品集合溪王,需要通過代理方法實現(xiàn)
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
- 越獄用戶無法測試內(nèi)購腮鞍,但是可以購買
購買產(chǎn)品
- 內(nèi)購的交易過程是通過SKPaymentTransactionObserver監(jiān)控的,因此需要為IAPHelper添加交易觀察者:
添加交易觀察者對象
[[SKPaymentQueue
defaultQueue]addTransactionObserver:sharedInstance];
- 由于發(fā)起交易需要使用SKProduct對象莹菱,因此需要使用字典記錄所有可用的商品
NSMutableDictionary
*_productsDict;
交易隊列回調(diào)方法
- (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);
}
}
}
}
恢復(fù)購買
[[SKPaymentQueue
defaultQueue]restoreCompletedTransactions];
購買數(shù)據(jù)記錄問題——系統(tǒng)偏好
[[NSUserDefaults standardUserDefaults]setBool:isPurchased
forKey:productId];
[[NSUserDefaults
standardUserDefaults]synchronize];
廣告簡介
在蘋果的廣告市場上有兩套系統(tǒng)
-展現(xiàn),程序只要嵌入廣告即可
-發(fā)布
廣告的展現(xiàn)
-廣告的展現(xiàn)內(nèi)容道伟,是由蘋果根據(jù)應(yīng)用程序的關(guān)鍵字桥狡,分類,上架地區(qū)等綜合評定后自動推送的
-應(yīng)用程序無需關(guān)心
廣告
廣告收益三七開
添加 iAd.framework 框架
添加 ADBannerView 視圖,并設(shè)置代理方法
廣告條加載完成之前最好隱藏
-
(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);
}
**********************筆記********************
內(nèi)購和廣告:
- 什么是內(nèi)購?
內(nèi)購就是指,在APP內(nèi)購買某些產(chǎn)品
如果你在App中銷售的商品,跟App有關(guān)(例如植物大戰(zhàn)僵尸中的道具,需要開啟關(guān)卡,擁有某種技能等等).那么,蘋果規(guī)定,必須通過內(nèi)購方式購買.
內(nèi)購分成:
3 : 7
為什么做內(nèi)購?
開發(fā)者創(chuàng)收的一種模式: free + 內(nèi)購
某些業(yè)務(wù)必須使用內(nèi)購
- 內(nèi)購的產(chǎn)品類型?
1.非消耗品(Nonconsumable)
買了就一直有,不會消耗,例如開啟關(guān)卡
一般指的是在游戲中一次性購買并擁有永久訪問權(quán)的物品或服務(wù)裹芝。非消耗品物品可以被用戶再次下載,并且能夠在用戶的所有設(shè)備上使用
2.消耗品(Consumable)
買了就用娜汁,用了就沒
專為支持可消耗的物品或服務(wù)設(shè)計的嫂易,消耗品購買不可被再次下載,根據(jù)其特點掐禁,消耗品不能在用戶的設(shè)備之間跨設(shè)備使用怜械,除非自定義服務(wù)在用戶的賬號之間共享這些信息
3.其他類型
以下三種類別在iBooks中使用,目前iBooks不支持大陸市場
免費訂閱(Free
subscriptions)
自動續(xù)費訂閱(Auto-renewing
subscriptions)
非自動續(xù)費訂閱(Nonrenewing
subscriptions)
4.內(nèi)購演練
- 在App管理中心,創(chuàng)建一個App,并填寫App信息
注意: 此處創(chuàng)建的App時,填寫套裝ID,時,必須選擇可以內(nèi)購的套裝ID
- 創(chuàng)建內(nèi)購商品,并添加到App,指定此App,可以銷售哪些商品
注意: 創(chuàng)建內(nèi)購商品的前提,是你已經(jīng)填寫了稅務(wù)/銀行信息,否則的話,無法創(chuàng)建
- 添加用于測試內(nèi)購的測試賬號
- 創(chuàng)建App項目,開始開發(fā)
- 代碼實現(xiàn)內(nèi)購流程
(1) 從APP服務(wù)器請求數(shù)據(jù)列表, 并行蘋果服務(wù)器請求可以銷售的商品列表
[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) 用戶購買商品, 并監(jiān)聽商品交易狀態(tài)
取出商品
SKProduct
*product = self.products[indexPath.row];
購買商品
SKPayment
*payMent = [SKPayment paymentWithProduct:product];
把憑證加入到隊列,
等待用戶付款
[[SKPaymentQueue
defaultQueue] addPayment:payMent];
設(shè)置監(jiān)聽者,
監(jiān)聽整個交易狀態(tài)
[[SKPaymentQueue
defaultQueue] addTransactionObserver:self];
(4) 實現(xiàn)監(jiān)聽交易狀態(tài)方法
交易狀態(tài)發(fā)生變化時調(diào)用
- (void)paymentQueue:(SKPaymentQueue *)queue
updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions
{
[transactions enumerateObjectsUsingBlock:^(SKPaymentTransaction *_Nonnull obj, NSUInteger idx,BOOL * _Nonnull
stop)
{
SKPayment *payment , 小票, 包含商品
SKPaymentTransactionState
transactionState 交易狀態(tài)
switch
(obj.transactionState) {
case
SKPaymentTransactionStatePurchasing:
NSLog(@"正在付款");
break;
case
SKPaymentTransactionStatePurchased:
{
NSLog(@"付款結(jié)束");
[queue finishTransaction:obj];
break;
}
case
SKPaymentTransactionStateFailed:
{
NSLog(@"交易失敗");
[queue finishTransaction:obj];
break;
}
case
SKPaymentTransactionStateRestored:
NSLog(@"恢復(fù)購買");
break;
case
SKPaymentTransactionStateDeferred:
NSLog(@"推遲付款");
break;
default:
break;
}
}];
}
具體步驟, 請參照步驟截圖詳解
- 廣告
1.廣告的作用?
屬于創(chuàng)收的一種方式, 你在App內(nèi)展示廣告,蘋果會付費給你,分成從原來的4:6 到3:7
2.如何展示廣告
導(dǎo)入框架: iAd.framework
添加控件: ADBannerView
實現(xiàn)代理ADBannerViewDelegate,優(yōu)化用戶體驗