使用Firebase 雲端傳訊進行遠端通知- Xamarin - Microsoft Learn

文章推薦指數: 80 %
投票人數:10人

本逐步解說提供如何使用Firebase 雲端通訊實作遠端通知的逐步說明, (也稱為Xamarin.Android 應用程式中的推播通知) 。

它說明如何實作與Firebase ... 跳到主要內容 已不再支援此瀏覽器。

請升級至MicrosoftEdge,以利用最新功能、安全性更新和技術支援。

下載MicrosoftEdge InternetExplorer和MicrosoftEdge的詳細資訊 目錄 結束焦點模式 閱讀英文 儲存 目錄 閱讀英文 儲存 列印 Twitter LinkedIn Facebook 電子郵件 目錄 使用Firebase雲端傳訊進行遠端通知 發行項 09/21/2022 10位參與者 本文內容 本逐步解說提供如何使用Firebase雲端通訊實作遠端通知的逐步說明,(也稱為Xamarin.Android應用程式中的推播通知)。

它說明如何實作與Firebase雲端通訊(FCM)通訊所需的各種類別、提供如何設定Android資訊清單以存取FCM的範例,以及示範使用Firebase主控台的下游傳訊。

FCM通知概觀 在本逐步解說中,將會建立名為FCMClient的基本應用程式,以說明FCM傳訊的基本概念。

FCMClient會檢查GooglePlay服務是否存在、接收來自FCM的註冊權杖、顯示您從Firebase主控台傳送的遠端通知,以及訂閱主題訊息: 將會探索下列主題區域: 背景通知 主題訊息 前景通知 在本逐步解說期間,您會累加地將功能新增至FCMClient,並在裝置或模擬器上執行,以瞭解其如何與FCM互動。

您將使用記錄來見證FCM伺服器的即時應用程式交易,並觀察如何從您在Firebase主控台通知GUI中輸入的FCM訊息產生通知。

規格需求 熟悉Firebase雲端傳訊可以傳送的不同訊息類型會很有説明。

訊息的承載會決定用戶端應用程式接收和處理訊息的方式。

您必須先取得必要的認證,才能繼續進行本逐步解說,才能使用Google的FCM伺服器;此程式會在Firebase雲端通訊中說明。

特別是,您必須下載google-services.json檔案,以搭配本逐步解說中所示的範例程式碼使用。

如果您尚未在Firebase主控台中建立專案(,或尚未下載google-services.json檔案),請參閱Firebase雲端通訊。

若要執行範例應用程式,您將需要與Firebase相符合的Android測試裝置或模擬器。

Firebase雲端通訊支援在Android4.0或更高版本上執行的用戶端,而且這些裝置也必須安裝GooglePlayStore應用程式,(GooglePlayServices9.2.1或更新版本)。

如果您尚未在裝置上安裝GooglePlayStore應用程式,請流覽GooglePlay網站以下載並安裝。

或者,如果您使用AndroidSDK模擬器),您可以使用已安裝GooglePlayServices而不是測試裝置,(如果您使用的是AndroidSDK模擬器),就不需要安裝GooglePlayStore。

啟動應用程式專案 若要開始,請建立名為FCMClient的新空白Xamarin.Android專案。

如果您不熟悉建立Xamarin.Android專案,請參閱Hello,Android。

建立新的應用程式之後,下一個步驟是設定套件名稱,並安裝數個將用於與FCM通訊的NuGet套件。

設定套件名稱 在Firebase雲端通訊中,您為已啟用FCM的應用程式指定套件名稱。

此套件名稱也會作為與API金鑰相關聯的應用程式識別碼。

將應用程式設定為使用此套件名稱: VisualStudio VisualStudioforMac 開啟FCMClient專案的屬性。

在[Android資訊清單]頁面中,設定套件名稱。

在下列範例中,套件名稱會設定為com.xamarin.fcmexample: 當您更新Android資訊清單時,也請檢查以確定Internet已啟用許可權。

開啟FCMClient專案的屬性。

在[Android應用程式]頁面中,設定套件名稱。

在下列範例中,套件名稱會設定為com.xamarin.fcmexample: 當您更新Android資訊清單時,也請檢查以確定INTERNET已在[必要許可權])下啟用許可權(。

重要 如果此套件名稱與Firebase主控台中輸入的套件名稱不完全相符,用戶端應用程式將無法從FCM接收註冊權杖。

新增XamarinGooglePlay服務基底套件 由於Firebase雲端通訊取決於GooglePlay服務,因此必須將XamarinGooglePlay服務-基底NuGet套件新增至Xamarin.Android專案。

您將需要29.0.0.2版或更新版本。

VisualStudio VisualStudioforMac 在[VisualStudio]中,以滑鼠右鍵按一下[參考>管理NuGet套件...]。

按一下[流覽]索引標籤,然後搜尋Xamarin.GooglePlayServices.Base。

將此套件安裝到FCMClient專案中: 在VisualStudioforMac中,以滑鼠右鍵按一下[套件>新增套件...]。

搜尋Xamarin.GooglePlayServices.Base。

將此套件安裝到FCMClient專案中: 如果您在安裝NuGet期間收到錯誤,請關閉FCMClient專案,再次開啟它,然後重試NuGet安裝。

當您安裝Xamarin.GooglePlayServices.Base時,也會安裝所有必要的相依性。

編輯MainActivity.cs並新增下列using語句: usingAndroid.Gms.Common; 此語句會使GoogleApiAvailabilityXamarin.GooglePlayServices.Base中的類別可供FCMClient程式代碼使用。

GoogleApiAvailability用來檢查GooglePlay服務是否存在。

新增XamarinFirebase傳訊套件 若要從FCM接收訊息,必須將XamarinFirebase-傳訊NuGet套件新增至應用程式專案。

如果沒有此套件,Android應用程式就無法從FCM伺服器接收訊息。

VisualStudio VisualStudioforMac 在[VisualStudio]中,以滑鼠右鍵按一下[參考>管理NuGet套件...]。

搜尋Xamarin.Firebase.Messaging。

將此套件安裝到FCMClient專案中: 在VisualStudioforMac中,以滑鼠右鍵按一下[套件>新增套件...]。

搜尋Xamarin.Firebase.Messaging。

將此套件安裝到FCMClient專案中: 當您安裝Xamarin.Firebase.Messaging時,也會安裝所有必要的相依性。

接下來,編輯MainActivity.cs並新增下列using語句: usingFirebase.Messaging; usingFirebase.Iid; usingAndroid.Util; 前兩個語句會讓Xamarin.Firebase.Messaging中的類型NuGet套件可供FCMClient程式碼使用。

Android.Util會新增記錄功能,以用來觀察FMS的交易。

新增GoogleServicesJSON檔案 下一個步驟是將google-services.json檔案新增至專案的根目錄: VisualStudio VisualStudioforMac 將google-services.json複製到專案資料夾。

將google-services.json新增至應用程式專案,(按一下[在方案總管中顯示所有檔案],以滑鼠右鍵按一下google-services.json,然後選取[包含在Project)]。

在[方案總管]視窗中選取google-services.json。

在[屬性]窗格中,將[建置動作]設定為GoogleServicesJson: 注意 如果未顯示GoogleServicesJson建置動作,請儲存並關閉解決方案,然後重新開啟它。

將google-services.json複製到專案資料夾。

將google-services.json新增至應用程式專案。

以滑鼠右鍵按一下google-services.json。

將[建置動作]設定為GoogleServicesJson: 將google-services.json新增至專案(且GoogleServicesJson建置動作設定為)時,建置程式會擷取用戶端識別碼和API金鑰,然後將這些認證新增至位於obj/Debug/android/AndroidManifest.xml的合併/產生的AndroidManifest.xml。

此合併程式會自動新增連線到FCM伺服器所需的任何許可權和其他FCM元素。

檢查GooglePlayServices並建立通知通道 Google建議Android應用程式先檢查GooglePlayServicesAPK是否存在,再存取GooglePlayServices功能(以取得詳細資訊,請參閱檢查GooglePlay服務)。

系統會先建立應用程式UI的初始版面配置。

編輯Resources/layout/Main.axml,並將其內容取代為下列XML: 這會TextView用來顯示指出是否已安裝GooglePlayServices的訊息。

將變更儲存至Main.axml。

編輯MainActivity.cs,並將下列執行個體變數新增至MainActivity類別: publicclassMainActivity:AppCompatActivity { staticreadonlystringTAG="MainActivity"; internalstaticreadonlystringCHANNEL_ID="my_notification_channel"; internalstaticreadonlyintNOTIFICATION_ID=100; TextViewmsgText; 變數CHANNEL_ID和NOTIFICATION_ID將會用於稍後在本逐步解說中新增至MainActivity的方法CreateNotificationChannel。

在下列範例中OnCreate,方法會在應用程式嘗試使用FCM服務之前,先確認可以使用GooglePlay服務。

將下列方法新增至MainActivity類別: publicboolIsPlayServicesAvailable() { intresultCode=GoogleApiAvailability.Instance.IsGooglePlayServicesAvailable(this); if(resultCode!=ConnectionResult.Success) { if(GoogleApiAvailability.Instance.IsUserResolvableError(resultCode)) msgText.Text=GoogleApiAvailability.Instance.GetErrorString(resultCode); else { msgText.Text="Thisdeviceisnotsupported"; Finish(); } returnfalse; } else { msgText.Text="GooglePlayServicesisavailable."; returntrue; } } 此程式碼會檢查裝置,以查看是否已安裝GooglePlay服務APK。

如果未安裝,則會在中TextBox顯示訊息,指示使用者從GooglePlayStore下載APK(,或在裝置的系統設定)中加以啟用。

在Android8.0(API層級26)或更高版本上執行的應用程式,必須建立通知通道來發佈其通知。

將下列方法新增至類別,MainActivity以視需要建立通知通道(): voidCreateNotificationChannel() { if(Build.VERSION.SdkInt(Resource.Id.msgText); IsPlayServicesAvailable(); CreateNotificationChannel(); } IsPlayServicesAvailable會在結尾OnCreate呼叫,以便在每次啟動應用程式時執行GooglePlay服務檢查。

系統會呼叫方法CreateNotificationChannel,以確保執行Android8或更高版本的裝置有通知通道存在。

如果您的應用程式有OnResume方法,則也應該從OnResume呼叫IsPlayServicesAvailable。

完全重建並執行應用程式。

如果全部都已正確設定,您應該會看到類似下列螢幕擷取畫面的畫面: 如果您沒有收到此結果,請確認您的裝置上已安裝GooglePlayServicesAPK(以取得詳細資訊,請參閱設定GooglePlayServices)。

此外,請確認您已將Xamarin.Google.Play.Services.Base套件新增至FCMClient專案,如先前所述。

新增實例識別碼接收者 下一個步驟是新增可擴充FirebaseInstanceIdService的服務,以處理Firebase註冊權杖的建立、輪替和更新。

FirebaseInstanceIdServiceFCM需要此服務才能將訊息傳送至裝置。

FirebaseInstanceIdService當服務新增至用戶端應用程式時,應用程式會自動接收FCM訊息,並在應用程式背景時顯示為通知。

在Android資訊清單中宣告接收者 編輯AndroidManifest.xml,並將下列元素插入區段中: 此XML會執行下列動作: 宣告實FirebaseInstanceIdReceiver作,這個實作會提供每個應用程式實例的唯一識別碼。

此接收者也會驗證和授權動作。

宣告用來安全地啟動服務的內部FirebaseInstanceIdInternalReceiver實作。

應用程式識別碼會儲存在新增至專案的google-services.json檔案中。

Xamarin.AndroidFirebase系結會將權杖${applicationId}取代為應用程式識別碼;用戶端應用程式不需要額外的程式碼才能提供應用程式識別碼。

是接收FirebaseInstanceIdWakefulBroadcastReceiver和FirebaseMessaging事件的,FirebaseInstanceIdReceiver並將其傳遞至衍生自FirebaseInstanceIdService的類別。

實作Firebase實例識別碼服務 向FCM註冊應用程式的工作是由您提供的自訂FirebaseInstanceIdService服務所處理。

FirebaseInstanceIdService執行下列步驟: 使用實例識別碼API來產生安全性權杖,以授權用戶端應用程式存取FCM和應用程式伺服器。

在傳回中,應用程式會從FCM傳回註冊權杖。

如果應用程式伺服器需要註冊權杖,請將註冊權杖轉送至應用程式伺服器。

新增名為MyFirebaseIIDService.cs的新檔案,並以下列程式碼取代其範本程式碼: usingSystem; usingAndroid.App; usingFirebase.Iid; usingAndroid.Util; namespaceFCMClient { [Service] [IntentFilter(new[]{"com.google.firebase.INSTANCE_ID_EVENT"})] publicclassMyFirebaseIIDService:FirebaseInstanceIdService { conststringTAG="MyFirebaseIIDService"; publicoverridevoidOnTokenRefresh() { varrefreshedToken=FirebaseInstanceId.Instance.Token; Log.Debug(TAG,"Refreshedtoken:"+refreshedToken); SendRegistrationToServer(refreshedToken); } voidSendRegistrationToServer(stringtoken) { //Addcustomimplementation,asneeded. } } } 此服務會實作OnTokenRefresh最初建立或變更註冊權杖時所叫用的方法。

執行時OnTokenRefresh,它會從FirebaseInstanceId.Instance.Token屬性擷取最新的權杖,(由FCM)非同步更新。

在此範例中,系統會記錄重新整理的權杖,以便在輸出視窗中檢視它: varrefreshedToken=FirebaseInstanceId.Instance.Token; Log.Debug(TAG,"Refreshedtoken:"+refreshedToken); OnTokenRefresh不常叫用:它會在下列情況下用來更新權杖: 安裝或卸載應用程式時。

當使用者刪除應用程式資料時。

當應用程式清除實例識別碼時。

當令牌的安全性遭到入侵時。

根據Google的實例識別碼檔,FCM實例識別碼服務會要求應用程式定期(定期重新整理其權杖,每6個月)一次。

OnTokenRefresh如果應用程式所維護的任何),也會呼叫SendRegistrationToAppServer以將使用者的註冊權杖與伺服器端帳戶產生關聯(: voidSendRegistrationToAppServer(stringtoken) { //Addcustomimplementationhereasneeded. } 由於此實作取決於應用程式伺服器的設計,因此在此範例中會提供空的方法主體。

如果您的應用程式伺服器需要FCM註冊資訊,請修改SendRegistrationToAppServer以將使用者的FCM實例識別碼權杖與應用程式所維護的任何伺服器端帳戶產生關聯。

(請注意,用戶端應用程式的權杖不透明。

) 當令牌傳送至應用程式伺服器時,SendRegistrationToAppServer應該維護布林值,以指出權杖是否已傳送至伺服器。

如果此布林值為false,SendRegistrationToAppServer請將權杖傳送至應用程式伺服器,否則權杖已在先前呼叫中傳送至應用程式伺服器。

在某些情況下,(例如此FCMClient範例),應用程式伺服器不需要權杖;因此,此範例不需要這個方法。

實作用戶端應用程式程式碼 既然已就緒接收者服務,就可以撰寫用戶端應用程式程式碼來利用這些服務。

在下列各節中,系統會將按鈕新增至UI,以記錄註冊權杖(也稱為實例識別碼權杖),並在從通知啟動應用程式時新增MainActivity更多程式碼來檢視Intent資訊: 記錄權杖 此步驟中新增的程式碼僅供示範之用–生產用戶端應用程式不需要記錄註冊權杖。

編輯Resources/layout/Main.axml,並在元素後面TextView立即新增下列Button宣告: 將下列程式碼新增至MainActivity.OnCreate方法的結尾: varlogTokenButton=FindViewById 此XML會將[訂閱通知]按鈕新增至版面配置。

編輯MainActivity.cs,並將下列程式碼新增至方法的OnCreate結尾: varsubscribeButton=FindViewById



請為這篇文章評分?