I.A.P Google Play Billing - fantasy0107/notes GitHub Wiki

訊息來源

If you want to sell physical goods on Android, refer to Google Pay
Google Play Billing is a service that lets you sell digital content from inside an Android app, or in-app

Google Play Billing

販賣虛擬東西

  • google play - 是線上商店

  • Google Play Console - app 開發使用者去 publish appds 在 google play

  • Google API Console - 管理後端 api 例如 Google Play Developer API, 建立 service 帳戶去辨識購買和訂閱

  • Android devic - 任何裝置去跑 android app 例如

  • Android app - 在 android 機器上跑的 app

  • Secure backend server - 開發者提供的server 去實作購買 或訂閱

  • Play Store app - app 負責管理所有操作和 google play billing 相關. 所有你的app 的請求將會被 google play store 處理

  • Google Play Billing Library. - 是一個 api 開發者使用它去實作 google play billing

  • Google Play Developer API - 一個 REST API 用來程式化表現一堆 publishing 和 app 管理任務. 它包含 Subscriptions and In-App Purchases API 去管理in-app 購買和訂閱, Publishing API 上傳或發佈 apps 還有發布相關的任務

  • Real-time developer notifications - Server 發布 notifications 讓你的 monitor state 改變像是 SUBSCRIPTION_PURCHASED or SUBSCRIPTION_RECOVERED, for Play-managed subscriptions.

範例

How to configure and code Android in-app purchases in React Native apps

react-native-billing

consumePurchase(productId) 這個 method 可以再買一次

In-app Billing Reference

只能在實機上用這個 api, 模擬器不可以

發票

您可以在次月月初索取前一個月的加值稅發票。
我們可能需要長達 24 小時來處理這類申請案件,敬請耐心等候
加值稅發票上顯示的地址是您進行該筆交易時的法定地址。
交易完成後,加值稅發票上所列的地址就無法修改

只有位於歐洲經濟區、瑞士和摩洛哥的顧客能索取加值稅發票。

步驟

  1. 設定 in-app 產品在 Google Play Developers Console 還有選擇資費方式 (一次性或者訂閱)
  2. coding with app 用 bridge package 像 react-native-billing

Google Play Developers Console

  1. 選擇 app
    所有應用程式 -> 選擇要新增商品的 app

要記得上傳已經開啟權限的 app

//新增權限路徑位置
android\app\src\main\AndroidManifest.xml 

<uses-permission android:name="com.android.vending.BILLING"/>
  1. 選擇 Store presence -> In-app products

建立受管理的產品 - 收取一次性費用

購買多次的可能性辦法

  1. 設定產品屬性
  • 產品 ID - 唯一

開頭必須是數字或小寫字母,
而且只能包含數字 (0-9)、
小寫字母 (a-z)、
底線 (_) 和句號 (.)。
項目建立後,您就無法再修改產品 ID,也不能在應用程式中重複使用產品 ID。

  • 標題(Title)
  • 說明(Description)
  • 狀態(Status) - 商品的狀態 - 未開放購買/訂閱中
  • 價格(Price) - 商品價格 - 預設價格必須介於 NT$30.00 和 NT$13,370.00 之間。

建立訂閱項目 - 定期收取內容或服務費用

圖

會有手續費 30% 所以只會收到 70%的付款金額

資料來源

安裝 react-native-billing

購買的時候是根據 google play 登入的帳戶

Add subscription-specific features

Real-time Developer Notifications

使用情況

處理訂閱相關狀態的改變使用 Real-time Developer Notifications

Real-time developer notifications 是伺服器推送通知讓你有能力監控狀態改變
像是 SUBSCRIPTION_PURCHASED 或者 SUBSCRIPTION_RECOVERED

對於 subscriptions. Real-time Developer Notifications 讓你可以反應狀態的改變

當你使用 Real-time Developer Notifications, 你的伺服器會收到 notifications 提醒你
有一個訂閱狀態產生改變你必須呼叫 developer API 在收到 Real-time Developer Notifications 之後去取的完整的 status 來更新你自己的後端伺服器狀態 但是這些 notifications 只是告訴你訂閱狀態改變. 它沒有告訴你完整的訊息關於訂閱狀態 當你檢查 developer API 你必須要做下面這些事情

  • If expiryTimeMillis is in the future, always grant entitlement.

  • If autoRenewing = false, try to get the user to resignup because the subscription will end at expiry time.

  • If paymentState = 0,send the user to the subscriptions center using the subscriptions center deep-link to fix their payment issue.

增加 real-time developer notifications

使用 Real-Time Developer Notifications, 你會收到 purchase token 來自 Cloud Pub/Sub 任何時候當有訂閱狀態更新的時候

real-time developer notifications 沒有提供完整的資訊關於訂閱狀態. 當你收到 token, 你必須 要使用 purchase token 去 query Google Play Developer API 去取的完整的資訊和更新你的 後端

Notification 類型在未來可能會改變. 你必須要能夠處理未辨識的 Notification 類型. 而且你必須依賴 Google Play Developer API 去處理商業邏輯

傳送測試通知

  1. google play console
  2. 開發工具 -> 服務和API
  3. 最下面有即時開發人員通知

Cloud Pub/Sub Subscriber Guide

去設定 subscription 的 push subscription 或 pull subscription
A pull subscription : 需要你的伺服器去 request Cloud Pub/Sub serve
A push subscription : 需要 Cloud Pub/Sub request 你的伺服器

Push Subscriber Guide

設定送到某個伺服器的網址

  1. 選擇專案
  2. 發布/訂閱
  3. 左邊列表 - 主題 topic
  4. 建立主題 topic(如果沒有) [建立步驟] (https://developer.android.com/google/play/billing/realtime_developer_notifications)
  5. 選擇主題 topic
  6. 建立訂閱項目填入 訂閱名稱和 傳送類型選擇 推送至後端網址(但是要記得註冊 endpoint) 註冊方式

Cloud Pub/Sub 價格

回傳的格式

從 Pub/Sub 過來的 request 目前測試是 購買和暫停 訂閱的商品都會傳訊息過來

Cloud Pub/Sub Client Libraries

{
    "message":{
      "data":"base64-encoded code", //需要用 base64_decode (php)
      "messageId":"287674125841410",
      "message_id":"287674125841410",
      "publishTime":"2018-12-06T06:04:06.541Z",
      "publish_time":"2018-12-06T06:04:06.541Z"
    },
    "subscription":"projects\/api-project-\/subscriptions\/aaaaaaa"
}

其它

測試用信用卡

google play console => 左邊項目列 => 設定 => 測試用 Gmail 帳戶填email