swift 內購

1.0 內購類型

a. 消耗型商品:只可以使用一次的產品,使用以后即失效蚂踊,必須再次購買仗谆。
示例:小說App購買的書幣書券。
b. 非消耗型商品:只需購買一次扒吁,不會過時或隨著使用而減小的產品火鼻。
示例:游戲 App 的賽道。
c. 自動續(xù)期訂閱:容許用戶在固定時間段內購買動態(tài)內容的產品雕崩。除非用戶選擇取消魁索,不然此類訂閱會自動續(xù)期。
示例:每個月訂閱提供流媒體服務的 App盼铁。
d. 非續(xù)期訂閱:容許用戶購買有時限性服務的產品粗蔚。此 App 內購買項目的內容能夠是靜態(tài)的。此類訂閱不會自動續(xù)期饶火。
示例:為期一年的已歸檔文章目錄訂閱鹏控。

2.0 內購的通用流程

a. 客戶端向Appstore請求購買產品(假設產品信息已經取得),Appstore驗證產品成功后肤寝,從用戶的Apple賬戶余額中扣費当辐。
b. Appstore向客戶端返回一段receipt-data,里面記錄了本次交易的證書和簽名信息鲤看。
c. 客戶端向我們可以信任的服務器提供receipt-data
d. 服務器對receipt-data進行一次base64編碼
e. 把編碼后的receipt-data發(fā)往itunes.appstore進行驗證
f. itunes.appstore返回驗證結果給服務器
g. 服務器對商品購買狀態(tài)以及商品類型缘揪,向客戶端發(fā)放相應的道具與推送數據更新通知

3.0 實際應用中的內購流程(自己產品為例)

a. 驗證蘋果自動續(xù)費的合理性: 是否是切換了賬號了,是否是同一個賬號下有2個不同的appleid訂閱(訂閱類型會進行此校驗义桂,消耗性直接走b)
b. 后臺校驗成功后找筝,創(chuàng)建后臺訂單
c. 訂單生成后,傳入productID發(fā)起購買請求慷吊,蘋果服務器驗證產品成功后袖裕,從用戶的Apple賬戶余額中扣費并向客戶端返回憑證(receipt-data)
d. 客戶端拿到憑證后,向服務器發(fā)起憑證校驗溉瓶,服務器拿到憑證進行一次base64編碼急鳄,發(fā)到蘋果服務器進行校驗并返回結果給服務器。
e. 服務器對商品購買狀態(tài)以及商品類型嚷闭,向客戶端發(fā)放相應的道具與推送數據更新通知

內購的遇到的問題

a攒岛、掉單問題

解決掉單問題前,我們要先簡單把從支付請求開始到結束的步驟按照順序排列出來胞锰,然后分析每一個步驟可能存在的調單情況灾锯。

  1. 發(fā)起支付請求 ---> 2. 扣費成功,得到receipt(支付憑據)---> 3. 去后臺驗證憑據獲取e豆 ---> 4. 返回數據嗅榕,前端刷新數據

調單的處理可分為在拿到交易訂單之后調用 IPA 創(chuàng)建一個 IPA 交易顺饮,并且添加到支付隊列吵聪,收到回調前跟收到回調后。
在創(chuàng)建后臺訂單時兼雄,此時后臺會把訂單信息回調吟逝,并將其已模型的形式存入Keychain中(存入Keychain中數據不會因卸載app等操作丟失)

情況1 創(chuàng)建訂單完成,并沒有發(fā)起支付請求

通過校驗隊列中的transactions進行判斷赦肋,沒有的話就是沒有發(fā)起支付請求块攒,那么此時需要重新發(fā)起支付的請求。

情況2 收到回調前(此時未拿到transactionId佃乘、憑證)

通過校驗隊列中的transactions進行判斷囱井,有的話就是已經發(fā)起支付請求但是沒有收到回調,此時需要做SKPaymentQueue.default().restoreCompletedTransactions()(恢復已經完成的 交易)

情況2 收到回調后

首先將transactionId和憑證更新到已存入的Keychain中趣避,通過校驗Keychain中的transactionId是否存在庞呕,來確定是否已經收到回調,此時需要拿著存入Keychain中的憑證等到后臺去校驗程帕。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末住练,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子愁拭,更是在濱河造成了極大的恐慌讲逛,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件敛苇,死亡現場離奇詭異妆绞,居然都是意外死亡顺呕,警方通過查閱死者的電腦和手機枫攀,發(fā)現死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來株茶,“玉大人来涨,你說我怎么就攤上這事∑羰ⅲ” “怎么了蹦掐?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長僵闯。 經常有香客問我卧抗,道長,這世上最難降的妖魔是什么鳖粟? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任社裆,我火速辦了婚禮,結果婚禮上向图,老公的妹妹穿的比我還像新娘泳秀。我一直安慰自己标沪,他們只是感情好,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布嗜傅。 她就那樣靜靜地躺著金句,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吕嘀。 梳的紋絲不亂的頭發(fā)上违寞,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機與錄音偶房,去河邊找鬼坞靶。 笑死,一個胖子當著我的面吹牛蝴悉,可吹牛的內容都是我干的彰阴。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼拍冠,長吁一口氣:“原來是場噩夢啊……” “哼尿这!你這毒婦竟也來了?” 一聲冷哼從身側響起庆杜,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤射众,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后晃财,有當地人在樹林里發(fā)現了一具尸體叨橱,經...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年断盛,在試婚紗的時候發(fā)現自己被綠了罗洗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡钢猛,死狀恐怖伙菜,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情命迈,我是刑警寧澤贩绕,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站壶愤,受9級特大地震影響淑倾,放射性物質發(fā)生泄漏。R本人自食惡果不足惜征椒,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一娇哆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦迂尝、人聲如沸脱茉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽琴许。三九已至,卻和暖如春溉躲,著一層夾襖步出監(jiān)牢的瞬間榜田,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工锻梳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留箭券,地道東北人。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓疑枯,卻偏偏與公主長得像辩块,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子荆永,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內容