[Android] In-App Billing Version 3 筆記

為了處理v2轉v3,以下是讀官方文件的筆記。

前言

Version 3的優點:
  • 同時性購買流程(synchronous purchase flow)
  • 讓你輕鬆追蹤消耗性商品的所有權的APIs
  • IAP資料的local caching(一種加速訪問檔案資料的網路連結的技術)

商品種類

  • Managed In-app Products
    • 定義:由Google Play追蹤和管理其所有權資訊的item。
    • 處理過程:當使用者購買這樣的項目時,Google Play會依照每個使用者去儲存購買該項目的資訊,你可以稍後搜尋此資訊已恢復特定使用者已購買的項目的狀態。此一資料是永久儲存在Google Play伺服器上的,即使使用者移除此應用。
    • 在Version3你可以管理消耗性IAP,比方說魔法力之類的項目,你可以為那些可多次購買的項目實作消耗(consumption),一旦送出consumption要求到Google Play以進行購買,直到消耗掉為止都不能再次購買。
  • Subscriptions
    • 定義:是一種商品類型(product type),可提供一種IAB,讓你可以每個月或每年固定購買以提供內容、服務或功能給使用者。
    • 處理過程:在版本3裡面,你可以使用和IAP同樣的購買流程在購買subscription接收subscription購買資訊


Purchasing Items

使用版本3的API進行購買的典型流程是這樣:
  1. 送出isBillingSupported要求到Google Play,這是為了確定你使用的IAB的API版本是否支援(SUPPORTED/NOT_SURPPORTED)。
  2. 當你的APP啟動或是使用者登入後,最好要跟Google Play確認使用者已擁有了什麼樣的物件,可送出getPurchased()要求來搜尋使用者的IAPs,若要求成功,Google Play會回傳一個Bundle,包含已購買項目的商品ID列表、各個購買細目的列表以及每個購買的簽名列表。
  3. 通常你會想要告知使用者可購買的商品,可以送出getSkuDetails()要求以搜尋定義在Google Play的IAP細節。若成功,Google Play會回傳一個包含你所需要的資訊的Bund
  4. 當使用者未擁有某個IAP,你可以開始進行購買。應用程式會送出getBuyIntent()要求來開始購買,你要指明要購買的項目的商品ID和其他的參數。
    1. Google Play會回傳Bundle,裡面包含一個PendingIntent,這是你的應用程式用來開啟checkout的UI。
    2. 你的應用程式會呼叫startIntentSenderForResult方法來啟動pending intent。
    3. 當checkout流程結束後(這表示,購買已成功或是已取消購買),Google Play會送出一個Intent給你的onActivityResult方法。onActivityResult的參數resultCode會指出購買是否成功。Intent則包含了購買項目的資訊,包含purchaseToken字串,這是由Google Play產生以識別這次的購買交易。同時Intent也包含了購買的簽名。

Consuming In-app Products

你可以使用consumption mechanism去追蹤IAP的使用者擁有權。

在第三版,所有的IAP都被管理,這表示,所有In-app項目購買的使用者所有權都由Google Play管理,你的應用程式可以搜尋使用者的購買資訊。使用者若成功購買IAP,購買就會記錄在Google Play,而且IAP會變成owned狀態,在此狀態的IAP是不能再次從Google Play被購買的,你必須送出consumption request給owned的IAP,此IAP才會轉換成unowned狀態,並且之前的購買資料會被捨棄。

基本流程:
  1. 送出getPurchases呼叫到Google Play可接收到使用者擁有的產品列表。
  2. 應用程式送出consumePurchase呼叫。

管理可消耗的購買

以下是購買可消耗IAP的基本流程:
  1. 使用getBuyIntent啟動購買流程
  2. 若購買成功的完成,會由Google Play獲得Bundle。
  3. 若購買成功,做出consumePruchase呼叫來消耗購買。
  4. 若consumption成功的完成,會由Google Play獲得response code。
  5. 若consumption成功,在你的應用程式中提供商品。
如果你要實作可消耗的IAP,以下是建議的開始流程:
  1. 送出getPurchases要求以搜尋使用者有的IAP。
  2. 若有可消耗的IAP,要呼叫consumePurchase來消耗項目。這是必要的步驟,因為應用程式可能已完成可消耗項目的購買次序,但是在應用程式要送出consumption要求時停止或是離線。
  3. 若consumption成功完成,由Google Play得到response code。
  4. 如果consumption成功,在應用程式內提供項目。

留言