Firebase Cloud Messaging

最近工作需要做 Firebase Cloud Messaging (FCM) 整合,發現了向 Firebase API 直接送出 push 的 HTTP request 都可以生成不同種類的 message。 如果要整合到 Android 的話,需要建立一個新的 Service class 並繼承自 FirebaseMessagingService。這個 Service 有一個叫 onMessageReceived 的 callback method 來接收來自 FCM 的 push 和它的 payload。但原來不是所有的 push 都能被那個 callback 接到,要視乎 push 的種類和你的 app 當時在甚麼情況而定。 ...

February 29, 2020

Android App Icon 規格

一個 app 的第一印象應該是它的 app icon (launcher icon)。在 Android,在不同的時期前後出了好幾個 app icon 規格。但是 Android 介紹不同種類的 app icon 的文件放得非常分散,如果平時沒有一直留意的話都幾乎肯定會做錯或者做漏。以下是全部 Android app 都會用到 app icon: ...

July 20, 2019

用 Google Apps Script 發送電郵

在上一篇為大家介紹了如何用 Google Apps Script 建立 Google Calendar event。這一次就示範用 Google Apps Script 發送電郵(即是 mail merge)。 準備內容 上次我們用 2019 年香港公眾假期作例子,這次我們用得獎名單做例子。 ...

April 14, 2019

OpenRefine GREL 筆記

OpenRefine 是一個開源的工具,用作檢視資料、加工處理後作其他用途。簡單的例子有一堆街名,部分街名用了全寫、部分用了縮寫,想將它們全部統一用全寫。它的定位是介乎 Excel 和自己寫程式之間。有時資料用 Excel 不太方便處理,但如果自己寫程式處理又因為程式只會用一次,感覺太麻煩。OpenRefine 相信可以解決到你的需要。 Text facet 功能可以批量修改相近的資料,而不用寫程式 OpenRefine 內置了一種程式語言,名為 General Refine Expression Language (GREL),和 Excel 可以用公式差不多。我們用 OpenRefine 就是透過這種語言來把資料批量轉換成自己想要的東西。 值得一提的是 OpenRefine 以前由 Google 負責維護,所以介面會有以前 Google 產品的影子。 ...

February 20, 2019

用 Google Apps Script 建立 Google Calendar event

Google Apps Script 是一套以 JavaScript 造的 API,可以讓你寫程式控制 Google Apps 內 Docs、Spreadsheet、Gmail、Drive 等等的功能。這次介紹如何用 Google Apps Script 建立 Google Calendar 的 event。我們會把部分建立 event 時所需要的資料放入 spreadsheet 內(會以 2019 年香港公眾假期作例子),然後用 Google Apps Script 讀取 spreadsheet 的內容再建立 event,效果就像 mail merge 般。 ...

October 17, 2018

八達通新方向

最近,八達通終於做應該做的事了:商戶可以用八達通提供的商用版 app 經 NFC 向實體卡扣錢,小商戶就毋須租拍卡機就能接受八達通付款,亦都毋須使用 O! ePay 的 QR code 功能。 八達通當初就是一張單純的儲值卡。八達通開拓流動支付應該要數到在 Android 2.3 (Gingerbread) 支援 NFC 的時候見到有其他 Android 開發者推出查閱餘額 app 就學人推出一個查閱交易記錄 app(因為卡內的交易紀錄被加密,所以其他 app 只可以查閱餘額)。其後亦推出了八達通 SIM 卡,但現在應該終止推廣了。 ...

April 16, 2018

Linkify 自動轉換成網址

最近工作需要將不完整的網址變成網址,但輸入的 string 可以是普通的文字,亦可以是一個沒有 http:// 或 https:// 的網址,亦可以一個完整的網址。但 TLD 有太多,如果自己寫 regular expression 做檢查的話那句 regular expression 就會好長,而且要定時補上日後新推出的 TLD。 ...

March 10, 2018

Kotlin Parcelize

Kotlin Android extensions 入面有一個實驗功能:Parcelize。它是一個 annotation,只需要在 data class 加上 @Parcelize annotation 和 implement Parcelable interface 就能夠在 compile 時自動生成所需的 boilerplate。 @Parcelize data class Product(val name: String, val price: Double) : Parcelable 留意要在 build.gradle 加上: ...

February 11, 2018

React Native Android Multi-window 多視窗支援

Android 7.0 (N) 新增一次顯示多個 app 功能 (Multi-window)。即是可以兩個 app 上下或左右並排。如果想你的 React Native app 能支援這個功能的話,首先要檢查 build.gradle 的 SDK 版本(24 或以上)。 ...

December 1, 2017

Android Studio 3 的 Gradle 更新

昨日使用 Android Studio 途中彈了 Android Studio 3 的更新通知,那時因為知道升級會有 breaking change,擔心升級要大改 Gradle 設定檔。所以延後了一天才更新。今日試了將現有的 project 更新,暫時未遇到問題,應該算是完成了。 ...

October 27, 2017