天天看點

在Android應用程式中實作推送通知

幾乎每一個應用程式的一個重要特性是支援推送通知的能力。使用推送通知,您可以更新使用者,而不需要應用程式在任何時候運作或輪詢伺服器,

避免潛在的電池電量不足。

随着火力點雲資訊的介紹(FCM),谷歌使得在Android應用程式中實作推送通知變得容易了一點。FCM是谷歌雲消息(GCM)的新版本和改進版本,您可以使用它将遠端通知發送到客戶機應用程式。對于将瞄準多個平台或需要利用先進的推操作(如分段推送)的應用程式,我們可以使用帶有Azure通知集線器的FCM。

與GCM不同,FCM負責為您提供基本的消息傳遞管道。使用FCM,您不再需要編寫代碼來注冊應用程式,也不必包含重試邏輯來更新訂閱令牌。您可以通過以下操作向您的應用程式添加基本的FCM推送通知:

  1. 安裝Xamarin.Android NuGets包和一個證書檔案.
  2. 添加一對<service>  定義到你的ndroidManifest.xml.
  3. 寫幾行代碼把它們全部組合起來。

另外,不要編寫發送通知的測試程式,你可以使用新的基于Web的火力點控制台發送通知到你的應用程式測試。

今天,我們來看看如何使用Xamarin.Firebase.Messaging包來建構一個基于FCM消息通知功能到你的應用中

建立Firebase Cloud Messaging

在你可以在你的應用程式中使用FCM服務之前,你通過Firebase控制台建立一個Firebase項目。在你登入後,點選CREATE NEW PROJECT,輸入項目名,并點選 CREATE PROJECT:

下一步,點選Add Firebase to your Android app。 當出現提示時,輸入應用程式的包名并單擊“注冊應用程式”:

當你點選REGISTER APP,證書自動生成以便你的應用能夠通路FireBase伺服器。證書打包到一個名叫google-services.json的檔案中, 當你點選REGISTER APP 按鈕後證書自動下載下傳, 儲存好這個檔案,後續你會用到它。

向項目添加包

下一步,你需要添加兩個Xamarin NuGet包到你的應用中。啟動NuGet 包管理器(在Visual Studio中,在解決方案浏覽器右擊References并選擇Manage NuGet Packages), 浏覽 Xamarin.GooglePlayServices.Base,選擇它,并點選Install.

The Google Play Services package must be installed in order for FCM to work. Next, do the same for Xamarin.Firebase.Messaging:

将為這些包中的每一個安裝額外的依賴包。

此外,要確定您在你的Anroid裝置安裝并擁有 Google Play Services APK。Firebase消息使用Google Play 湧 APK和Firebase伺服器通信。

将谷歌服務JSON檔案添加到項目中

當你在Firebase控制台建立一個項目,你将下載下傳google-services.json 證書檔案,現在将它插入到你的應用中!

拷貝google-services.json項目檔案夾, 并将到添加到項目中(在Visual Studio中,你可以在浏覽器解決方案點選Show All Files 圖示,右擊google-services.json,接着選擇Include in Project)。

儲存變得并關閉解決方案。重新打開解決方案并為google-services.json設定建構行為為GoogleServicesJson (在Visual Studio,   Build Action 彈出菜單在Advanced 一節的Properties 頁):

現在 google-services.json是項目的一部分,Xamarin建構處理能擴充這個證書并将它合并到AndroidManifest.xml 檔案中。 Xamarin.Firebase.Messaging 使用這個證書來通路 Firebase服務。

添加執行個體ID接收器

你的客戶機應用程式必須先注冊FCM,然後才能收到推送通知。這是Xamarin.Firebase.Messaging接觸FCM方法,發送它的證書,并接收注冊令牌環傳回的消息。這個道理,這是定期更新,以創造一個安全的通道,Firebase伺服器。你也可以轉發此令牌您的應用伺服器,可以與Firebase服務。

你的應用必須實作FirebaseInstanceIdService來處理建立和更新資訊環。這實際上比聽起來簡單得多,接下來你會看到。

在Android清單中聲明執行個體ID接收器

編輯AndroidManifest.xml (在解決方案浏覽器中點選Properties ) 并在 <receiver> 元素之後 插入到<application>一節:

點選(此處)折疊或打開

  1. <receiver
  2.     android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver"
  3.     android:exported="false" />
  4.     android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
  5.     android:exported="true"
  6.     android:permission="com.google.android.c2dm.permission.SEND">
  7.     <intent-filter>
  8.         <action android:name="com.google.android.c2dm.intent.RECEIVE" />
  9.         <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
  10.         <category android:name="${applicationId}" />
  11.     </intent-filter>
  12. </receiver>

這将聲明用于管理注冊令牌的必要接收者。

增加網際網路的權限

如果你的權限清單沒有啟用 INTERNET 權限,在Properties > Android Manifest > Required 權限中啟用它:

實作Firebase Instance ID 服務

現在,是時候寫代碼了!添加一個新的CE檔案到你的項目中(在Visual Studio, 右擊項目名并選擇Add > New Item > Class)。給它取名為MyFirebaseIIDService.cs 并輸入如下代碼:

  1. using System;
  2. using Android.App;
  3. using Firebase.Iid;
  4. using Android.Util;
  5. namespace FCMExample
  6. {
  7.     [Service]
  8.     [IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })]
  9.     public class MyFirebaseIIDService : FirebaseInstanceIdService
  10.     {
  11.         const string TAG = "MyFirebaseIIDService";
  12.         public override void OnTokenRefresh()
  13.         {
  14.             var refreshedToken = FirebaseInstanceId.Instance.Token;
  15.             Log.Debug(TAG, "Refreshed token: " + refreshedToken);
  16.         }
  17.     }
  18. }

改變命名空間FCMExample為你應用的命名空間。

這就是它的全部!

當注冊的令牌建立或者改變時執行OnTokenRefresh方法。因為當更新時,令牌輸出日志到Output視窗,你就可以确認應用是否在運作。你将輸入令牌到Firebase控制台,當你想要改善一個測試通知到你的應用時。

現在您的應用程式具有足夠的功能來接收來自流媒體的背景通知,是時候進行測試了。在你建構應用之前,請確定應用包名比對你在Firebase控制台建立你的Firebase項目時輸入的包名。

重新建構你的應用,運作它,并觀察Output視窗,直到顯示令牌資訊。比如:

将此令牌複制到剪貼闆; 在下面的步驟中你将會粘貼到Firebase控制台。

發送消息

登入到 Firebase 控制台,選擇你的項目,點選Notifications,再點選SEND YOUR FIRST MESSAGE:

在Compose message 頁,在Message text中輸入消息。選擇Single device 作為目标,并将你IDE Output視窗拷貝的令牌資訊粘貼到注冊令牌框中:

在點選 SEND MESSAGE之前, 将應用切換到背景運作(你可以觸摸Android overview按鈕并點選home屏)。當你在Firebase控制台準備好時點選 SEND MESSAGE。當 Review message 對話框顯示時,點選SEND。通知圖示就會出現在Android裝置上:

打開通知檢視消息;通知消息應該正是你在Firebase控制台錄入的:

祝賀您,您剛剛發送并接收了第一個FCM推送通知!

了解更多