文件

程式庫

鎖定付費功能

用 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"儲存鍵:「試用結束」畫面已顯示。
STALE259200030 天的秒數:在沒有伺服器新回應時,「已付款」有效的時間。
DAY86400一天的秒數。

模組變數

購買畫面本身的狀態。需要時可以讀取,但絕不要設定。

變數內容
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 屬性。
  • 你自己的鍵請使用其他名稱。
Esc