Apple 推播通知 及 Firebase 推播通知 FCM(一)

LearnIOS

--

最近又開始重新之前未完成的專案,因為只算是大概的版本,有很多東西都沒有完善,例如:推播通知、聊天室排版、美術相關畫面呈現等等,所以現在想要把它完善,然後看看能不能上架,成為自己轉換跑道的履歷。

今天呢就要來討論一下,並且實作關於推播通知的部分,由於我的專案還有使用 Firebase,所以會再來實作 FCM 及結合 Apple 推播通知

首先現看一下我的啟蒙老師彼得潘小王子的推播通知介紹文章,相信就已經可完成大部分關於 Apple 推播通知的功能了,雖然因為 Apple 開發者網站有一點點改變,不過都還是可以知道該如何操作。

備註:需要準備一隻實體 Iphone 喔

在過程中遇到一點小問題就是文章中有提到一個大都拿來寫網頁的程式語法:Node.js ,這部分我完全沒有接觸過,所以多發了一點時間理解,雖然照著操作就可以,不過我比較喜歡遇到不懂的就去理解,而不是照抄而已。

一般來說需要專門的編輯器來編輯 Node.js 這個語法,不過Mac很棒,可以用內建得文字編輯器就可以了,只是變成說在編輯時要要記得點選製作純文字編輯,然後在儲存時修改副檔名 .js 就沒問題了。

點選 製作純文字格式 按鈕

然後照著彼得潘小王子文章內的教學就可以在實體 Iphone 看到期待已久的推播通知囉。

接下來要進入重頭戲囉

FCM (Firebase Cloud Messaging)

這裡也有一篇教學文章是關於 FCM 的也是照著裡面的教學就可以完成囉,不過一些網站都已經些許改變,所以我就來說說我個人完成後的心得及改變後的地方。

在文章開頭有說全部有哪些步驟,這幾個很重要

  • 設定Apple Developer Account
  • 產生一個 CSR 檔
  • 上傳你的 CSR 檔
  • 準備 APNs 認證

這邊其實還有一個方法可以實現跟上面的步驟完成後一樣的事情,會使用到彼得潘小王子文章教學內獲得的 APNs key。

  1. 先一樣打開想要設定的專案的 Firebase 控制台,一樣先到上傳憑證的地方,但是這次不上傳憑證,改成上傳 APN 驗證金鑰,就是彼得潘小王子文章教學內獲得的 APNs key。
  2. 金鑰 ID 跟 團隊 ID 獲得方法小王子文章裡都有,按上傳即可。

就我自己了解到的差別是 APN 憑證會綁定 APP , APN 驗證金鑰則沒有,上面提到的兩個方法我都試過,最後都是在上傳 APN 驗證金鑰才成功顯示由FCM傳過來的推播通知。

我上網爬文爬了很久,國外很多人都提到 IOS 收不到由 FCM 傳送的推播通知, android 都沒有問題,我也在這個問題卡了很久,所有我想到看到的方法都嘗試過並且排除基本 IOS 設定問題都無解,但是沒想到反覆測試後卻突然可以了,方法沒有改變,唯一只有時間問題,因此我自己個人推測,可能是現在 FCM 推播設定,設定完之後並不會有即時反應,所以第一次設定完成後需要一點時間,可能幾個小時後就突然就成功了。(如果有發現是其他問題歡迎留言跟我說,我也很想知道我推論是否正確,測底解決這個問題)

以上設定完後,就要來實作拉,其實一般來說這個 FCM 推播設定不太會從 Iphone 端發送,會是使用 Google 另外一個服務,Firebase Cloud Functions 來實作,不過我還不會,等之後我會來再來寫一篇文章討論這個強大的功能。

於是呢 我就偷吃步的在 Iphone 上面使用 http ,下面是 firebase 基本文件

我的方法是在我需要的時候,用 URLrequest 來執行,以下是程式碼

要特別說明的是 to 的對象雖然是一個字串,但是這個字串會是 firebase 提供的,他的方法是說利用一個 APP 跟實體 Iphone 組合出一個特殊的 fcmToken ,所以不同的 APP 跟不同的 Iphone 會組合出無限種組合,而我在下面提供的 Demo 有在 Appdelegate 設定一個 fcmToken 變數,但是其實根據 firebase 文件說明只要有成功獲取 fcmToken 的話,就可以無時無刻利用此獲得

但保險起見我在第一次獲得時利用此方法,儲存獲得的 fcmToken,但先須遵從 MessagingDelegate 並在 didFinishLaunchingWithOptions 指定自己為對象才可以呼叫此方法

Firebase 伺服器金鑰可以在上傳 APN 驗證金鑰的頁面上面找到,當要傳推播通知時,呼叫這個自訂方法就可以了,參數記得填入,參數解說上面的文件連結都有詳細說明,這只是簡易通知,其實還有很多東西,例如:改變badge的數字、通知聲音、傳送圖片或是音訊、長按之後出現的特製按鈕,這裡有另一篇文章可以參考再自己做改變囉。(也是彼得潘小王子的文章喔)

備註:參數 uid 為自己客制的,隨便填字串即可。

下面附上程式碼,使用時需要先照著上面幾篇文章的指示操作設定好 firebase 控制台

再來就是

  1. 在專案裡新增自己 firebase 控制台的 Google-info.plist
  2. 修改 Viewcontroller 裡面的伺服器金鑰字串
  3. 修改 Bundle Identifier 要跟你所使用的 firebase 控制台一樣

或是修改一個新的 Bundle Identifier 之後再新增一個 firebase 控制台,然後重複上面1.2步驟即可

我臨時寫的 Demo ,有點簡陋,請見諒。哈哈

以上就是這篇文章的所有內容拉,如果有什麼問題可以留言告訴我喔

我們下次見

--

--