程式庫
鎖定付費功能
用 Paywall.gate 販售整個應用程式,或用 Paywall.start 販售部分功能,並為每個功能加一個檢查。本頁列出程式庫中的所有公開呼叫和常數,以及試用如何運作。
整個應用程式或部分功能
Paywall.gate(views) | Paywall.start(views) | |
|---|---|---|
| 用途 | 整個應用程式付費 | 販售部分功能的應用程式 |
| 啟動時,已鎖定 | 以購買畫面取代你的應用程式 | 照常顯示你的應用程式 |
| 試用期間 | 照常顯示你的應用程式 | 照常顯示你的應用程式 |
| 試用結束時 | 每次啟動時顯示購買畫面,標題為「試用結束」 | 顯示一次購買畫面,標題為「試用結束」 |
| 購買畫面上的 BACK | 離開應用程式 | 進入你的應用程式 |
| 付款一次 | BACK 或 START 開啟你的畫面 | BACK 或 START 進入你的應用程式 |
| 每個付費功能 | 無需加入任何內容 | 先檢查 Paywall.unlocked() |
兩者都接受與 getInitialView() 回傳相同的陣列:一個 view,或一個 view 及其 delegate。
鎖定功能
使用 start 時,在每個付費功能的入口處檢查:按鈕、選單項目、頁面。
source/MainDelegate.mc
function onHistory() as Void {
if (Paywall.unlocked()) {
showHistory();
} else {
Paywall.open();
}
}- 一次解鎖,全部開啟。一次購買即可開啟應用程式中的所有付費功能。每個應用程式只有一個價格。
- 在概覽中,只能呼叫
active()、unlocked()和trialLeft()。購買畫面僅限應用程式使用。 - 只應向買家顯示、試用期間不顯示的感謝小細節,請先檢查
Paywall.active()。
參考
除非表格另有說明,這裡的所有內容都位於 module Paywall(Pay.mc 和你使用的 PayScope.mc)。
你呼叫的方法
| 呼叫 | 回傳 | 作用 | 適用於 |
|---|---|---|---|
Paywall.gate(views) | 要回傳的畫面 | 在 getInitialView() 中,用於整個應用程式付費的情況。開始試用、在需要時詢問伺服器,並在鎖定期間回傳購買畫面取代你的應用程式。付款後,BACK 或 START 開啟你的畫面。 | 應用程式 |
Paywall.start(views) | 要回傳的畫面 | 在 getInitialView() 中,用於販售部分功能的應用程式。開始試用、在需要時詢問伺服器,並回傳你的畫面。試用結束時顯示一次購買畫面。 | 應用程式 |
Paywall.unlocked() | Boolean | 已付款,或在試用期間(試用開始前視為完整試用)。每個付費功能都用它檢查。 | 應用程式、概覽 |
Paywall.active() | Boolean | 已付款,且伺服器在最近 30 天內確認過。試用期間為 false。超前現在 5 分鐘以上的「已付款」標記(時鐘被調回)不算數。 | 應用程式、概覽 |
Paywall.trialLeft() | Number | 剩餘的完整試用天數,無條件進位。絕不超過 TRIAL_DAYS。試用開始前為完整的 TRIAL_DAYS;試用結束或沒有試用時為 0。 | 應用程式、概覽 |
Paywall.open() | PaywallView | 推入購買畫面,或回傳已在顯示的那一個。用於付費功能的 else,以及設定中的「Premium」項目。 | 應用程式 |
Paywall.keys() | Array | 你的「刪除資料」必須保留的儲存鍵:"pp"、"ts" 和 "te"。 | 應用程式 |
Paywall.startTrial() | Void | 舊的呼叫。第一次啟動時開始計時試用;沒有 TRIAL_DAYS 則不做任何事。gate 和 start 會呼叫它。 | 應用程式 |
Paywall.launch() | Void | 舊的呼叫。時間到時詢問伺服器;若手錶時鐘被調回則立即詢問。gate 和 start 會呼叫它。 | 應用程式 |
Paywall.showOver() | Void | 舊的呼叫,從第一個畫面的 onShow() 呼叫。之後,在手錶以外完成的購買會自動顯示解鎖畫面;有試用時,會在試用結束時開啟一次購買畫面。gate 和 start 會替你完成這些。 | 應用程式 |
由程式庫自行呼叫
這些由程式庫自行呼叫。請勿從你的程式碼呼叫。
| 函式 | 作用 |
|---|---|
check() | 一次只向伺服器送出一個詢問,絕不同時送出兩個。一分鐘內沒有回應的詢問就不再計入。 |
onAnswer(code, data) | 處理伺服器的回覆。只保留完整的回應,也就是有版本和下次檢查時間的回應。失敗時,設定「離線」或「稍後再試」,以及下次嘗試前的等待時間。 |
take(d) | 儲存回應、試用結束時間和「已付款」。購買完成時顯示解鎖畫面。 |
first(views) | gate 和 start 的共用部分。 |
close() | 離開購買畫面:付款後進入你的畫面(或在 start 的試用結束畫面之後),離開鎖定中的 gate 應用程式,或返回呼叫 open() 的位置。 |
cheer() | 手錶的成功提示音和震動(若手錶已開啟)。 |
常數
| 常數 | 值 | 它是什麼 |
|---|---|---|
K_ANS | "pa" | 儲存鍵:伺服器的最後一次回應。 |
K_PAID | "pp" | 儲存鍵:伺服器上次回覆「已付款」的時間,以秒為單位。無值:未付款。 |
K_TRIAL | "ts" | 儲存鍵:試用結束時間。第一次啟動時設定,之後由伺服器設定。 |
K_OVER | "te" | 儲存鍵:「試用結束」畫面已顯示。 |
STALE | 2592000 | 30 天的秒數:在沒有伺服器新回應時,「已付款」有效的時間。 |
DAY | 86400 | 一天的秒數。 |
模組變數
購買畫面本身的狀態。需要時可以讀取,但絕不要設定。
| 變數 | 內容 |
|---|---|
listener | 開啟中的購買畫面,或 null。 |
status | 問題說明行(「離線」或「稍後再試」),或 null。 |
busy, sentAt | 有一個詢問已送出,以及送出的時間。 |
hold, held | 購買畫面顯示時,伺服器可保留詢問的時間(起初 15 秒,若手機提前中斷則減半)。 |
changedAt, limit | 畫面上次變更的時間,以及在沒有變更的情況下可保持開啟的秒數。 |
fails, nextAt | 連續失敗的詢問次數,以及下一次可送出的時間。 |
shown | 你的應用程式第一個畫面已顯示:購買可能會自動顯示解鎖畫面。 |
quick | 購買畫面已開啟:它的第一次詢問會立即得到回應。 |
app, whole | 購買畫面代替期間你的畫面,以及是否使用過 gate。 |
類別
| 類別 | 它是什麼 |
|---|---|
PaywallView | 購買畫面。它繪製伺服器提供的畫面並播放解鎖動畫。 |
PaywallDelegate | 購買畫面的按鈕:START 和 BACK。 |
PayReply | 網路請求的回呼物件。 |
PayBg | 僅限錶面和資料欄位:向伺服器詢問的背景服務。 |
PaywallConfig
| 常數 | 它是什麼 |
|---|---|
URL | 必填。你的應用程式網址,可在控制台取得。 |
TRIAL_DAYS | 應用程式:選填,不提供試用就省略。錶面和資料欄位:必填,不提供試用則為 0。 |
錶面與資料欄位
錶面和資料欄位使用 lib/watch/face,其 module Paywall 有自己的呼叫。active()、unlocked() 和 trialLeft() 的運作方式同上。
| 呼叫 | 作用 |
|---|---|
Paywall.startTrial() | 每次啟動時,從 getInitialView() 呼叫:第一次時開始試用,並讓已完成的登入頁面喚醒背景程式。 |
Paywall.schedule(false) | 每次啟動時,從 getInitialView() 呼叫:排定下一次背景檢查。 |
Paywall.take(d) | 從 onBackgroundData(d) 呼叫:儲存背景程式的回應並排定下一次檢查。 |
Paywall.soon() | 從 onSettingsChanged() 呼叫:在 Garmin 允許的最早時間檢查,並在鎖定時再次傳送登入通知。 |
Paywall.drawQr(dc, x, y, side) | 在白色方塊上繪製寬 side 的 QR 碼,中心位於 x, y。第一次回應前不繪製。 |
Paywall.book(n) | 由程式庫呼叫:排定背景檢查,距上一次至少 5 分鐘。 |
K_SIGN | "pg":登入通知的儲存鍵(1 為待傳送,2 為已傳送)。 |
完整設定請參閱錶面與資料欄位。
試用
- 在
PaywallConfig中設定TRIAL_DAYS,與控制台中的免費試用一致。不提供試用就省略:這樣永遠不會顯示「試用結束」。 - 試用從第一次啟動開始。結束前
Paywall.unlocked()都為 true。 - 重新安裝不會重新開始試用。我們的伺服器從第一次看到該手錶時開始計算試用期,並在第一次回應時以伺服器的計數取代手錶的計數。
- 把時鐘調回也無法延長。伺服器傳送的是剩餘時間而非日期,且手錶計算的天數絕不超過
TRIAL_DAYS。 - 購買畫面的標題依序顯示「剩 7 天」、「最後一天」、「試用結束」。
由應用程式計算的試用期
若要依使用次數而非天數計算試用,請省略 TRIAL_DAYS,在儲存空間中保留自己的計數器(「刪除資料」後也要保留),並檢查 active():
source/MainDelegate.mc
// 20 free sessions, then Premium
if (Paywall.active() || sessionsUsed < 20) {
startSession();
} else {
Paywall.open();
}程式庫儲存的內容
- 應用程式:
"pa"(回應)、"pp"(上次確認「已付款」的時間)、"ts"(試用結束時間)和"te"(已顯示「試用結束」)。 - 錶面和資料欄位:
"pa"、"pp"、"ts"和"pg",以及用於設定連結的unlock屬性。 - 你自己的鍵請使用其他名稱。