Daily Digest

每日新聞摘要

2026年07月29日

今日總結

內容會跟隨語言切換。

📝 今日焦點 - Muffle 以 GeofencingClient 取代持續 GPS 輪詢,兼顧省電、隱私與背景觸發穩定性; - Valhalla 導航距離需統一以折線軸計算,避免轉向提示過早誤觸; 🏗 架構設計 - Content Provider 仍是跨 App 安全共享資料的核心元件,適合受控交換; - Kotlin 介面委派與 Pair、Triple 的使用都提醒團隊:API 選型要避免隱性陷阱; ✅ 測試與品質 - OAuth2 搭配 JWT 可在 Spring Boot 中落實分層授權,並用 claims、scope 與 @PreAuthorize 強化控管; 🚀 語言演進 - 升級 Android Gradle Plugin 後,coroutines 可能在不改碼下獲得明顯加速,顯示工具鏈優化的價值;

01

Engineering Geofencing for Android: Balancing Precision and Battery Life

Dev.to Kotlin 作者:Haseeb 發布:07-29 11:08

為 Android 設計地理圍欄:在精準度與電池續航間取得平衡

我想要一個本地運作、尊重資料、也不必為了基本音效設定而多帶行動電源的方案。

重點摘要

改用 GeofencingClient,避免持續 GPS 輪詢耗電。
透過 radius、initialTrigger 與 loiteringDelay 調校,減少誤觸與抖動。
考量 Doze 模式延遲,並結合 AudioManager 與 NotificationManager 做完整靜音控制。

本文分享作者為 Muffle 開發 Android 自動化功能的經驗:依位置切換鈴聲設定,同時兼顧電池續航與隱私。作者放棄持續 GPS 輪詢,改採 Google Play Services 的 GeofencingClient,利用系統整合 Wi‑Fi、藍牙與行動網路訊號來降低耗電。文章也說明了背景執行、JobIntentService、PendingIntent 管理,以及如何調整地理圍欄半徑與延遲參數,避免觸發抖動。作者指出 Doze 模式可能讓事件延遲數分鐘,因此選擇接受限制並設計緩衝通知。最後強調,僅設定靜音不等於勿擾,實作上需要以優先級管理器整合多種觸發條件。

02

Why your Valhalla turn-by-turn distances are wrong: a distance-axis mismatch

Dev.to Kotlin 作者:Minotaur 發布:07-29 13:18

為什麼你的 Valhalla 逐步導航距離會算錯:距離軸不一致

根本原因是一種很容易引入、看起來合理卻會產生錯誤結果的單位/座標軸不匹配。

重點摘要

Valhalla 的道路里程與路徑折線距離,量測基準其實不同。
若機車 GPS 鏈接點與轉向里程分別落在不同距離軸上,提示就會出錯。
解法是把所有距離計算統一到 haversine 折線軸上。

作者分享他在離線機車導航 App 中排查 Valhalla 逐步導航距離錯誤的經驗:指令本身正確,但「200 公尺轉彎」常在實際還有更遠距離時就提前觸發。問題源自兩套不同的距離尺:Valhalla 回傳的每段 maneuver 公路長度,以及沿著解碼後路徑折線計算出的 haversine 距離。由於即時 map-matching 是把 GPS 點吸附到折線上,因此所有轉向與剩餘距離也必須以同一條折線軸計算。文章建議先累積整條 geometry 的 haversine 距離,再用 begin_shape_index 對應各個 maneuver,並注意 per-leg 索引偏移與 Valhalla precision 6 解碼。

03

Kotlin Interface Delegation: A Hidden Pitfall | Epimorphics TechTalk

Medium Kotlin 作者:Epimorphics 發布:07-29 11:17

Kotlin 介面委派:一個隱藏的陷阱

聚焦 Kotlin 介面委派在實務程式中可能出現的一個微妙問題。

重點摘要

指出 Kotlin 介面委派的隱藏陷阱。
內容源自建置與維護生產級資料服務的實務經驗。
強調對穩健軟體設計的技術提醒。

這篇文章從 Epimorphics 工程團隊的實務經驗出發,指出 Kotlin 介面委派可能存在一個不易察覺的陷阱。由於目前提供的內文僅有摘要,無法得知完整技術細節,但標題已清楚表明本文意在提醒開發者:在 Kotlin 使用 delegation 時,可能會遇到不直觀的行為或設計風險。文章屬於 Epimorphics TechTalk,主軸聚焦於生產環境中穩健資料服務的工程實作。

04

What’s the Right Way to Return Two Values in Kotlin? (Hint: It’s Not What You Think)

Medium Kotlin 作者:Naveen Udesh 發布:07-29 11:22

在 Kotlin 中回傳兩個值的正確方式是什麼?

如果你剛接觸 Kotlin,第一次在別人的程式碼裡看到 Pair 或 Triple,八成會有同樣的反應。

重點摘要

引出 Kotlin 如何回傳多個值的常見問題。
提到初學者最先接觸到的 Pair 與 Triple。
文章重點在於探討回傳兩個值的正確做法。

本文從一個常見的 Kotlin 問題切入:函式要如何回傳兩個值?作者指出,初學者第一次在他人的程式碼中看到 Pair 或 Triple 時,往往會感到困惑。雖然目前提供的內容只有開頭,但可以看出文章是在鋪陳一個討論:Pair、Triple 這類型別是否真的是最佳解,以及是否存在更符合 Kotlin 風格的做法。

05

Content Provider in Android — Sharing Data Safely Across App Boundaries

Medium Kotlin 作者:Adrián Leyva 發布:07-29 15:01

Android 中的 Content Provider:在應用程式邊界間安全分享資料

理解 Android 最常被誤解的元件

重點摘要

說明 Android Content Provider 的用途。
聚焦於應用程式之間的安全資料分享。
介紹這個常被誤解的 Android 元件。

本文介紹 Android 的 Content Provider,將其定位為在不同應用程式邊界之間安全分享資料的重要機制。就目前可見內容來看,作者主要想釐清這個常被誤解的 Android 元件,並說明它在平台上如何支援 app 與 app 之間受控、結構化的資料存取。整體看起來偏向概念導讀,而非深入實作教學,重點在於幫助讀者理解 Content Provider 的用途與其在資料交換中的價值。

06

Secure Your APIs: OAuth2 and JWT for Beginners

Kotlin Blog 作者:Alina Dolgikh 發布:07-29 11:28

初學者的 API 安全指南:OAuth2 與 JWT

OAuth2 與 JWT 不是彼此競爭,而是互補的組件:前者負責委派授權,後者則是攜帶安全資訊的精簡可驗證權杖格式。

重點摘要

OAuth2 負責委派存取,JWT 用於傳遞可驗證的簽章資訊。
以 Spring Boot 資源伺服器驗證 Bearer Token 與權限範圍。
透過自訂 claims、@PreAuthorize 與 issuer/audience 驗證強化安全性。

本文說明如何在 Kotlin 與 Spring Boot API 中結合 OAuth2 和 JWT 來提升安全性。OAuth2 用於委派授權,JWT 則以精簡且可驗證的格式攜帶身分、角色與權限等 claims。文章逐步示範如何建立 resource server、以公鑰驗證 Bearer Token、限制特定 scope 的存取,並將自訂 claims 映射成 Spring Security authorities。接著介紹 @PreAuthorize 的方法層級控管,以及透過自訂 JwtDecoder 強制驗證 issuer 與 audience,形成更完整的分層防護,同時避免後端直接處理密碼與 session。

07

R8 Just Made Kotlin Coroutines on Android 2x Faster and You Didn’t Have to Touch a Single Line

Medium Kotlin 作者:Muhamad Syafii 發布:07-29 04:24

R8 讓 Android 上的 Kotlin Coroutines 直接快了 2 倍,而且你完全不用改任何程式碼

Picture this: you bump your Android Gradle Plugin version, rebuild, run the app exactly as before — no code changes — and suddenly every…

重點摘要

升級 Android Gradle Plugin 可能自動帶來 coroutine 效能提升。
整個加速過程不需要修改任何應用程式碼。
重建並執行後,App 出現了意料之外的效能改善。

本文指出,當開發者升級 Android Gradle Plugin 並重新建置應用後,Kotlin coroutines 在 Android 上可能出現驚人的效能提升,而且完全不需要修改任何程式碼。這代表 R8 與新版建置流程可能已自動優化 coroutine 行為,讓應用在相同邏輯下跑得更快。對開發者而言,這是一個只靠更新工具鏈就可能獲得顯著加速的案例。