iOS開發 使用RMStore簡化內購代碼 + 內購買訂單驗證

来源:http://www.cnblogs.com/GarenChen/archive/2016/04/07/5365948.html
-Advertisement-
Play Games

現在很多的app裡面都添加了應用內購買,網上關於蘋果證書的生成和設置的教程比較多,這裡就不多贅述了,推薦幾個個人覺得說的比較詳細的網址: http://www.jianshu.com/p/86ac7d3b593a http://blog.csdn.net/shenjie12345678/articl ...


    現在很多的app裡面都添加了應用內購買,網上關於蘋果證書的生成和設置的教程比較多,這裡就不多贅述了,推薦幾個個人覺得說的比較詳細的網址:

http://www.jianshu.com/p/86ac7d3b593a

http://blog.csdn.net/shenjie12345678/article/details/40978977

    在項目中我使用了RMStore的第三方來實現內購代碼,因為這個框架對內購代碼進行了很好的封裝,所以依賴框架後的代碼十分簡單:

 

    向appStore請求商品:

    NSString *productIds = @[@"ID_1",@"ID_2",@"ID_3"],
    [[RMStore defaultStore] requestProducts:[NSSet setWithArray:productIds] success:^(NSArray *products, NSArray *invalidProductIdentifiers) {

        if([products count] == 0){
            NSLog(@"--------------沒有商品------------------");
            return;
        }

    } failure:^(NSError *error) {
         NSLog(@"--------------請求商品失敗------------------");
    }];


    購買商品:

   
    NSString *appleProductId = productId;  
    [[RMStore defaultStore] addPayment:appleProductId success:^(SKPaymentTransaction *transaction) {

        NSLog(@"------交易成功------");
        
    } failure:^(SKPaymentTransaction *transaction, NSError *error) {
        NSLog(@"------交易失敗------");
        NSLog(@"error:%@",error);

    }];

 

    原本繁瑣的的代碼就以上兩個方法就可以搞定了,購買過程中詳細的信息可以在block中的 transaction 和 error 等參數中獲取.

    購買成功後,為了防止不被人破解無限刷幣,所以購買完成後要進行訂單驗證.要詳細瞭解的話可以看看api Receipt Validation Programming Guide

為了確保驗證的準確和穩定,一般交由後臺去驗證,在iOS端我們需要獲得訂單的receipt數據,然後把這個數據發給後臺:

    NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
    NSData *receiptData = [NSData dataWithContentsOfURL:receiptURL];
    NSString *receiptStr = [receiptData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
    //把receiptStr發給伺服器;

    原先在SKPaymentTransaction 這個類中有receipt這個參數,直接transaction.receipt就可以獲得驗證數據,但iOS7後就已經過期了,所以根據app適配的系統版本來選擇獲取receipt的方式。

    後臺的小伙伴收到這串receipt後,將其通過下麵的url發送給蘋果伺服器,要註意測試和發佈用的驗證地址是不一樣的。

    沙盒測試: https://sandbox.itunes.apple.com/verifyReceipt

    app發佈後: https://buy.itunes.apple.com/verifyReceipt

    驗證後蘋果伺服器會返回驗證信息,大概是3s左右,伺服器的小伙伴就根據返回的信息確認訂單是否有效。具體app返回的參數可以在api中找到。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ​【聲明】 歡迎轉載,但請保留文章原始出處→_→ 生命壹號:http://www.cnblogs.com/smyhvae/ 文章來源:http://www.cnblogs.com/smyhvae/p/3981720.html 聯繫方式:[email protected] 【正文】 一、初識Git: Gi ...
  • 鍵盤的出現於隱藏(解決鍵盤彈出時會覆蓋文本框的問題,代碼實現) #import "ViewController.h" #import "UIView+FrameExtension.h" // 可以自己寫,以後用著方便 #define kDeviceHeight [UIScreen mainScree ...
  • 學習一門新語言最經典的例子就是輸出“Hello World!” 如果你使用過其他語言,那麼看上去是非常的熟悉吧。但比一些c要簡單的多吧 1、不需要導入一些單獨的庫,比如輸入/輸出或字元串處理功能的類庫, 2、不需要在全局範圍內編寫的代碼用於作為入口點程式,所以你不需要 main()函數, 3、不需要 ...
  • 前言:繼上次《IOS開發--微信支付》以來,一直沒有太多時間,更新總結詳細支付這樣的長篇大論,很抱歉。今天,推出支付寶支付的詳細流程。 1、開始下載和查看支付寶支付的Demo。 我們直接進入支付寶的支付平臺參考來進行集成支付寶支付: https://doc.open.alipay.com/doc2/ ...
  • [[XZMusicTool alloc] init]; [XZMusicTool sharedMusicTool]; [tool4 copy]; 以上三種方式都能保證創建出來的對象是同一個. ...
  • 上一節完成的自定義組合控制項,靈活性不夠,控制項的顯示信息上,仿照系統屬性,自定義自己的屬性 上一節組合控制項SettingItemView中有三個控制項,分別是TextView大標題,TextView描述,CheckBox覆選框 自定義屬性 tsh:title=”大標題” 和tsh:desc_on=”小標 ...
  • 列出了隊列組的用法以及和隊列組同樣效果的實現方式;共三種實現方式。 ...
  • 由於項目需求緣故,最近在學習Android地圖的開發,所以就記錄一下學習過程。最近都會陸續更新啦。目前使用百度地圖API的挺多的,所以就先以它為基礎學習一些地圖的調用。 一、AK的申請 與web開發不一樣,Android的地圖項目開發需要申請一個AK才能調用地圖功能。 1.註冊成為百度開發者,正常填 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...