今天說一下內(nèi)購項(xiàng)目在App Store的推廣和支持方式
在App Store中搜索某個(gè)軟件的時(shí)候,比如QQ瀏覽器,在搜索列表和詳情中都會(huì)顯示內(nèi)購的項(xiàng)目,下面就說一下如何配置。
App Store后臺(tái)內(nèi)購項(xiàng)目的配置
首先選擇需要顯示的內(nèi)購項(xiàng)目,將該內(nèi)購項(xiàng)目中的App Store推廣的圖片上傳一下
然后到App Store推廣中,選擇需要推廣的項(xiàng)目展示
代碼中的配置
如果你看到了上面黃色的提示
無法在App Store上宣傳這些App內(nèi)購買項(xiàng)目,因?yàn)槟钚碌囊雅鷾?zhǔn)二進(jìn)制文件中不包含SKPaymentTransactionObserver方法。
那就是因?yàn)闆]有在代碼中實(shí)現(xiàn)這個(gè)代理,這里以《iOS的應(yīng)用內(nèi)支付In-app purchase的開發(fā)》中寫的支付類HDPayTools為例
首先在HDPayTools中,實(shí)現(xiàn)-(BOOL)paymentQueue:(SKPaymentQueue*)queue shouldAddStorePayment:(SKPayment*)payment forProduct:(SKProduct*)product這個(gè)代理函數(shù),這個(gè)是在App Store發(fā)起購買的時(shí)候會(huì)有回調(diào)。
就像開發(fā)文檔中說的
·如果返回值為true,那就是在打開app時(shí)直接調(diào)用購買確認(rèn)的彈窗,讓用戶輸入密碼或者指紋等確認(rèn)購買
·如果返回值為false,那就是只打開app,但是并不會(huì)直接調(diào)用購買的彈窗,相當(dāng)于只是給了你一個(gè)product的訂單,你可以后續(xù)自己處理這個(gè)訂單
在App Store推廣購買和用戶手動(dòng)點(diǎn)擊購買的區(qū)別:
用戶在應(yīng)用中自己點(diǎn)擊購買
如果用戶在你應(yīng)用中手動(dòng)點(diǎn)擊購買,那么就是調(diào)用的支付,自己創(chuàng)建訂單和請求
-(void)startPayWithProductID:(NSString*)productID withCompleteHandler:(paySuccess)paySuccessHandler{//下單
[SVProgressHUDshowWithStatus:nil];
self.paySuccessHandler=paySuccessHandler;
self.m_productID=productID;
NSSet*productIDs=[NSSetsetWithObject:_m_productID];
SKProductsRequest*request=[[SKProductsRequestalloc]initWithProductIdentifiers:productIDs];
request.delegate=self;
[request start];
}
用戶在App Store的推廣中購買
如果是在App Store推廣購買,那么就是蘋果直接創(chuàng)建好了訂單和請求,然后直接在回調(diào)函數(shù)中返回給你,如果這個(gè)回調(diào)函數(shù)返回值為true,那么就是直接發(fā)起了購買請求,如果返回值為false,就是取消了這個(gè)購買請求,返回值相當(dāng)于[request start];這一步
這兩種方式只是發(fā)起的方式不同,其他購買流程是一樣的,不需要再重新寫,在這個(gè)回調(diào)中只需要根據(jù)返回值去決定是否直接彈出購買。
回調(diào)函數(shù)的實(shí)現(xiàn)
所以那個(gè)回調(diào)函數(shù)的實(shí)現(xiàn)可以按照下面這樣來寫,寫在HDPayTools.m中:
//從App Store支付
-(BOOL)paymentQueue:(SKPaymentQueue*)queue shouldAddStorePayment:(SKPayment*)payment forProduct:(SKProduct*)product{self.paySuccessHandler=^(BOOL paySuccess){
if(paySuccess){
///在這個(gè)回調(diào)中去實(shí)現(xiàn)購買之后的流程
///...
[SVProgressHUDshowSuccessWithStatus: "購買成功"];
}
};
//根據(jù)product.productIdentifier去判斷是否去直接彈出購買彈窗
if([product.productIdentifier isEqualToString:kHDHighVipProduct]){returntrue;
}
return false;
}
打開時(shí)注冊監(jiān)聽
既然監(jiān)聽的實(shí)現(xiàn)寫好了,那么就需要去監(jiān)聽App Store發(fā)起支付時(shí)的回調(diào)了,在AppDelegate.m中,在程序打開時(shí)候去創(chuàng)建一個(gè)監(jiān)聽者,因?yàn)槲乙呀?jīng)在HDPayTools的init中,直接寫了[[SKPaymentQueuedefaultQueue]addTransactionObserver:self];,所以只要初始化就行了
-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions{if(!self.payTools){
self.payTools=[[HDPayToolsalloc]init];
}
//....
}
這樣就可以了,當(dāng)有App Store發(fā)起購買的時(shí)候,就可以監(jiān)聽到了。
測試
修改下面的鏈接地址,然后在safari瀏覽器打開,就可以測試從App Store發(fā)起購買了。其中鏈接中的bundleId修改為你自己應(yīng)用的bundleId,比如com.hudongdong.blog,productId修改為你創(chuàng)建的商品的id
itms-services://?action=purchaseIntent&bundleId=bundleId&productIdentifier=productId