Firebase Dynamic Links Analytics API 取得短網址分析資料

Firebase Dynamic Links Analytics API 取得短網址分析資料

用API取資料有一個大坑

先寫這篇是個意外,照理說是要先寫怎麼使用Firebase Dynamic Links來產生短網址的,但Augustus前兩天建了短網址,照文件中說,36小時內收到的資料會有些事件收不到,而且看報表日期才出現到2/14,建短網址的日期是17號啊,照這進度是不是要下周才看得到?

因為後台還看不到,昨晚想說會不會用API的方式就可以先看到了?就試著用API來取,結果就踩到了一個大坑,研究了一晚上才解決,因此想先完成本篇的筆記,以免之後忘記。


Analytics API – Node.js

在Firebase的說明文件中,有一頁就是專門寫怎麼用Analytics API來取得短網址的分析資料:Firebase Dynamic Links Analytics API

文件中也給了取得token的程式碼,必須用後端取得,範例中給了Java、Node.js、Python三種。

Augustus選擇了Node.js,因為……跟後端相關的也只會這種。

這邊用簡單快速的方式,直接用本機來呼Analytics API。

先進Node.js官網下載並安裝。

安裝完後,開啟終端機,我們先來安裝nodemon,輸入指令:

npm install -g nodemon

如果安裝失敗,通常是要改用Admin,改輸入:

sudo npm install -g nodemon

接著輸入密碼再按下enter就行。

裝完nodemon,接下來就是新增一個資料夾,隨便取個名字,把資料夾拖拉到終端機後,終端機就會在這個資料夾的目錄底下打開,我們先初始化Node.js,在終端機輸入:

npm init -y

就會快速產生一個package-lock.json,接著輸入:

npm install

就會安裝Node.js的檔案。

都裝完以後,就可以看著Firebase的說明文件來準備程式碼的部份。

安裝google API、fetch

繼續在終端機輸入:

npm install googleapis

安裝了google API,因為取得token後必須GET到指定的URL才可以取回資料,因此要再安裝fetch,終端機輸入:

npm install node-fetch --save

這樣取token、用fetch來GET的套件就安裝完了。

取得Firebase私密金鑰

要用API取得Dynamic Links的資料,還需要Firebase的金鑰。

進到生成Dynamic Links的Firebase專案後,點選左側選單的齒輪,再點專案設定:

點選齒輪、專案設定
點選齒輪、專案設定

接著右側會換成設定頁,點選「服務帳戶」,會看見Firebase Admin SDK的頁籤,點說明內文中的「建立服務帳戶」:

點建立服務帳戶
點建立服務帳戶

等Firebase轉個圈圈,轉完後會看見右邊內文的部份變了,會有一個如何引用金鑰的說明檔:

如何引用金鑰的說明
如何引用金鑰的說明

上圖的1,是等等寫程式要取得分析資料時會用的,到時那個引用的路徑要改成我們等等下載到的檔案。

上圖的2「產生新的私密金鑰」就是要下載的檔案,點選了以後就會下載金鑰。

因為金鑰很重要,就很像你家鑰匙一樣,誰有了誰都可以進來,因此Firebase會提醒你不要隨便給別人:

金鑰不要亂給
金鑰不要亂給

按下「產生金鑰」,就順利下載了。

金鑰會是一個JSON檔,我們就放進我們剛剛新建的資料夾,準備開始寫程式來取得Dynamic Links的分析資料。

程式碼部份

基本上,如果不太會寫Node.js沒關係,因為Firebase的文件都寫好了。

先在我們剛剛新增的資料夾中,另存一個index.js的檔案,然後貼上以下程式碼:

上面這段程式碼是文件中給的範例,JSON的路徑檔記得要替換檔名。

接著就來執行這個JS檔來看能不能順利取得token,在終端機輸入:

nodemon index.js

就會看見成功的log出取到的token:

成功的取得token(點擊看原圖)
成功的取得token(點擊看原圖)

有了token以後,照文件中寫的,下一步就是要GET一個指定的URL,附上token,就可以取得分析資料了。

指定的連結長這樣:

https://firebasedynamiclinks.googleapis.com/v1/SHORT_DYNAMIC_LINK/linkStats?durationDays=DURATION

SHORT_DYNAMIC_LINK,就是從Firebase生成的短網址,要注意的是網址要改成encode過的,比方Augustus要看的分析資料是「https://letswrite.page.link/analytictest」這個網址,那URL就要寫成:

https://firebasedynamiclinks.googleapis.com/v1/https%3A%2F%2Fletswrite.page.link%2Fanalytictest/linkStats?durationDays=7

如果不知道怎麼encode沒關係,網路上有生成器,像這個:URL Decoder/Encoder,貼上網址後按下encode就行。

DURATION,寫一個數字,代表要取得幾天內的資料。想取得7天就寫7,30天就寫30,文件中有特別說明,36小時內有些事件可能會記錄不到。

Note that some events logged in the last 36 hours might not be included.

…蛤?36小時?如果想要今天放短網址,隔天就要看成效資料,企劃會瘋掉。

有了URL後,接著就是再帶上前面一段取得的token來執行GET,上面那段程式碼,加上GET的部份,完整的程式碼是這樣:

按照文件上的說明,GET後就會收到分析的資料,但,實際上會得到的是一個坑,會看到這個訊息:

{
  error: {
    code: 403,
    message: 'The caller does not have permission',
    status: 'PERMISSION_DENIED'
  }
}

解決這個訊息,就是本篇筆記的重點。


403 The caller does not have permission 的解決方法

坦白說,一開始看到這個錯誤訊息,都傻了,因為文件裡面沒寫到這段,又想到Firebase有一個Authentication的登入功能,不會還要寫好一套,確實做登入後才取得到資料吧?

好險,這世界有個偉大的發明叫Google,工程師們也有一個偉大的宇宙叫stackoverflow。

基本上這個錯誤讓許多人傻了眼,stackoverflow跟Github issue上蠻多人在發問跟哀嚎的,後來找到了這篇才有了解決辦法:The caller does not have permission [403] when calling Dynamic Links Analytics API

解決辦法很簡單,不用寫程式就可以解決。

首先,打開我們從Firebase上下載到的金鑰JSON,裡面會有一個「client_email」,把這個的值記下來。

接著,進到GCP上的IAM & admin,確認好開啟的是Firebase上建的專案後,會看到一張列表,列有這個專案的所有授權,其中有一個,就會是上面那句「client_email」的值,像這樣:

IAM & admin 中找到 client_email(點擊看原圖)
IAM & admin 中找到 client_email(點擊看原圖)

Role上也會標記Firebase Admin SDK Administrator Service Agent。

接著點選那一行最右邊的鉛筆icon,會開啟這個金鑰具有的權限:

這個金鑰具有的權限
這個金鑰具有的權限

我們點擊「+ ADD ANOTHER ROLE」來新增權限進去,點了以後會出現一個小視窗,列出了所有可以增加的權限。我們不用一個一個找,直接輸入「Firebase Grow Viewer」來搜尋:

輸入「Firebase Grow Viewer」來搜尋
輸入「Firebase Grow Viewer」來搜尋

只會出現一筆結果:

結果中出現 Firebase Grow Viewer
結果中出現 Firebase Grow Viewer

點擊 Firebase Grow Viewer,會看見Role的欄位新增了:

Role的欄位新增Firebase Grow Viewer
Role的欄位新增Firebase Grow Viewer

最後按下確定,就大功告成了。

我們再試著發一次GET,就可以成功看到回傳結果:

成功看到回傳結果
成功看到回傳結果

如果還是沒看到的朋友,就請再等一下,過幾分鐘後再試就行。


筆記後心得

Firebase Dynamic Links是以前Google縮網址結束營運後的新一種方案,加密性比以前強,也可以設置自訂網域的縮網址。

但,關於統計資料這點還有待加強,36小時後才能有完整資料是真的不行,許多短網址服務幾乎都是立馬就可以看到點擊數等分析資料。

等建立Firebase Dynamic Links確實研究完成後,再來補其它篇的筆記。


Summary
Firebase Dynamic Links Analytics API 取得短網址分析資料
Article Name
Firebase Dynamic Links Analytics API 取得短網址分析資料
Description
本篇大綱:用API取資料有一個大坑。Analytics API – Node.js。安裝google API、fetch。取得Firebase私密金鑰。程式碼部份。403 The caller does not have permission 的解決方法。筆記後心得。
Augustus
Let's Write
Let's Write
Publisher Logo

留言

avatar
  訂閱  
通知