iOS Swift 開發(fā)內(nèi)購實現(xiàn) SwiftyStoreKit


title: Xcode 8.3.2 Swift 實現(xiàn)內(nèi)購
date: 2017-05-25 14:58:32
categories:

  • Document
  • Code

tags:
- SwiftyStoreKit
- IAP


iOS 開發(fā)內(nèi)購實現(xiàn)

代碼環(huán)境

  • iOS IAP by Swift 3.1.1 , Xcode 8.3.2
  • Really Really Easy to use

需要的輪子

開始使用 (ItunesConnect)

Github Demo 地址

你需要有一個 App ( 肯定要有 付費的開發(fā)者賬號 )

  • 在 itunesconnect.apple.com弹渔,中配置內(nèi)購項目隙疚,如圖右側有一個(查看公共秘鑰)(驗證購買時需要使用)


    jpg14956962545142.jpg
  • 點擊加號新建購買項目


    png4CB8F5CE-A1A5-4036-83DA-7ADEB3F2336E.png
  • 根據(jù)你們產(chǎn)品的不同選擇對應的項目

  • 創(chuàng)建就很簡單了拦耐,每一項都有介紹這里就不多說了

  • 創(chuàng)建沙箱技術測試員用于內(nèi)購測試使用


    png08C982C8-C3C9-4405-8014-61947C73F3DD.png
  • 內(nèi)容可以隨便填寫,需要注意的是 郵箱 和 密碼需要記住(后面需要使用)


    png66BDEA86-FCE4-4510-BFBA-BF99A35F7206.png

使用此 App 的bundleID 唯一標示

  • 創(chuàng)建一個項目躏筏,項目的 bundleID 要與 iTunesconnect 中項目的id相同镰吵。

Cocoapods 導入 SwiftyStoreKit

  • pod 'SwiftyStoreKit' (內(nèi)購輪子)
  • pod 'Alamofire' (網(wǎng)絡請求輪子)

一切準備就緒-下面代碼部分

  • AppDelegate 添加以下代碼,在啟動時添加應用程序的觀察者可確保在應用程序的所有啟動過程中都會持續(xù)斜做,從而允許您的應用程序接收所有支付隊列通知。如果此時有任何待處理的事務湾揽,將觸發(fā)block瓤逼,以便可以更新應用程序狀態(tài)和UI。如果沒有待處理的事務库物,則不會調用霸旗。
import SwiftyStoreKit


func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    SwiftyStoreKit.completeTransactions(atomically: true) { purchases in
    
        for purchase in purchases {
    
            if purchase.transaction.transactionState == .purchased || purchase.transaction.transactionState == .restored {
    
               if purchase.needsFinishTransaction {
                   // Deliver content from server, then:
                   SwiftyStoreKit.finishTransaction(purchase.transaction)
               }
               print("purchased: \(purchase)")
            }
        }
    }
    return true
}
  • 獲取內(nèi)購項目列表
func getList() {
        SwiftyStoreKit.retrieveProductsInfo(["圖1 內(nèi)購項目的 產(chǎn)品ID 這個一般存儲在服務器里"]) { result in
            if let product = result.retrievedProducts.first {
                let priceString = product.localizedPrice!
                print("Product: \(product.localizedDescription), price: \(priceString)")
            } else if let invalidProductId = result.invalidProductIDs.first {
                print("Invalid product identifier: \(invalidProductId)")
            } else {
                print("Error: \(result.error)")
            }
        }
    }

  • 這里是我的列表,因為就創(chuàng)建一個內(nèi)購項目所以就一個


    pngC65895BF-CF49-47B1-87DD-27BDB7609FED.png
  • 購買 需要使用剛你在沙箱測試添加的郵箱密碼登錄(退出AppStore賬號)戚揭,購買的時候會提示你輸入賬號密碼诱告,此賬號非appid賬號,不能登錄在appstore 走成功就說明購買成功了民晒,簡單點就是扣錢了精居,這時候是沒有驗證處理的锄禽。

SwiftyStoreKit.purchaseProduct("產(chǎn)品ID", quantity: 1, atomically: true) { result in
    switch result {
    case .success(let purchase):
        print("Purchase Success: \(purchase.productId)")
    case .error(let error):
        switch error.code {
        case .unknown: print("Unknown error. Please contact support")
        case .clientInvalid: print("Not allowed to make the payment")
        case .paymentCancelled: break
        case .paymentInvalid: print("The purchase identifier was invalid")
        case .paymentNotAllowed: print("The device is not allowed to make the payment")
        case .storeProductNotAvailable: print("The product is not available in the current storefront")
        case .cloudServicePermissionDenied: print("Access to cloud service information is not allowed")
        case .cloudServiceNetworkConnectionFailed: print("Could not connect to the network")
        case .cloudServiceRevoked: print("User has revoked permission to use this cloud service")
        }
    }
}
  • 驗證購買,
    • 本地驗證 (不推薦箱蟆,越獄設備可能存在刷單漏洞)
    • 服務端驗證 (推薦使用)
    // 本地驗證(SwiftyStoreKit 已經(jīng)寫好的類) AppleReceiptValidator
    // .production 蘋果驗證  .sandbox 本地驗證
 let receipt = AppleReceiptValidator(service: .production)
 let password = "公共秘鑰"
 SwiftyStoreKit.verifyReceipt(using: receipt, password: password, completion: { (result) in
     switch result {
     case .success(let receipt):
      print("receipt--->\(receipt)")
         break
     case .error(let error):
      print("error--->\(error)")
         break
     }
 })
  • 服務器驗證 AppleReceiptValidatorX 是我重寫的類沟绪,里面就是把得到的data發(fā)給服務器讓服務器來驗證,返回成功失敗即可不需要其他數(shù)據(jù)空猜。

完成了绽慈,是不是很簡單,是不是很好理解辈毯。

  • SwiftyStoreKit 不知能做購買坝疼,還能恢復購買,具體使用方法見 SwiftyStoreKit

基本閱讀 --> SwiftyStoreKit

延伸閱讀

App 內(nèi)購驗證

[官方文檔]
(https://developer.apple.com/library/content/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html)

License

AppPurchasesDemo is released under the MIT license. See LICENSE for details.

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谆沃,一起剝皮案震驚了整個濱河市钝凶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌唁影,老刑警劉巖耕陷,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異据沈,居然都是意外死亡哟沫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門锌介,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嗜诀,“玉大人,你說我怎么就攤上這事孔祸÷「遥” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵崔慧,是天一觀的道長拂蝎。 經(jīng)常有香客問我,道長惶室,這世上最難降的妖魔是什么匣屡? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮拇涤,結果婚禮上,老公的妹妹穿的比我還像新娘誉结。我一直安慰自己鹅士,他們只是感情好,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布惩坑。 她就那樣靜靜地躺著掉盅,像睡著了一般也拜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上趾痘,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天慢哈,我揣著相機與錄音,去河邊找鬼永票。 笑死卵贱,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的侣集。 我是一名探鬼主播键俱,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼世分!你這毒婦竟也來了编振?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤臭埋,失蹤者是張志新(化名)和其女友劉穎踪央,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瓢阴,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡畅蹂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了炫掐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片魁莉。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖募胃,靈堂內(nèi)的尸體忽然破棺而出旗唁,到底是詐尸還是另有隱情,我是刑警寧澤痹束,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布检疫,位于F島的核電站,受9級特大地震影響祷嘶,放射性物質發(fā)生泄漏屎媳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一论巍、第九天 我趴在偏房一處隱蔽的房頂上張望烛谊。 院中可真熱鬧,春花似錦嘉汰、人聲如沸丹禀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽双泪。三九已至持搜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間焙矛,已是汗流浹背葫盼。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留村斟,地道東北人贫导。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像邓梅,于是被迫代替她去往敵國和親脱盲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 一.總說內(nèi)購的內(nèi)容 協(xié)議日缨、稅務和銀行業(yè)務 信息填寫 內(nèi)購商品的添加 添加沙盒測試賬號 內(nèi)購代碼的具體實現(xiàn) 內(nèi)購的注...
    默默_David閱讀 3,647評論 0 6
  • 一.總說內(nèi)購的內(nèi)容 協(xié)議钱反、稅務和銀行業(yè)務 信息填寫 內(nèi)購商品的添加 添加沙盒測試賬號 內(nèi)購代碼的具體實現(xiàn) 內(nèi)購的注...
    九洲仙人閱讀 2,960評論 2 3
  • 自己開發(fā)的視頻直播項目,牽涉到充值金幣匣距,用到了蘋果公司的內(nèi)購面哥,趴坑了兩天,這里總結下實現(xiàn)蘋果內(nèi)購毅待。 一. 創(chuàng)建測試...
    Leo丶Dicaprio閱讀 3,365評論 8 7
  • 1 尸红、在iTunes Connect中吱涉,每個應用程序可以創(chuàng)建多少格內(nèi)置購買產(chǎn)品 ID ? 閱讀 In-App Pu...
    Dosun閱讀 3,884評論 0 0
  • 夢娥 靜望天邊夜幕外里, 君心不知何處怎爵。 月陰轉月晴, 誤入蟾宮深處盅蝗。 心宿鳖链! 心宿! 只緣嫦娥玉兔墩莫。 ...
    高一點兒閱讀 647評論 5 15