使用 Manifest 創建你的 PWA – 基礎 Progressive Web App 教學

使用 Manifest 創建你的 PWA - 基礎 Progressive Web App 教學
使用 Manifest 創建你的 PWA - 基礎 Progressive Web App 教學

2023.01.14 更新:今天在幫網站加上 manifes.json 時,看見提示訊息後才發現,Google 建議加上 id。因為在 start_url 的部份補上 id。

Manifest.json 參考資源

manifest.json 是在學 PWA 這塊時最簡單的部份,主要是建一支 JSON 檔就可以,相關的參數 MDN上 或是 Google 一下就會看到,不用花太多的時間去記。

本篇參考了三篇,以這三篇的文章來做個整理,包含了大部份建 manifest.json 會用到的成員(MDN 上講成員,就跟著用)。

MDN:Web App Manifest

30 天 Progressive Web App 學習筆記 — To-Do List 實作 PWA — Web App Manifest File

The Web App Manifest


manifest.json是做什麼用的?

根據 MDN 上的解釋,manifest.json 是這樣子的:

它提供了應用程式相關的資訊(像是名稱、作者、圖示、描述)。 manifest 的功用是將 Web 應用程式安裝到設備的主畫面,為使用者提供更快速的訪問和更豐富的體驗。

簡單的說明就是,PWA 主要就是讓網頁可以模擬成一個手機的 App 來使用,要當成 App,就要有 App 的樣子,就要能在手機的桌面上有一個 icon 可以按,按下去後有一個幾秒鐘的啟動畫面讓使用者知道開啟的 App 是什麼,manifest 就是在處理這段。

另外,一般我們在手機上開 Chrome 或 Safari 看網頁時,最頂部會有一條網址列,但一般 App 是不會有的,而 manifest.json 也可以設定開啟頁面時不顯示網址列。

PWA 是把頁面模擬成 App 的一個方法,如果公司本身也有製作 App 呢?manifest.json 上也可以設定 App 在 Google Play、App Store 上的連結,並呈現一個推薦通知讓使用者可以進入並下載。

最後補充一點,不論是 PWA 的 Cache 或是推播功能,都要求網站要是 https,manifest.json 這點也不意外,如果網站不是 https,即便引用了 manifest.json,也不會被 Chrome 主動詢問是否要將網站加入到主畫面。

關於 manifest 的功能,Google 有一隻影片介紹:

Web App Manifest: Totally Tooling Tips

manifest.json 成員

成員列表整理如下:

  • theme_color 應用程式的主要顏色
  • background_color 啟動畫面(splash screen)的背景色
  • icons 應用程式的圖示
  • name 應用程式的名稱
  • short_name 應用程式的簡寫
  • lang 主要語言
  • description 應用程式的描述
  • dir 文字書寫方向
  • display 應用程式的顯示模式
  • orientation 預設顯示的方向是直的或橫的
  • prefer_related_applications 是否要推薦一個原生的 App
  • related_applications 推薦原生 App 的連結
  • start_url 開啟應用程式時的預設網址
  • scope 應用程式的使用範圍

theme_color 應用程式的主要顏色

主要可以改變網址列那一條的顏色。

"theme_color": "#000000"

background_color 啟動畫面(splash screen)的背景色

App 啟動時,會有一個 Splash Screen,翻譯成快閃頁、過場頁,本篇稱為啟動畫面。

Splash Screen 需要3個成員:background_color、icons、name。

"background_color": "red"

補充一點,Splash Screen,在 IOS 上是不支援的,但可以直接讀取一張圖檔來當作啟動頁面,在 head 裡加入以下就行:

icons 應用程式的圖示

icons 裡放陣列,放不同尺寸下的主要圖示,如果 Splash Screen 裡要用的圖示,大小必須包含 192px、512px。

icons 裡,陣列裡的每一個物件有 3 個成員:

  • sizes 圖片尺寸,可用在多個尺寸上的話用空白鍵區隔。
  • src 圖片的路徑,如果是相對路徑,是以 manifest 所在的位置為基準。
  • type 圖檔類型,這項排必填,主要是告知裝置類型,讓不支援的裝置可以快速略過。
"icons": [
  {
    "src": "icon/lowres.webp",
    "sizes": "48x48",
    "type": "image/webp"
  },
  {
    "src": "icon/lowres",
    "sizes": "48x48"
  },
  {
    "src": "icon/hd_hi.ico",
    "sizes": "72x72 96x96 128x128 256x256"
  },
  {
    "src": "icon/hd_hi.svg",
    "sizes": "72x72"
  }
]

由於 manifest 在 IOS 上還不支援,因此如果 IOS 上也想要自訂 icon,就要改用 HTML 裡的 meta 來設定,如下:

name 應用程式的名稱

應用程式的完整名稱,會顯示在 Splash Screen上,以及主畫面上的名稱。

"name": "my application"

short_name 應用程式的簡寫

當 name 太長而無法顯示時,會改成顯示簡寫。

"short_name": "my app"

lang 主要語言

針對 name、short_name 這兩個使用的。

語言列表可以在這找:https://www.iana.org

"lang": "zh-Hant-TW"

description 應用程式的描述

描述這個應用程式是做什麼的。

"description": "這是一個好用又免費的應用程式,主要可以拿來拯救宇宙。"

dir 文字書寫方向

值有 3 個:ltr(左至右)、rtl(右至左)、auto(讓瀏覽器自己決定)。

不填的話預設值是 auto

"dir": "ltr"

display 應用程式的顯示模式

顯示模式指的是從主畫面點開 App 後,要顯示的樣子,有 4 個值可用:

  • fullscreen 全螢幕,就像在用原生 App 一樣,會隱藏所有的瀏覽器 UI。
  • standalone 會隱藏標準瀏覽器 UI 元素,如 URL 欄等。
  • browser 預設值,就像一般用瀏覽器一樣。
  • minimal-ui 會有導覽列最小的 UI,這個值 Chrome 不支援。

如果要 Chrome 主動提示加入主畫面的話,設定值必須要是 standalone。

"display": "standalone"

orientation 預設顯示的方向是直的或橫的

可以強制讓使用者必須裝置拿直的(landscape)或拿橫的(portrait)看。這點要設要仔細思考過才行,因為使用都大部份都喜歡自己決定是直看或横看。

如果是遊戲類型的,可以設定用橫的。

"orientation": "landscape"

prefer_related_applications 是否要推薦一個原生的 App

PWA 是模擬頁面為 App,如果網站本身有出 App,這項就可以設成 true,從主畫面點開頁面時就會出現可以下載 App 的提示。

如果這項為 true,則下面的 related_applications 就要填入值。

這項的預設值為 false

"prefer_related_applications": false

related_applications 推薦原生 App 的連結

值是陣列,裡面放 App 資訊的物件,每項物件有 2 個成員要填,是 Google Play 上的話則有 3 個成員。

  • platform 應用程式的平台,可填 playitunes
  • url 應用程式的網址。
  • id Google Play上要填的 ID。
"related_applications": [
  {
    "platform": "play",
    "url": "https://play.google.com/store/apps/details?id=com.example.app1",
    "id": "com.example.app1"
  },
  {
    "platform": "itunes",
    "url": "https://itunes.apple.com/app/example-app1/id123456789"
  }
]

start_url 開啟應用程式時的預設網址

如果有設定的話,開啟應用程式時就會進到設定的網址。沒設定的話就是使用者按加入主畫面時的那個網址。

如果填寫的是相對路徑,是以 manifest 所在的位置為基準。

建議可以在網址上加入 Google Analytics 的 utm 參數,這樣在 GA 上就可以看見多少來源是來自於 PWA,可以檢測成效。

如果要 Chrome主 動提示加入主畫面的話,這項必須填寫。

另外,根據 Google 的說法,在 start_url 之外,應該再另行定義一個 id。

"start_url": "./?utm_source=web_app_manifest",
"id": "/?utm_source=web_app_manifest"

scope 應用程式的使用範圍

這項如果有填,那應用程式的作用域就會限在指定的目錄裡,超過指定目錄,就會當成一般的網頁瀏覽。

"scope": "/myapp/"

manifest.json 基本檔案內容

manifest 裡的成員不是每項都一定要填寫的,以下附上 manifest.json 的基本檔內容:


關於「Chrome 主動提示加入主畫面」

PWA 身為 Google 的親身兒子,在 Android 手機是很有吃香的點。

頁面引用了 manifest.json 後,使用者在手機上點選加入主畫面,頁面就可以像 App 一樣顯示在手機的主畫面上。

但,很多使用者其實不知道有這功能,或是知道了也不常會去按。

貼心的 Google 針對這點做了一項措施,就是主動詢問使用者要不要將頁面加入主畫面。

根據 Google 的說明文件:Add to Home Screen,觸發 Chrome 主動詢問是否加入主畫面的條件如下:

  1. 使用者還沒加入主畫面
  2. 在有 manifes.json 的網域下,互動了至少 30 秒
  3. manifset.json 裡有幾項成員一定要有:name || short_name、icons、start_url、display
  4. 頁面要是 https
  5. 頁面有裝 service-worker(sw.js),裡面有監聽並處理 beforeinstallprompt 事件

第 5 點,是否要有寫 beforeinstallprompt,好像不是必填項目,即便沒填,在測試時也會在底部出現一條詢問框。

在參考了這篇以後:PWA 實戰經驗分享

發現別人是用在 UX 上更優化的地方,就是自己選擇要出現詢問框時用的。


PWA 學習筆記系列

Summary
使用 Manifest 創建你的 PWA - 基礎 Progressive Web App 教學
Article Name
使用 Manifest 創建你的 PWA - 基礎 Progressive Web App 教學
Description
深入探索 PWA 的 Manifest.json 應用,學習如何設定應用程式的主要顏色、啟動畫面、圖示、名稱等,並了解 Chrome 主動提示加入主畫面的條件和功能。
Augustus
Let's Write
Let's Write
https://letswrite.tw/wp-content/uploads/2020/08/logo_512.jpg
訂閱
通知
guest

0 Comments
最舊
最新
Inline Feedbacks
看所有留言