0%

前言

有點久沒發文了,來更新一下近況
現在到了2021年的最後一個月,開始有點壓力了
記得年初的時候訂了個目標,說今年一定要上架APP
現在只剩不到30天,好緊張啊

今天就要來分享一下有關內購式產品的設定

什麼是內購

應用程式內購買項目(In App Purchase, IAP)
是跟買斷相對的概念
意思是應用程式本身也許是免費的,但使用者可能會在APP內課金
沒錯! 就是課金!
無論是單次購買體力,或是訂閱制,pro 等等都屬於 IAP

react native 是可以支援 IAP 的
但在 Expo 上可能就有點麻煩
在 Expo SDK v40 以前,只有 eject 一條路可以走
不想 eject 就沒門

但在 Expo SDK v41 之後,出現了新東西: development client
雖然我還不知道這東西到底是做什麼的以及好在哪
但貌似可以讓各位”Expoer”在不用 eject 的情況下也能使用 native 相關功能
感覺很棒,這樣我就可以應用在去除廣告上了

前置作業

首先我們要完成幾件事情,但因為不是本篇的重點,我會直接放說明文件連結

  1. 安裝 EAS(Expo Application Services)
  2. 將專案至少升級到 Expo SDK v41.0 以上
  3. 擁有 Google playApp Store 的開發人員帳號

由於我會先在 Google play 上架,目前就先以 Android 版來示範
iOS 不知道在貴什麼啦爛透ㄌ

安裝 react-native-purchase

以正常流程來說,如果我們要提供內購產品
必須修改 native 程式碼,為 APP 新增一個 com.android.vending.BILLING 的權限
這也是為什麼我們原本需要 eject
但現在

Recent versions of React Native will automatically link the SDK, so all that’s needed is to install the library.

我們只要在專案中安裝 react-native-purchase,直接完成這個部分
就不用再修改原生程式碼了

1
npm install react-native-purchase

Build 出一個 dev-client

首先 npm install expo-dev-client
接著跟著這些步驟 configure EAS (如果你還沒做的話)
最後 eas build -p android --profile development

相關細節可參考官網

註冊 RevenueCat 帳號

其實在前面安裝的 react-native-purchase 除了是為了加上 billing 權限以外
還有一個理由是因為我們要用 RevenueCat
RevenueCat 是一個幫助你完成 IAP 的服務
除了可以統一管理各平台的內購項目外
也可以協助你分析用戶的購買資料
總之也是個蠻棒的東西 ((前提是我有弄成功XD
寫這篇文的現在還在摸索當中
如果最後沒成功就好笑了

先到官網註冊帳號吧

前言

在設計資料庫結構時,常常會用到 id 的概念
id 主要用來辨認資料
因此它的唯一性是很重要的

之前我在定義postgre資料庫的 id 欄位時,
是直接設為 PK (在 Flask_SQLAlchemy 中 PK 預設 auto increment)

這樣有個小缺點是
id 好猜,且會反映各資料間的先後關係
但 id 並不會作為排序依據
所以我認為並不適合做整數自動遞增

不過好處是 api endpoint 不會太難看XD
但應該沒什麼人會在意 endpoint 啦

UUID vs GUID

查資料的過程中我看到這兩個詞

  • UUID (Universally Unique Identifier) 通用唯一辨識碼

  • GUID (Globally Unique Identifier) 全域唯一辨識碼

UUID是在分散式計算環境(Distributed Computing Environment, DCE)下
確保 ID 不重複的一個規範
而 GUID 則是由微軟設計的 UUID 應用
編碼方式有所不同

UUID格式:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx (8-4-4-16)

GUID格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12)

總而言之

GUID 可以視為 UUID 的一個變體
是微軟基於 UUID 再加上一些自己的方法做出來的 ID

那麼…哪裡才能買的到呢?

不用買,各平台都有實作 UUID 的套件了
以我在用的 JS 來說
可以用這個 npm 的 uuid

使用方法很簡單

1
npm install uuid
1
2
3
import uuid from 'uuid'

uuid.v4() // 生成一組 uuid

最後補充一下這裡的v4是什麼意思(取自wiki)

版本1 - UUID 是根據時間和節點ID(通常是MAC位址)生成;

版本2 - UUID 是根據識別碼(通常是組或使用者ID)、時間和節點ID生成;

版本3、版本5 - 確定性UUID 通過雜湊(hashing)命名空間(namespace)識別碼和名稱生成;

版本4 - UUID 使用隨機性或偽隨機性生成。

基本上就是不同的產生方式,但我覺得大部分情況都用同一種就可以了~

前言

有件事一直搞不懂
我在看 heroku postgres 要怎麼備份時
看到有些範例會寫 –app 來指定 app 名稱
如: heroku pg:backups:capture --app sushi

看起來好像是必要的參數
但有時範例又沒有加


尋找答案

先看help

help flag 永遠是第一步
所以我輸入 heroku pg:backups --help 求解,得到

1
2
3
OPTIONS
-a, --app=app (required) app to run command against
-r, --remote=remote git remote of app to use

哦! 他說 required
但實際運行 heroku pg:backups 的時候
卻又沒問題

試試跟 app 有關的指令

於是接下來,我運行 heroku apps 得到

1
2
3
=== *******@yahoo.com.tw Apps
pi-first-api
taiwan-astronomy-network-api

沒錯
目前我的帳號有這兩個app
pi-first-api是我第一次使用heroku時的練習app
taiwan-astronomy-network-api這是我正在用的app
我輸入指令沒指定app
heroku卻知道我要使用哪個app
這可能代表我之前有做過什麼設定
讓heroku在「目前的資料夾當中」自動連結到正確的app上

是否只有此路徑能自動指定app?

為了證實剛剛的假設
我移動到上層資料夾(不在專案內)
執行 heroku pg:backups
居然跳出錯誤訊息!

1
2
3
»   Error: Missing required flag:
» -a, --app APP app to run command against
» See more help with --help

所以現在確定了
只有在我的專案資料夾才能夠省略 –app

這時我突然想到
在當初第一次使用 heroku 的時候
有做了一些前置作業
其中包含了指定 remote
很有可能就是這個原因

1
2
3
4
5
> git remote -v
heroku https://git.heroku.com/taiwan-astronomy-network-api.git (fetch)
heroku https://git.heroku.com/taiwan-astronomy-network-api.git (push)
origin https://github.com/roto93/TAN-API.git (fetch)
origin https://github.com/roto93/TAN-API.git (push)

後來我也試著把 remote 去掉再試一次,這樣就不行了
看來可以確定主因了

結論

若專案資料夾有設定 heroku 的 remote
那在輸入 heroku 指令時就不需要加上 –app 的 flag

參考