Firebase 推播服務(Firebase Cloud Messaging FCM)
文章推薦指數: 80 %
... 併購Firebase 後所發表的服務之一,而早期Google 的自有的推播服務則叫做Google Cloud Messaging(GCM),相對於GCM 而FCM 最大的進步是能在網頁上的主控台推送通知 ...
GetunlimitedaccessOpeninappHomeNotificationsListsStoriesWriteFirebase推播服務(FirebaseCloudMessagingFCM)FirebaseCloudMessaging(FCM)是Goolge在2016併購Firebase後所發表的服務之一,而早期Google的自有的推播服務則叫做GoogleCloudMessaging(GCM),相對於GCM而FCM最大的進步是能在網頁上的主控台推送通知至各種平台中,而這邊我們所要注意的FCM是無法針對單一平台做推送的。
在之前法蘭克也曾經實作過AppleNotification,它的設定流程相對於FCM來得複雜許多且無法跨平台,而這就是我們為什麼要使用FCM來實作推播的理由了。
而為什麼我會說FCM相對於AppleNotification設定較容易,因為FCM在Apple的APNs中間夾了一層介面(interface)來簡化在實作AppleNotification時所必須在後台設定的一大堆繁鎖的動作,but…這並不代表完全不需在Apple後台做設定,還是得在Apple後台產出憑證並上傳至Firebase,這在教學中會提到!另外FCM可直接從後台推送訊息至雙平台的裝置,而AppleNotification不用說相信大家也知道,只能推送到iPhone裝置,也就是說貴司的App如果有雙平台的話,就要請Android的工程師再另外設置,站在公司的角度這是很耗費成本的,如果透過FCM是不需要這麼做的。
以下就讓我們就來看看FCM的推播流程圖。
透過Firebase後台或Firebase的SDK推送訊息,並藉由FirebaseColudMessageing的服務推送到各種平台上前置作業:必須擁有Apple開發者帳號。
必須擁有可以測試的實體裝置,例如iPhone、iPad等等。
建立一個空的專案,並把BundleID記下來因後續會使用的到。
實作流程使用cocoaPods載入FirebaseCloudMessageSDK至Xcode中。
使用Google帳號登入Firebase後台並建立專案。
從Mac的keychain匯出.certSigningRequest(CSR)檔案。
登入Apple開發者後台建立含有遠程通知服務的AppIDs。
配置AppIDs遠程通知的設定。
在Apple開發者後台註冊接收遠程通知的設備(僅測試環境需要設定)。
在Apple開發者後台配置ProvisioningProfiles(僅測試環境需要設定)。
在Firebase後台專案底下匯入步驟7所產生的憑證(.p12檔)。
撰寫接收遠程通知的程式碼,並修改接收到通知訊息時的動作別(分成Swift3和Swift4版本)。
至Firebase後台的Notification測試推播。
1.使用cocoaPods載入GoogleCloudMessageSDK至Xcode中2.使用Google帳號登入Firebase後台並建立專案2.1新增專案2.2建立專案專案名稱:自行命名即可2.3將Firebase加入iOS的應用程式iOS繫結ID=>前置作業第3項的BundleID2.4下載GoogleService-Info.plist後點選「繼續」直到完成所有步驟2.5將GoogleService-Info.plist拖曳至Xcode專案裡3.從keychain匯出.certSigningRequest(CSR)檔案CSR在後面配置AppIDs遠程通知時會須用到。
3.1打開Launchpad搜尋keychain3.2選擇左上鑰匙圈存取→憑證輔助程式→從憑證授權要求憑證3.3填入相關資訊後匯出CSR使用者電子郵件位址:AppleID的email一般名稱:英文名字已將要求:儲存到磁碟備註:該CSR檔案後續會用到,請妥善保存。
4.登入開發者後台創建含有遠程通知服務的AppIDs4.1登入後台的Certificates,Identifiers&Profiles4.2在左列的選單選擇AppIDs並點選「+」4.3註冊AppIDName:任意填入即可BundleID:填入前置作業第3項所產生的BundleIDEnableService:勾選PushNotification4.4點擊下一步至完成設定這邊會看到PushNotification=Configurable代表還沒設定完,暫且先點選Done,等等再繼續設定。
5.配置AppIDs遠程通知的設定5.1點擊剛剛產生的GoogleCloudMessageAppID展開後,點選Edit5.2往下滾找到產生測試時期通知的SSL證書(DevelopmentSSLCertificate),點擊CreateCertificate5.3滾到最下面點擊Continue開始上傳步驟3所產生的CertificateSigningRequest.certSigningRequest(CSR)檔案5.4下載.cer檔案5.5點擊兩下.cer檔案執行安裝到本機5.6確認有無安裝至keychain點擊兩下.cer會自動安裝,待安裝完後會自動打開keychain,這時請檢查.cer是否已安裝。
若沒有自動打開keychain,則可依步驟1的方式查看。
6.在Apple開發者後台註冊接收遠程通知的設備(僅測試環境需要設定)先至後台確認測試的設備有無註冊過,若沒有才要執行註冊的動作,下圖表示已註冊過即可略過該第6大步驟。
備註:通常如果被測試機之前如果有連接Xcode安裝測試App的話,這個步驟要做的事情就都會貼心的幫我們做好了。
6.1開啟Xcode選擇Window→Devices6.2複製XXX的iPhond的Identifier6.3至開發者後台的Devices選單註冊該設備7.在Apple開發者後台配置ProvisioningProfiles(僅測試環境需要設定)7.1在Apple開發者後台選取左側選單點擊ProvisioningProfiles下的Development(開發時期測試用),並點選「+」號7.2選取iOSAppDevelopment後點選Continue7.3選擇剛剛創建的AppID後點選Continue7.4選擇iOS開發者證書,若不確認是哪一個的話,全部勾選亦可7.5選擇測試的設備7.6替Profile命名(任意即可,因只是測試用的)7.7下載GoogleCloudMessageDemo.mobileprovision檔並點擊兩下執行安裝8.在Firebase後台專案底下匯入步驟7所產生的憑證(.p12檔)8.1打開launchpad搜尋keychain8.2點選左側選單憑證→步驟7.7所安裝的憑證檔→右鍵→輸出balala…8.3確認檔案格式為.p12即可儲存8.4點選儲存後系統會詢問是否輸入密碼來保護該檔案,可以直接選擇好來跳過該提示,也可自行輸入密碼來保護,但請牢記該密碼,因在上傳到Firebase時會用到。
8.5登入Firebase後台將匯出的.p12檔上傳,請使用Safari10(含)以上的版本或Chrome開啟,否則會看不到該功能。
Overview旁的齒輪→專案設定→CloudMessage→上傳憑證→選擇步驟8.4產出的.p12檔以上已完成所有的設定了,再來要在Xcode裡加入Firebase所提供的Quickstart專案裡的程式碼了。
9.撰寫接收遠程通知的程式碼,並修改接收到通知訊息時的動作別(分成Swift3和Swift4版本)Swift3Xcode版本(8.0)Firebase/Messaging(4.0.1)用以下程式碼覆蓋掉整個AppDelegate.swift第43~46行=>設定觀察者去監聽Token的變化。
第82~89行=>當取到Token時所會觸發的事件。
第142~157行=>在前景收到推播時會觸發的delegate。
而第156行則是定義在收到通知時要如何呈現的動作,務必將其改成.alert,否則在iOS10的Device上是不會有任何動作的。
第159~173行=>App在關掉的狀態下或App在背景或前景的狀態下,點擊推播訊息時所會觸發的delegate。
在ViewController.swift加入取得token的程式碼,這邊不影響接收通知的動作,只是單純要取得Device的token而己。
第5~9行=>主動的去跟Firebase要DeviceToken。
Swift4Xcode版本(9.3)Firebase/Messaging(5.0.1)用以下程式碼覆蓋掉整個AppDelegate.swift第18~45行=>與Swift3的寫法大同小異。
第69~92行=>iOS10以下的版本接收推播訊息的delegate,又分為從後台推送出觸發的delegate和點擊推播訊息所觸發的delegate,如果要將後台推播的訊息另存起來,該delegate就會派上用場了。
第103~117行=>取得DeviceToken,通常是給後台人員利用各種語言來推播時用的Token,在實務上通常在收到該Token會將它送到後台並且和帳號綁定在一起,以利後續針對單一帳號推播使用。
以上是被動的接收Token。
而有些時侯我們得必須主動的去跟Firebase要DevieToken的,語法如下:InstanceID.instanceID().token()//主動去跟Firebase要DeviceToken第119~152行=>iOS10以上的版本接收推播訊息的delegate,又分為從後台推送出觸發的delegate和點擊推播訊息所觸發的delegate,如果要將後台推播的訊息另存起來,該delegate就會派上用場了。
第156~165行=>iOS10以上用來接收firebasetoken的delegate,該token可用來從firebase後台推送單一裝置時使用。
以上不管用Swift3或Swift4最後都得打開XcodePushNotification的選項選擇專案→TARGETS→Capabilities→ON10.至Firebase後台的Notification測試推播10.1將App安裝至手機上並執行,查看console是否有成功連線至FCM(for使用Swift3語法撰寫推播才有得情境,若是使用Swift4則直接跳到步驟10.2)10.2登入Firebase後台選擇左測選單Notification訊息文字=>通知的內容應用程式=>選擇專案補充說明有時侯推播的內容除了顯示在App端的畫面上讓使用者可以看的到的Title和Body外,如果我們還要額外增加其它的客製化資料,這可以辦得到嗎?答案是可以的,法蘭克就用Postman來演示這個案例。
利用postman推播的格式以上這張圖就是用Postman推播的格式,這個動作跟從Firebase後台推播的動作其實是一樣的,以下就分別說明上圖的各欄位所代表的意義為何。
posturl=>固定的url,也就是Firebase推播的Server。
registration_ids=>FirebaseToken。
data=>該key值下的物件可以放客製化的欄位,這邊法蘭克放了一個planId,主要是要用來識別,如果該欄位不為空的話,使用者點擊推播訊息的時侯要進到特定的頁面。
notification=>顯示在使用者手機上的推播Title和Body。
接下來要演示如何在App端取得Data的資料,而我會在使用者點擊推播訊息所會觸發的userNotificationCenter(_:didReceive:withCompletionHandler:)delegate裡來取得由postman送出的資料。
在userNotificationCenter(_:didReceive:withCompletionHandler:)裡加入此段邏輯第2行=>印出由postman送出的整包資料。
第3行=>取出data裡的資料,這裡比較特別的是資料型態為AnyHashable。
第4行=>console如下圖所示,如果是AnyHashable型態的資料,要用第3行演示的方法取出。
console呈現由postman送出的資料結論該範例的環境是在Development所演示的,若是App是透過TestFlight或者是上架到正式區,請務必記得將Firebase上的.p12置換成ProductionSSLCertificate,如果不想用置換的方式,Firebase上也可並存Development和Production的憑證,從下圖中上傳並下載,最後從keychain匯出(可參考第5點和第8點)。
FirebaseToken是用來從Firebase後台推送單一裝置用;而DeviceToken通常是給後台人員利用各種語言來推播時用的Token,在實務上通常在收到該Token會將它送到後台並且和帳號綁定在一起,以利後續針對單一帳號推播使用。
DeviceToken除了可以被動的接收外,我們也可以主動的去取得。
因為在特定的情境下就得必須這麼做,例如:App有登入+推播的機制下,我們就常常需要將帳號和DeviceToken綁定在一起。
此時如果application(_:didRegisterForRemoteNotificationsWithDeviceToken:)沒有取得Token,我們就得主動的去取得DeviceToken。
如果您喜歡我的文章,請多按幾下「拍手」給我鼓勵,或是按「follow」讓我持續提供好文章給您。
參考資料FirebaseNotifications|FirebaseNotificationsintegratescloselywithFirebaseAnalytics,allowingyoutotargetnotificationsbycustomaudience.Also…firebase.google.comfirebase/quickstart-iosquickstart-ios-FirebaseQuickstartSamplesforiOSgithub.comMorefrom法蘭克的iOS世界FollowLovepodcastsoraudiobooks?Learnonthegowithournewapp.TryKnowableAboutHelpTermsPrivacyGettheMediumappGetstarted法蘭克的iOS世界960FollowersFollowHelpStatusWritersBlogCareersPrivacyTermsAboutKnowable
延伸文章資訊
- 1Firebase 推播服務(Firebase Cloud Messaging FCM)
... 併購Firebase 後所發表的服務之一,而早期Google 的自有的推播服務則叫做Google Cloud Messaging(GCM),相對於GCM 而FCM 最大的進步是能在網頁上...
- 2FCM 消息简介 | Firebase Cloud Messaging
通知消息,有时被称为“显示消息”。此类消息由FCM SDK 自动处理。 数据消息,由客户端应用处理。 通知消息包含一组用户可见的预 ...
- 3Push Notification教學:如何使用Firebase在iOS實現推播功能
在此教學中,我們會了解如何應用Firebase推播通知,懂得如何一步一步在Xcode介面實現,此份教學將會分成7大部份來說明。 設定Apple Developer Account ...
- 4通知- Firebase說明
撰寫訊息 · 在通知編輯器中,選取[Messages] 標籤。 · 選取[New Message]。 · 輸入訊息文字,也可以選填訊息標籤。 · 選取傳送日期:[Now] 或[Scheduled...
- 5在Android 应用中接收消息 | Firebase Cloud Messaging
根据接收消息的应用的状态(前台/后台),Firebase 通知的行为会有所不同。如果您希望前台应用接收通知消息或数据消息,则需要编写代码来处理 onMessageReceived 回调 ...