我過去還真的沒有想到,In-App Purchase居然要寫到Part 3。為什麼我要寫Part3呢?其實在Part 1、2都已經把In App Purchase的使用方式都介紹的很詳盡了,但是,在”實務”上,是要添加小技巧的,以下為原因: 1. 在連結In-App purchase的時候,如何讓所有動作(如按鈕、touch等)需暫停? 2. 如果網路不通、或無網路服務,如何停止連線? 3. 索取購物資訊的時候,如果發生錯誤,如何停止連線? 以下我將依序介紹該如何建構出一個好的In-App Purchase架構。 首先,先觀看一下,原本設計的流程架構:
以上流程架構完全是一條線的方式,商店初始化後,就索取資訊,然後建立按鈕等待使用者按下,然後等待系統回應。這樣一條龍式的程式設計,如果其中有一環節出問題,將使程式變成無限循環的Run下去,無法將購買步驟停止。因此,在這些流程中,需要加入一些判斷,去檢驗In-App Purchase是否還成功的持續連線中。因此會需要以下這些程式輔助: 1. 執行In-App Purchase時,會需要將目前畫面暫停,讓使用者知道目前在與In-App Purchase連線中,這邊採用以下程式:
native.setActivityIndicator( true )這功能主要是可以顯示一個平台的執行畫面,類似如下圖:
當啟動此功能時,所有touch功能將無法使用,也就可以達到暫停所有行為。 2. 檢查網路系統 透過以下程式檢查網路系統,若無網路連線,則回報給使用者,無法連線In-App Purchase。
local function check_internet() ------------------------------ -- Internet check via Socket ------------------------------ local internet if require("socket").connect("google.com", 80) == nil then print("No connection") internet = false else internet = true end return internet end那麼就可以利用以上方式來檢驗是否有網路連線,若無,跳出Alert顯示給使用者。
程式如下:
local function onCompleteok(event) if event.action == "clicked" then if event.index == 1 then print("OK") native.setActivityIndicator( false ) end end end if check_internet() then print("Internet Connect OK") print("Start to set up InAppPurchase") else print("Internet Connect failure") native.showAlert("Internet failed", "No internet connection. Please check internet and try again later.", { "OK" }, onCompleteok ) end
3. 在索取購物資訊的時候,由於如果沒有回應,則程式就會卡在與In-App Purchase連線的部份,因此,在此嚴謹一點,一般會採用一個timer去監測是否有資訊回應,若無,將In-App Purchase動作關閉。程式如下:
local function call_ConnectionTimer() local timerPurchase local delayTime = 60000 -- 60 sec local function checkConnection() if Connection_OK then print("Connect GOOD") else native.showAlert("Internet failed", "No InAppPurchase store reply. Please check internet and try again later.", { "OK" }, onCompleteok ) end end timerPurchase = timer.performWithDelay( delayTime, checkConnection ) return timerPurchase end
4. 在transactionCallback的時候,若是採購失敗,會回傳failed,也必須要顯示警示給使用者,然後解除螢幕鎖定:
native.showAlert("Failure notification", "Failed to initialize In App Purchase. Please try again later.", { "OK" }, onCompleteok )
以上補充將完整In-App Purchase之流程。最近我將會開發In-App Purchase之模組,會將上述功能完整包入,若有興趣者,敬請期待。
大大您好,感謝您熱血的不吝分享教學,內容充實又清楚!!實在是讓在下獲益良多!!謝謝!
回覆刪除在此想請問一下的是,如果用Corona SDK製作多人網路遊戲(就像市面上看到的那些網頁遊戲),請問要如何存取SERVER的data base呢?
感謝您的解答!!
(註:在下之前有在玩 php<->MySQL是有熟悉了)