本頁適用於經 Google Play 分發的 Android 版本,這也是本應用目前唯一的版本。
留在本機的部分
關於這盤棋的一切都在你手上的這台裝置裡算出來、畫出來:哪些著法合法、引擎的搜尋、勝率曲線、每一手的評級,以及逐手指點的文字說明。引擎是本專案用 C++ 自己寫的,跑在應用內部,不查任何棋力伺服器;逐手講解由隨包交付的規則與模板拼裝而成,不接大語言模型,也不呼叫任何雲端介面。
你的對局存在應用自己的私人目錄裡:每一盤的棋譜、最近 50 盤、你的設定項,以及某一方是否已經解鎖過深度復盤這個標記。沒有帳號可註冊,沒有資料要填寫,我們或任何第三方名下都沒有一份副本。
老實說就是這一句話:盤面、著法清單、存檔、匯出的 .xq 檔案、分享碼,都不會出現在任何一條網路請求裡。下一節列的五個事件只統計你做了什麼的大致輪廓——怎麼開的一局、怎麼結束的一局、下了多長,其中沒有任何欄位可以回溯到你走過的一手棋。
什麼時候才會連線
這個版本連線的理由只有兩個,而且都不是我們自己的伺服器:解鎖深度復盤的那條獎勵影片,由 Google Mobile Ads(AdMob)下發;當機報告與使用統計,由 Google Firebase(Analytics 與 Crashlytics)負責。其餘部分——規則、搜尋、復盤、棋譜歸檔、匯入匯出——從結構上就是離線的。
時機要說準,因為這是你可以自己抓包核對的。Firebase 從啟動就開始:應用一打開就記下一次工作階段,等有網路連線時把這批資料送出。廣告元件正好相反:在你點「看影片解鎖」之前它不會被要求做任何事,所以在飛機上開局並不會驚動廣告網路。當機當場寫進裝置本機的佇列,等下一次連線補傳,而不是在出錯的那一刻送出去。
玩這個遊戲完全不需要網路。唯一需要的是深度復盤,因為付給它代價的是一條影片:離線時那個入口會變灰,並當場說明原因。其餘一切照常可用,復盤的免費部分也在其中。
那條獎勵影片
- 它解開的是什麼。每一份復盤都從免費部分開始,而且永遠在這一側:完整著法清單、每一手的評級、雙方準確率、整局的勝率曲線。一條獎勵影片後面是逐手指點,以及引擎認為本手應該走的更優著法。看完這一條影片,該局就此解鎖;解鎖記錄寫在你自己的裝置上,同一局再開啟時不會二次索取。提前關閉則這次獎勵不結算。若這一刻拉不到廣告——沒有可播的廣告、載入超過十五秒、裝置根本沒有通往網路的路——應用當場說明,什麼都不解鎖,你可以稍後再試。
- 廣告後面有什麼。除此之外沒有什麼。三檔強度、兩種執子、雙人同機輪流、整個棋譜歸檔、回放、.xq 匯出與匯入、分享碼、復盤報告匯出與全部設定,都在下載包裡就交付。從不看影片的玩家,那 50 盤存檔照常有評級和曲線可看。
- 誰來投放。影片由第三方廣告網路 Google Mobile Ads 選取、下發並計量。本應用不託管素材、不決定你看到哪一條,也不把這一位置出租或轉賣給任何人。
- 這一網路可能處理什麼。依 Google 自己的政策(https://policies.google.com/privacy),其 SDK 可能使用裝置的廣告識別碼,連同裝置與工作階段資訊來挑選、投放和衡量廣告。本應用放進這條請求的只有兩樣:廣告單元識別碼與應用版本號。沒有姓名、電子郵件、帳號、通訊錄、位置,也沒有盤面和著法清單。
- 你能自己處理的部分。Android 的系統廣告設定裡可以重設或刪除廣告識別碼,Google 的廣告中心(https://myadcenter.google.com)是關閉個人化廣告的入口。這兩個選擇都關不掉這裡的任何內容:影片在每一局都是可選項,不看也不會失去下載包本來就給你的東西。
當機報告與使用統計
這個包裡帶了兩個 Google 元件:Firebase Analytics 統計這盤棋是怎麼被玩的,Firebase Crashlytics(含負責原生層的 NDK 元件)記錄當機——這裡之所以重要,是因為規則與搜尋跑在 C++ 核心裡,而不是介面層。
- 本應用放進去的是什麼。五個事件,裡面每個欄位都是關於這盤棋的數字或固定的短標籤。game_started 帶模式(人機對弈,或雙人同機輪流)與強度(休閒、業餘、高手)。game_completed 再加上誰贏、為什麼結束——將死、無合法著法的困斃、長將判負、三次重複局面判和、六十回合不吃子判和、認輸、協議和棋——以及本局手數。reward_requested 記下一次嘗試,reward_result 記它的結果(已結算、提前關閉、無廣告可播、離線、逾時、載入失敗、顯示失敗),deep_review_unlocked 記解鎖那一局的手數。這兩個廣告事件之所以存在,是因為這道門需要度量:不埋它們,我們分不清「沒人想要深度復盤」和「廣告一次都沒返回」。
- 當機報告裡有什麼。某一幀或某個函式出錯時,收集它的錯誤資訊與呼叫堆疊,包括原生程式碼那段。正式版不做程式碼混淆,所以那份呼叫堆疊會指出失敗的是哪個函式;它指不出你是誰。
- 這些報告裡沒有的。沒有盤面、沒有著法清單、沒有存檔、沒有分享碼、沒有匯出檔案,也沒有姓名、電子郵件、電話號碼、通訊錄和照片。應用不會把你棋上的任何一子放進報告。
- Google 自己加上的部分。這些 SDK 會給每條訊息附上它們自己的上下文:這個安裝在這台裝置上的匿名識別碼、工作階段識別碼、應用版本、機型與廠商、作業系統版本、螢幕尺寸、處理器架構、記憶體與剩餘儲存、顯示語言、時區、電信業者的國家/地區碼、時間序,以及請求的 IP 位址——Google 會據此推出城市或地區一級的大致位置。本應用不申請定位權限,也不上報任何座標。因為廣告執行期元件會帶進廣告識別碼權限,Google 可能依其政策使用那個識別碼;本應用不讀取、也不轉存它。
- 資料去哪裡,你能做什麼。全部落在 Google 的 Firebase 服務裡,不落在我們營運的伺服器上。開發者只在 Firebase 主控台看彙總統計,不儲存副本,不把這份資料關聯任何廣告投放帳號、不轉賣、也不用於跨應用歸因;保留期依 Google 的規則,見 https://policies.google.com/privacy 與 https://firebase.google.com/terms。這兩項在應用內沒有開關。你能做的是在系統的廣告設定裡重設或刪除廣告識別碼——這不會讓遊戲少一分內容——或者讓裝置保持離線,報告就留在本機佇列裡送不出去。解除安裝之後,你寫信到本節末尾的信箱,我們可以按那個匿名安裝識別碼刪除對應記錄。另有一個開發用的偵錯包,套件名稱以 .debug 結尾,在 Firebase 裡註冊為獨立的應用,測試流量不會混進正式統計。
權限與檔案存取
由應用自己宣告的權限只有兩條:INTERNET,用途就是上面那條獎勵影片與兩個 Firebase 元件;ACCESS_NETWORK_STATE,只為在你點「看影片解鎖」之前先判斷這台裝置此刻能不能拉到廣告——拉不到就先把入口變灰,而不是讓你對著一個轉圈的進度等待。
你在安裝包裡看到的其餘權限(廣告識別碼權限、廣告服務相關權限、隨統計元件進來的安裝來源權限等)都由 Google 的自有函式庫合併進來,屬於那些 SDK 自己的能力,不是這個遊戲動手做了什麼。它們任何一項都不掌握內容:無論其狀態如何,每一條規則、每一檔強度、每一盤存檔和每一次匯出都照常可用。
應用在任何時候都不向你申請執行期權限。系統危險權限清單上的一樣都不申請:不申請位置、相機、麥克風、通訊錄、通話紀錄、簡訊、日曆,也不申請寬泛的儲存讀取。匯出對局或報告、匯入 .xq 檔案時,開啟的是系統自己的檔案選取器,由你每一次指定目的地或檔案;應用對你裝置上的其餘檔案沒有常駐讀取能力。
備份與換到新手機
這條要說準,因為它最容易寫錯:本應用允許 Android 系統自己的備份。也就是說,應用私人目錄裡的存檔與設定可能被 Google 的備份服務取走,在你設定新裝置或重新安裝應用時恢復回來。這條傳輸通道與其保留期由 Google 決定,不由我們決定——我們既不營運它,也讀不到裡面的內容。如果你不希望自己的棋譜跟著搬走,請在裝置的 Google 備份設定裡為本應用關閉備份。在遊戲內刪除一盤存檔會移除裝置上的那一份;系統備份裡是否還留著一份、直到下一次恢復才被帶回來,由系統的備份策略決定。
應用不做什麼
沒有帳號、沒有雲端存檔、沒有排行榜、沒有聊天、沒有推播通知,本應用自身也不做任何跨應用、跨站點的追蹤。除那一條廣告位和兩份 Google 報告之外,應用不發起任何第三方網路呼叫。我們沒有自建統計,沒有自建伺服器,我們的程式碼不讀取、也不寫入任何廣告識別碼、指紋或位置識別碼。
保留與刪除
應用知道的關於你怎麼玩的一切——棋譜、評級、解鎖標記、設定——都存在你裝置上的應用目錄裡。在遊戲內刪除一盤即移除那條記錄;解除安裝清掉全部,但受上一節所述系統備份的影響。我們這一側沒有一份關於你的記錄可供查詢、匯出、合併或交付,因為根本沒有一個能存放它的服務。使用事件與當機報告在送出的那一刻離開你的裝置,之後由 Google 依其保留規則持有;開發者不留副本,而且其中沒有任何欄位能指認到你,所以無從把我們手上的記錄歸到你的名下。
兒童
本應用不面向兒童,不為兒童設計或投放,在向 Google 提交時也不申報為兒童定向或十歲以下目標受眾的應用。我們自身不收集任何能指認到特定個人的資料:沒有帳號、沒有暱稱、不匯入通訊錄、沒有站內訊息。Google 的廣告與統計元件依其自身政策處理裝置與工作階段資訊,口徑見上文兩節。
第三方元件
- Google Mobile Ads SDK(com.google.android.gms:play-services-ads 25.5.0,Google LLC)——只用於那一條獎勵影片。隱私揭露見 https://policies.google.com/privacy。
- Firebase Analytics、Firebase Crashlytics 與負責原生層的 Crashlytics NDK(com.google.firebase:firebase-analytics、:firebase-crashlytics、:firebase-crashlytics-ndk,版本由 Firebase BoM 35.0.2 統一,Google LLC)——使用統計與當機報告,原始碼以 Apache-2.0 發布,但執行在 Google Play 服務之上。條款見 https://firebase.google.com/terms。
- AndroidX、Jetpack Compose 與 Kotlin 執行期函式庫——平台元件,自身不收集資料。
其餘一切都為本專案自己編寫:規則核心與搜尋引擎、復盤分析、三種語言的講解模板、開局庫、棋盤與棋子的繪製,以及音效——音效由程式碼即時合成,因此包裡不帶任何音訊素材,也沒有任何第三方音效函式庫。本應用不內嵌、不連結、不衍生任何第三方象棋引擎的原始碼或二進位檔,引擎是我們自己寫的。
若後續版本引入新的第三方元件或素材,會在本節署名並註明其授權條款。
聯絡方式
營運主體:北京藍海鑫帆科技有限公司
隱私及使用者支援信箱:howoo.bluesail@gmail.com
來信可註明中國象棋(Xiangqi),並說明你希望處理的事項;也可透過 Google Play 商品頁的支援連結找到我們。我們不會為受理普通問題而要求與請求無關的個人資訊;遊戲這一側不儲存任何關於你的伺服器端紀錄,通常也不存在可供我們代你處理的資料。廣告與統計元件收集的部分由 Google 依其政策負責。