本然想既然台灣目前不能上架付費版apk,
那麼就來改走in-app purchase路線,
結果⋯
Before you get started with in-app billing, be sure to review the following requirements and limitations.
在你開始使用內部app金流時,請確定已經看過以下的限制和需求
- In-app billing can be implemented only in applications that you publish through Android Market.內部app金流只能透過Android Market實作並且發佈
- You must have a Google Checkout Merchant account to use Android Market In-app Billing.你必須有一組Google Checkout帳號
- If your device is running Android 3.0, in-app billing requires version 5.0.12 (or higher) of the MyApps application. If your device is running any other version of Android, in-app billing requires version 2.3.4 (or higher) of the Android Market application.如果你的裝置是運行Android 3.0的話,內部app金流需要MyApps這隻程式版本5.0.12(或更高)。如果你的裝置是運行其它版本,那麼需要Android Market版本在2.3.4(或更高)
- An application can use in-app billing only if the device is running Android 1.6 (API level 4) or higher.能使用內部app金流機制的程式必須是在Android1.6(或更高)。
- You can use in-app billing to sell only digital content. You cannot use in-app billing to sell physical goods, personal services, or anything that requires physical delivery.
- Android Market does not provide any form of content delivery. You are responsible for delivering the digital content that you sell in your applications.
- You cannot implement in-app billing on a device that never connects to the network. To complete in-app purchase requests, a device must be able to access the Android Market server over the network.
手機型號 | 系統版本 | Android Market版本 |
Motorola X720 | 2.1 | 2002306 |
Nexus One | 2.3.4 | 2.3.6 |
Nexus S | 2.3.4 | 2.3.6 |
HTC Hero | 2.1 | 2002306 |
HTC Incredible | 2.3.3 | 2.3.4 |
HTC Legend | 2.1 | 2002306 |
有發現什麼事嗎?XD
=====稍微做一下筆記(底下會持續更新)======
1.必須在permission加入
com.android.vending.BILLING
如果沒加入,publish頁面會無法新增in app product
2.需要申請測試帳號
3. 應用程式不需要被發佈,但in app product一定要發佈才能測
4. 發佈時請用Release版的signature
5. 測試程式的版本號需與market這個測試apk版本一致
6.一定要用實機測試billing,不能用模擬器
7.實機的帳戶請設成測試帳戶
設定方法︰
- Open Settings on your device.
- Touch Privacy.
- Touch Factory data reset.
- Touch Reset phone.
- After the phone resets, be sure to sign in with one of your test accounts during the device setup process.
如果是平板Android 3.0以上請確認是否有MyApps這隻程式且版本在5.0.12以上。
=========================
In-app Billing Overview頁面重點︰
1. In-app purchase使用asynchronous message loop
2. 我們的應用程式不會和Android Market直接互動,而是透過發送請求的方式。
一個典型的in-app purchase仰賴以下三大元件︰
1. Service - (範例程式裡的BillingService),負責處理從程式裡發送出來到Android Market in-app billing Service的購買訊息、
2. BroadcastReceiver - (範例程式裡的為
BillingReceiver
),負責接收從Android Market來的所有非同步(asynchronous)交易回應。3. Security - (範例程式裡的為
Security
),負責執行安全相關的工作任務。像是數位簽章驗證(signature verification)以及nonce generation(?)也許你還會併入另外兩個元件來處理in-app purchase︰
1. Handler - (範例程式裡的為
ResponseHandler
),處理購買通買通知訊息、錯誤、或其它的狀態訊息2. observer - (範例程式裡的為
PurchaseObserver
),負責發送callback到我們的應用程式,因此我們能夠更新我們的程式內的購買資訊畫面。商品型態分為二種︰
1. 經由使用者帳戶管理 - 若商品選擇該方式,那麼購買資訊等⋯,將會被儲存於Android Market後臺。這種性質的商品,若使用者換裝置,並重新安裝你的軟體,該購買都會保存。
2. 不管理 - 不會將購買資訊儲存於Android Market後臺。舉例來說︰遊戲裡的魔法藥水。
處理複雜的in-app pruchase交易流程
上圖由上至下是整個應用程式內結帳的流程順序。
一旦你使用到了該機制,
整體的程式碼互動性就和這個架構開始息息相關。
官方文件提到,即使你沒有呼叫REQUEST PURCHASE去呼叫出購買視窗,
我們都一定要處理IN_APP_NOTIFY這個broadcast receiver(參閱In-app Billing Overview下方文章)。
為什麼呢?
1. 因為Android Market可能會傳來讓程式內部交易的記錄,我們必須要處理
2. 使用者可能多機一帳號,我們要將該資訊連結至新裝置的程式裡
Android Market也會藉由IN_APP_NOTIFY通知程式該in-app purchase已退費的事情。
退費狀態會尾隨著PURCHASE_STATE_CHANGED這個BroadCast Receiver以JSON的方式傳進來︰
purchaseState值回傳2(表示已退費)
JASON資料被綁在PURCHASE_STATE_CHANGED裡傳進來
詳細內文請看Android Document
您好, 請教您一下.
ReplyDelete我正在測試Dungeons Example, 作法是把我的public key放入Security.java裡的base64EncodedPublicKey變數中, 然後在Xoom實機上面測試(Android 3.1 + My Apps version .0.12).
程式執行時我總是會看到Can't make purchases對話方塊, The Market billing service is not available at this time...
請問一下是不是還有其他地方要注意的?? 謝謝您
我之前也是愈到這個狀況。
ReplyDelete似乎是因為 Google 把台灣的Market付費功能鎖起來了。
所以我之後使用VPN跳板跳至美國後情況就解決了。
當然 Market 內容也都是美國當地的商品摟
樓上的大大您好, 請問您的意思是在台灣的App都無法使用In-app billing嗎?
ReplyDelete(其實我下載了幾個別人放上Market的Dungeons Test都不能用, 所以應該是這樣沒錯)
請問這跟台灣的"七天鑑賞期"是不是有關聯?
謝謝您不吝解惑
This comment has been removed by a blog administrator.
ReplyDelete前輩您好,
ReplyDelete目前單純測試in-app的static responses,一直也有Can't make purchases的訊息,困擾了我很久,是否能請您幫忙檢視一下問題出在哪裡,非常感謝~
我的作法步驟如下:
1.新增一個Project將下載的Dungeons Example Source加入。
2.Build Project後,將Project下bin目錄的InApp.apk使用adb.exe install至實體手機。
3.手機已虛擬成外國用戶,於Market中可看到付費App的清單。
4.Android Market版本已確認為2.3.4
5.開啟執行程式,則出現Can't make purchases的訊息。
前輩您好,
ReplyDelete後來在code裡我發現到,
雖然手機已虛擬成外國用戶,於Market中可看到付費App的清單,但是程式中仍回應位在台灣,所以不支援而顯示Can't make purchases的訊息。
不好意思,打擾了~~^^||
小姿姿你好,
ReplyDelete我在實作Iap(in-app-purchase)的過中,
雖然我VPN和Market enabler交互使用,
但其實有時候都還是會碰到你說的︰Market能看見,但iap卻出現無法找到商品的問題。
我發現每當你設完vpn後,
market的cache你最好清除,
可能在cache中有留存一些你台灣的資料在裡面。
這個問題估計是VPN端點有些問題,
我只能回應妳在這個時間點,
在台灣做iap實在很不是時候。
後來我雖然靠VPN在台灣做完了這段,
但是穩定性卻輩受考驗。
(因為不是在國外測的)