內(nèi)購(gòu)簡(jiǎn)介:
在APP里面購(gòu)買一些東西的時(shí)候,必須要使用蘋果的支付方式進(jìn)行購(gòu)買.
如果你的APP當(dāng)中銷售的商品,跟APP功能相關(guān),必須通過內(nèi)購(gòu)的方式購(gòu)買.
內(nèi)購(gòu)的缺點(diǎn):
1.從商家的角度來看,需要分成給蘋果,分成比例過高 內(nèi)購(gòu)分成3:7
2.從用戶角度來看,內(nèi)購(gòu)支付,第一次需要綁定銀行卡 操作流程相對(duì)來說比較復(fù)雜
3.內(nèi)購(gòu)商品的價(jià)格,不能自定義,只有固定的級(jí)別.
下面是內(nèi)購(gòu)的操作流程,首先登陸了蘋果開發(fā)者賬號(hào)官網(wǎng).

1.創(chuàng)建APP, 并且創(chuàng)建設(shè)置需要銷售的商品
1.1 創(chuàng)建一個(gè)app


1.2 創(chuàng)建一個(gè)App IDs,并填寫相關(guān)信息.




1.4修改app信息

1.5選擇"功能"模塊--App內(nèi)購(gòu)購(gòu)買項(xiàng)目(如果你是第一次配置,出現(xiàn)的頁(yè)面和我的不一致的話,請(qǐng)?zhí)恋?步驟:內(nèi)購(gòu)流程- 稅務(wù)信息配置)


1.5.1創(chuàng)建一個(gè)消耗型項(xiàng)目




1.5.2創(chuàng)建一個(gè)非消耗型項(xiàng)目




至此,內(nèi)購(gòu)的商品創(chuàng)建完畢.
2.請(qǐng)求真正可以被銷售的商品列表(從蘋果服務(wù)器)
2.1在iTunes中我們已經(jīng)創(chuàng)建了要賣的商品,那么現(xiàn)在我們要開始寫代碼了.創(chuàng)建一個(gè)新的項(xiàng)目.并修改bundle id為我們創(chuàng)建的app IDs.

主要代碼邏輯如下:
demo下載地址.
override func viewDidLoad() {
super.viewDidLoad()
tableView.register( UINib(nibName: "CustomTableViewCell", bundle: nil), forCellReuseIdentifier:cellID)
//1.從我們自己的服務(wù)器,獲取需要銷售的商品
//2.拿到需要銷售的商品,到蘋果服務(wù)器,進(jìn)行驗(yàn)證,看下哪些商品,才可以真正被銷售
YFDataTools.getGoodsList { (ids:Set<String>) ->() in
//2.拿到需要銷售的商品,到蘋果服務(wù)器,進(jìn)行驗(yàn)證,看下哪些商品,才可以真正被銷售
//2.1 創(chuàng)建一個(gè)商品請(qǐng)求,請(qǐng)求哪些商品可以真正的被銷售
let request :SKProductsRequest = SKProductsRequest(productIdentifiers: ids)
//2.1.1設(shè)置代理
request.delegate = self
//2.2 發(fā)送請(qǐng)求
request.start()
}
}
extension ViewController: SKProductsRequestDelegate{
//當(dāng)請(qǐng)求完畢之后,從蘋果服務(wù)器獲取到數(shù)據(jù)之后調(diào)用
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
//response
//products 可以被銷售的商品
//invalidProductIdentifiers 無(wú)效的商品ID
productsArr = response.products
print("可以被銷售的商品:\(response.products)")
print("無(wú)效的商品ID :\(response.invalidProductIdentifiers)")
}
}
extension ViewController : UITableViewDelegate,UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return productsArr.count
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 60
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellID, for: indexPath) as! CustomTableViewCell
//獲取對(duì)應(yīng)的商品數(shù)據(jù)模型
let product = productsArr[indexPath.row]
cell.titleLab?.text = product.localizedTitle
cell.subTitleLab?.text = product.localizedDescription + "\(product.price)"
return cell
}
}
運(yùn)行我們得到了商品列表界面.此時(shí)我們點(diǎn)擊的時(shí)候應(yīng)該開始購(gòu)買,所以要添加到購(gòu)買隊(duì)列中,主要代碼如下:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//取出需要購(gòu)買的商品
let product = productsArr[indexPath.row]
//2.0判斷當(dāng)前的支付環(huán)境,是否可以支付
if SKPaymentQueue.canMakePayments() {
//2.購(gòu)買商品
//2.1 根據(jù)商品,開一個(gè)支付小票
let payment = SKPayment(product: product)
//2.2添加到支付隊(duì)列,開始進(jìn)行購(gòu)買隊(duì)列
SKPaymentQueue.default().add(payment)
//2.3添加交易隊(duì)列堅(jiān)挺著,來監(jiān)聽交易狀態(tài)
SKPaymentQueue.default().add(self)
}
}
//MARK:交易隊(duì)列的監(jiān)聽者
extension ViewController : SKPaymentTransactionObserver{
//當(dāng)交易隊(duì)列列名添加的每一筆交易狀態(tài)發(fā)生變化的時(shí)候調(diào)用
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
switch transaction.transactionState {
case .deferred:
print("延時(shí)處理")
case .failed:
print("支付失敗")
//應(yīng)該移除交易隊(duì)列
queue.finishTransaction(transaction)
case .purchased:
print("支付成功")
//應(yīng)該移除交易隊(duì)列
queue.finishTransaction(transaction)
case .purchasing:
print("正在支付")
case .restored:
print("恢復(fù)購(gòu)買")
//應(yīng)該移除交易隊(duì)列
queue.finishTransaction(transaction)
}
}
}
}
運(yùn)行點(diǎn)擊商品,出現(xiàn)如下界面

這里讓我們輸入賬號(hào)和密碼,這里我不可能使用我自己的真是賬號(hào)和密碼如購(gòu)買.所以這里需要添加一個(gè)測(cè)試賬號(hào).
3.添加測(cè)試賬號(hào).
3.1 在用戶職能--沙箱技術(shù)測(cè)試員中添加

3.2 填寫測(cè)試人員的相關(guān)信息

3.3查看添加后的狀態(tài)

此時(shí),再次運(yùn)行,點(diǎn)擊一個(gè)商品進(jìn)行購(gòu)買,出現(xiàn)如下的界面:

點(diǎn)擊使用先用的Apple ID,輸入我們剛剛創(chuàng)建的沙盒測(cè)試員的賬號(hào)進(jìn)行購(gòu)買.



如果你購(gòu)買的是非消耗商品,再次購(gòu)買的時(shí)候會(huì)提示已經(jīng)購(gòu)買了此商品.

4. 內(nèi)購(gòu)流程- 稅務(wù)信息配置
4.1 登錄itunes connect

4.2協(xié)議、稅務(wù)和銀行業(yè)務(wù)
















過程中遇到的問題
1.點(diǎn)擊購(gòu)買沒有彈出輸入賬戶密碼框,解決方法是 到手機(jī)設(shè)置里面iTunes Store 與 App Store 里面注銷你原本的賬號(hào)

2.運(yùn)行程序的時(shí)候,賬戶中明明添加了商品,但是無(wú)法獲得商品ID

解決辦法:

第一次做內(nèi)購(gòu),這么多功能其實(shí)還是都是陌生的,因?yàn)閮?nèi)購(gòu)沒做過,但是人生不就是一次一次的挑戰(zhàn)嘛! 其實(shí)回過頭來看,大多數(shù)都是一些配置信息,內(nèi)購(gòu)的代碼其實(shí)是很少的,加油吧,多多挑戰(zhàn)一下自己,有時(shí)候不挑戰(zhàn)一下自己,都不知道什么是絕望??