分類
程式技術

有趣的iOS上Safari播放mp4問題

今天在測試一個 nginx reversed proxy 上, 代理 upstream server mp4 檔案時的播放問題.

之前沒特別有這個狀況, 但今天開始不能播放(感覺應該是在ios 12.4起發生), 十分有趣, 從 nginx server log 也看不出來原因, 只知道 nginx server 在 ios safari request 時, sent-byte 大小小於原始的 mp4 檔案, 所以也只能從 ios safari 的 developer mode 來著手.

先進行 ios safari developer mode, 可以參考:

https://unrealnavigation.com/blog/web-inspector-with-ios-simulator

然後發現原來 safari 會 request byte-range 0-1 這樣的狀況, 難怪都不會送出完整結果, 這樣一來原因就明確了, 實務上的狀況可以參考這篇:

https://www.stirtingale.com/guides/2018/10/mp4-not-working-cloudflare

若是原本的 server 沒有支援 byte-range 時, 會導致 status 200 而非 safari 預期的 206, 而導致失敗. 接下來就可以來找解決方案.

以 nginx proxy_pass 的反向代理結構來看, 可以利用這個方案:

https://stackoverflow.com/questions/22728016/nginx-is-not-accepting-range-of-bytes

使用 proxy_force_ranges on; 即可.

當然, 原本的 upstream 也需要有支援才能解決.

如此一來, 便能在 ios safari 於 request mp4 資源時, 下達的 byte-range 於快取或未快取內容皆可正常工作.

PS. 於查找過程找到一篇介紹 nginx revered proxy hash key 算法資料可供參考:
https://tomme.me/nginx-proxy-cache-server/

分類
手機大未來

高捷閘門確定是支援Apple Pay?!

早上看到的新聞:

https://www.newmobilelife.com/2018/12/21/apple-pay-taiwan-train/

確定是要這樣實施嗎? 感覺很奇妙. 電子票證支付方式進行交通工具搭乘, 實施方式, 然後把電子票證綁在行動設備裡(iOS / Android), 再進行搭乘支付不是比較合理?

若以信用卡方式實施, 起迄點的處理方式是如何進行計算的呢?

我們先來看看日本實施方案, 把西瓜卡 (suica) 放入手機中:

https://support.apple.com/zh-tw/HT207155
https://japan.googleblog.com/2018/05/google-pay-news.html

有趣的地方在於原本的支付方式不變, 把電子票證放入行動設備. 不過若是以目前高捷方案, 應該是還蠻創新的實施例, 直接使用信用卡支付, 也是不錯啦, 只是不知解決的方案為何?

再找了一下資訊, 看起來是 8月新聞稿中有提到, 使用的是 Mastercard 技術, 開放式支付平台專案:

http://www.krtc.com.tw/news/flourishing-1_detail.aspx?ID=7d917b73-5107-4874-8608-d3beb9b6a604

而支付情境如下, 使用所謂的開放式支付平台專案, 也就是搭乘者一天只被請款一次, 而高捷是記錄後, 每日對搭乘者請款.

http://technews.tw/2018/08/01/using-credit-card-for-metro-first-launch-in-kaohsiung-metro-in-the-end-of-this-year/

如此一來就會有即時查詢, 扣款等議題需要商確, 不過實施案例已有先例, 應該不會有什麼太大問題.

看起來北捷也要加快了.

補充一下, 若是信用卡連電子票證的卡片, 要選擇對應的讀卡器(感應區)使用, 才會得到對應的支付工具, 圖片如下:

(圖片引用自: https://www.newmobilelife.com/2018/12/21/apple-pay-taiwan-train/, 並加上感應區標註)

使用二合一的信用卡(信用卡帶電子票證), 記得要選擇想要支付的方式來感應哦.

繼續閱讀:
https://mrmad.com.tw/taiwan-krtco-support-applepay-googlepay
https://www.mobile01.com/topicdetail.php?f=383&t=5668621

分類
程式技術

iOS設備上傳相片檔案型態與圖片方向問題

相片副檔名

之前在實作上傳圖檔活動時, 使用副檔名為 .jpg 的約束條件, 但發現在 iOS 設備選擇相片後, 無法成功通過驗證, 經實測後, 發現存在 iOS 相簿裡的 jpg 相片都是以 .jpeg 為副檔名, 所以在上傳時, 會無法通過副檔名驗證.

即使將 .jpg 圖檔存下在 iOS 設備裡的相簿, 也會被轉換檔名為 .jpeg 的副檔名, 這個狀況需要在實作上傳圖檔時需要特別留意.

相片方向

使用 iOS 設備拍照時, 存放檔案方式, 會以橫放方式存放 ( w > h ), 但直拍時, 一樣使用橫放方式存檔, 但是會有個 orientation 為轉向, 方向為 right-top (6), 也就會變成直向, 詳情可參考這裡的圖片與說明:

https://www.impulseadventure.com/photo/exif-orientation.html

所以若是 6 就可以利用順時鐘轉 90度回來正確的檢視.

相片方向在網頁上

另外有趣的現象是, 該圖在 PC / Mac 桌機, Android 手機時, 直接放在 web 連接, 會是正常的轉向出來, 但放在 html 裡使用 img src 的方式, 則會無法轉向, 不過 iOS 設備在 html img src 引用時, 仍能正常轉向.

測試與重製

使用一張 iOS 拍照, 但縮小保留 EXIF 轉向資訊圖片供測試參考:

https://codepen.io/timhuang/full/ZmmQjy/

在 iOS 設備上可以正常轉向, 但其他不然, 但又是直接連結也是可以成功轉向的, 第三個部分則是使用了 images.weserv.nl 服務, 它會將原來的圖檔轉正, 並將轉向改為正向方向, 也就能解決這個問題. 這個服務的介紹可以參考: https://diary.tw/archives/221

分類
好用軟體

Google Keep終於有iOS版了

Google Keep, 好用的一個小型便條紙服務(包含筆記、清單、小提醒), 沒有 evernote 那樣龐大或重要的筆記功能, 只需要一點小提示或小記錄的工具, 非推 Google Keep 不可.

無奈之前只有 Android 手機有 APP 可以用, (桌機用網頁版就很方便了), iOS 一直沒有推出這個 APP, 現在終於上線了, 超方便好用的 Google Keep.

網站版(桌機用): http://keep.google.com/
Android APP: https://play.google.com/store/apps/details?id=com.google.android.keep
iOS APP: https://itunes.apple.com/us/app/google-keep-your-thoughts/id1029207872?mt=8

繼續閱讀:
http://chinese.engadget.com/2015/09/24/google-keep-ios/

分類
系統技術

iOS 7.1企業APP安裝問題

在 iOS 7.1 更新後, 原企業APP安裝會發生以下訊息:
(無法安裝應用程式, 因為 xxxx 的憑證無效), 誰看得出來這個訊息是什麼意思, 查了一下, 發生的原因原來是因為原本在網頁上的安裝連結:
itms-services://?action=download-manifest&url=http://xxx.com.tw/xxx.plist

中的後面 url 沒有走 SSL 加密通道, 也就是 https.

如何解決這個問題, 當然, 就是改為 https://xxx.com.tw/xxx.plist 即可, 但若是沒有購買 SSL 加密憑證, 如何解決呢? 可以使用第三方的網站分享連結, 而且支援 https 的, 可以利用 dropbox 的 share link.

做法如下:

1. 將原來的 plist 檔案放在 dropbox 空間, 並生成分享連結(share link), url 會像如下:
https://www.dropbox.com/s/xxxxxxxxx/xxx.plist

2. 若上面網址沒有 https, 就自行改成 https 即可, 並將 www.dropbox.com 改為 dl.dropbox.com, 如下:
https://dl.dropbox.com/s/xxxxxxxxx/xxx.plist

3. 將原來的 itms-services:// 後的 url 改成上面 url 即可, 如下:
itms-services://?action=download-manifest&url=https://dl.dropbox.com/s/xxxxxxxxx/xxx.plist

上線即完成, 不過缺點會是這樣, 在安裝時會出現 dropbox 的安裝通知, 如下:
若不介意 dl.dropboxusercontent.com 的這個訊息, 這就可以進行安裝了, 是用 dropbox 的 https 來解決這個 iOS 7.1 強迫要用 https 下載 plist 的問題.

繼續閱讀:
http://bencollier.net/2014/03/ios-enterprise-app-error-cannot-install-applications-because-the-certificate-is-not-valid/
http://www.cocoachina.com/bbs/read.php?tid=194213&fpage=0&toread=0&page=1

若是還沒有 dropbox 空間的朋友們, 也歡迎多利用這個 referral link 加入, 謝謝: https://db.tt/h1NpPka3