濾鏡預設用了別人的相機型號名稱,上架前得先拆掉品牌字樣
App 裡一個底片濾鏡功能,用相機廠商的真實機型名稱當作使用者看得到的濾鏡名稱,這篇記錄怎麼判斷這樣算不算商標風險、以及改名時要處理哪些技術細節才不會讓舊資料悄悄失效。讀者需要具備基本的 App 上架與命名文案敏感度,不需要法律背景,商標判斷邏輯本文會直接說明。讀完可以照抄一套風險分級方式,並知道改名要動哪些檔案——i18n key、資料庫 migration、測試——才不留破綻。
這是 追追推推 追星族遠征紀錄 App 複盤 的延伸閱讀。
稽核工具查不到品牌字樣,得靠使用者提問揪出來
App 裡「超級拍立得」功能的 19 個底片濾鏡 preset,顯示名稱直接寫著相機廠商的機型代號。這件事是靠一位使用者的提問才發現的,他問這樣的名稱會不會有法律風險。靜態分析、lint、型別檢查都不會告訴你某個字串是不是別人的註冊商標。
盤點下來,19 個 preset 裡有 13 個有風險,需要分級處理。
弱勢名稱排在一起,會產生官方系列的整體印象
| 等級 | 項目 | 判斷理由 |
|---|---|---|
| 高 | INSTAX-100 / 250 / 500 / 800 / 50 | INSTAX 是相機廠商的註冊商標,用的是品牌全大寫標準寫法,五個數字都對得上真實機型 |
| 中高 | mini 99 / 45 / 12 / 40 / 50 / 90 | 單看「mini 12」很弱,但與上面五條並排在同一個濾鏡列裡,整體讀作同一個品牌系列 |
| 中 | SX70暖霧、600復古 | 另一家廠商的機型商標,商標權現由專門的 IP 控股公司持有 |
| 安全 | 關、寫實、陳年、露出過度1-3 | 純描述性詞彙 |
單看 mini 12 這個名字辨識度很低,幾乎不會讓人聯想到特定品牌。但它跟 INSTAX-100、250、500、800、50 排在同一個濾鏡列表裡,使用者掃過去的整體印象會讀作「這是同一個廠牌的系列產品」。這裡把它稱為並排效應:風險要整組一起看,逐條分開算會低估真正的風險。
色彩曲線不是問題,品牌名稱才是
底片模擬用的色彩曲線、gain、offset 這些是功能性參數,著作權多半不保護,把某台相機的色調擬合出來,本身不構成侵權。
真正的問題出在把別人的品牌名稱直接拿來當自己商品的功能名稱。逐條套用「指示性合理使用」的三個要件——美國 New Kids 標準、台灣商標法第 36 條——這個案例在兩個要件上站不住:五個同品牌機型名排成一列,而且出現在付費功能裡,一般使用者合理會認為這是官方授權的底片模擬。
實務上這類爭議型態通常是收到律師信要求下架或改名,真正演變成訴訟的情況少見。但那時 App 已上線,使用者資料裡已經存了這些字串,處理成本會比現在高一個量級。
風險會沿著素材來源鏈往下繼承
這批參數的來源是以某修圖 App 的實拍樣本逐張定量擬合出來的。連名字一起沿用,等於把中間那一層對相機廠商的商標使用問題原封不動繼承下來。
flowchart LR 相機廠商 --> 修圖App 修圖App --> 本專案
平台審核也管這件事。App Store 審核指南第 5.2.5 條對第三方商標的使用相當敏感,濾鏡名稱直接用別人機型代號很容易被卡關。
改名併進既有的多語系工項,不開新任務
改名要做的事——把顯示字串抽成 i18n key、寫 migration 回填舊值——跟當時正在進行的多語系工項完全相同,差別只在新的 i18n 值從翻譯變成重新命名。直接併進既有工項執行,省掉重新拉一條任務線的成本。
新名稱改用語意詞,流水號被否決
新名稱改用語意詞:haze(薄霧)、clear(清透)、azure(靛藍)、indigo(深藍)、faded(褪色)等等。
soft-1 到 soft-5 這種流水號被否決,理由是 id 是永久值,會寫進資料庫。流水號一旦有人中途插隊或刪除某個選項,編號跟實際外觀就會脫節,往後每次調整都要重新確認整組順序。
顯示名稱欄位直接砍掉,比留著加註解可靠
這次改名有三項判斷值得記下:
FilmPreset.name這個欄位整個移除,不只是清空值。留著這個欄位,遲早會有人在某次改動裡把顯示名稱放回去,把犯錯的機會從資料結構上拿掉,比在程式碼裡寫註解提醒可靠。- 工廠函式從
meitu()改名為fitted(),廠牌名連函式名稱都不留。 - 新增 15 個測試,對 id、i18n key、migration 三邊逐項比對,並在測試裡直接釘住「新 id 不得再含廠牌字樣」,避免以後有人手滑加回去。
技術細節:其餘工項
完整執行清單共七項,除了主線提到的欄位移除、函式改名、三邊比對測試,其餘幾項屬於例行的多語系工程步驟,這裡不重複展開。
找不到對應濾鏡時,容錯設計會變成沒人發現的靜默退化
三邊比對測試背後的理由,是這次執行裡最重要的工程判斷:查不到 preset 時的容錯設計是回到中性、不報錯、不留痕,也就是靜默退化。
如果 migration 漏了一個 id,使用者原本套用某個濾鏡拍的舊卡片,濾鏡效果會默默消失,畫面上不會跳出任何錯誤訊息。這種缺陷不會出現在 crash 報告裡,只能靠測試在 CI 上把 id、i18n key、migration 三邊釘死,缺一個就讓建置失敗。
舊卡片的濾鏡是否還套得出來,尚未實機驗證
改名之後,實機確認既有卡片的濾鏡仍然套得出來,這一項在記錄當下還沒完成,尚未驗證。
拍立得三個字和相紙外框,風險存在但先不動
兩件相鄰但刻意沒有處理的事:
- 「拍立得」這三個字是某廠商早年在台灣的譯名,今日已經泛用化,風險偏低。但如果要放進商店名稱或行銷文案,需要先查一次註冊狀態再定。
- 經典白色相紙外框,在美國、歐洲有註冊的立體商標(trade dress)。這個專案走的是另一家廠商的幾何規格,結論是現階段不動它——動了等於要重做整個 App 的相紙幾何,處理成本跟現在的風險等級不成比例。
風險存在不等於現在就要處理,處理成本要跟風險大小一起衡量,才知道該不該動手。
這套判斷方式可以搬到別的專案
- 品牌名稱出現在 UI 顯示字串裡,靜態工具抓不到,得靠人問。
- 並排效應:一組本身很弱的名稱放在一起,會產生官方授權的整體印象,要整組評估,不能逐條算。
- 色彩曲線、演算法這類功能性參數,著作權多半不保護;品牌名稱才是商標問題,兩件事分開判斷。
- 素材或參數如果來自第三方,商標使用的問題會沿著來源鏈一路繼承下來。
- 顯示名稱一旦寫進資料庫就是永久值,改名要配 migration 回填舊資料。
- 改名時把可能被放回舊值的欄位整個刪掉,比留著欄位加註解可靠。
- 查不到就回預設值的容錯設計,在資料遷移情境下會變成靜默退化,得靠測試做三邊比對釘住。
- 實務上的風險型態通常是收到律師信要求改名,真正走到訴訟的情況少見;但上線後才處理,成本會高一個量級。
相關連結
- 追追推推 追星族遠征紀錄 App 複盤
- App Store 五次退件實錄:條款判讀與回覆紀律 —— 同一個 App 上架時的另一組合規戰場