使用Firebase 雲端傳訊進行遠端通知- Xamarin - Microsoft Learn
文章推薦指數: 80 %
本逐步解說提供如何使用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:
將變更儲存至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
系統會呼叫方法CreateNotificationChannel,以確保執行Android8或更高版本的裝置有通知通道存在。
如果您的應用程式有OnResume方法,則也應該從OnResume呼叫IsPlayServicesAvailable。
完全重建並執行應用程式。
如果全部都已正確設定,您應該會看到類似下列螢幕擷取畫面的畫面:
如果您沒有收到此結果,請確認您的裝置上已安裝GooglePlayServicesAPK(以取得詳細資訊,請參閱設定GooglePlayServices)。
此外,請確認您已將Xamarin.Google.Play.Services.Base套件新增至FCMClient專案,如先前所述。
新增實例識別碼接收者
下一個步驟是新增可擴充FirebaseInstanceIdService的服務,以處理Firebase註冊權杖的建立、輪替和更新。
FirebaseInstanceIdServiceFCM需要此服務才能將訊息傳送至裝置。
FirebaseInstanceIdService當服務新增至用戶端應用程式時,應用程式會自動接收FCM訊息,並在應用程式背景時顯示為通知。
在Android資訊清單中宣告接收者
編輯AndroidManifest.xml,並將下列
此接收者也會驗證和授權動作。
宣告用來安全地啟動服務的內部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
延伸文章資訊
- 1Firebase 推播服務(Firebase Cloud Messaging FCM)
... 併購Firebase 後所發表的服務之一,而早期Google 的自有的推播服務則叫做Google Cloud Messaging(GCM),相對於GCM 而FCM 最大的進步是能在網頁上...
- 2Push Notification教學:如何使用Firebase在iOS實現推播功能
在此教學中,我們會了解如何應用Firebase推播通知,懂得如何一步一步在Xcode介面實現,此份教學將會分成7大部份來說明。 設定Apple Developer Account ...
- 3FireBase FireBase推播應用介紹- appxtech - Medium
(1) 通知(Notification) :當APP處於背景FireBase會直接進行處理傳送,當APP處於前景時需調用onMessageReceived()才會收的到通知。 (2) 數據(Da...
- 4通知- Firebase說明
撰寫訊息 · 在通知編輯器中,選取[Messages] 標籤。 · 選取[New Message]。 · 輸入訊息文字,也可以選填訊息標籤。 · 選取傳送日期:[Now] 或[Scheduled...
- 5在Android 应用中接收消息 | Firebase Cloud Messaging
根据接收消息的应用的状态(前台/后台),Firebase 通知的行为会有所不同。如果您希望前台应用接收通知消息或数据消息,则需要编写代码来处理 onMessageReceived 回调 ...