2022年9月22日 星期四

【Xamarin】Firebase Cloud Messaging 安卓-推播功能實作

Xamarin 開發推播功能時可以用Google的FCM(Firebase Cloud Messaging)來實現,下列列出安卓的實作流程。

首先先建立FCM專案(範例以Google個人用戶為主,Google企業用戶待後續研究)

輸入專案名稱


選擇是否加入Google Analytics(推薦選繼續,後續在說明Google分析的使用方式)

選擇Google Analytics帳戶(選擇預設即可)

新增專案後新增安卓應用程式


填入應用程式的套件名稱(自行定義,會設定至程式的套件名稱)



下載Google-service.json檔(須放置在安卓程式的專案根目錄)


如果在設定時沒下載到,在專案設定的下方也可以下載。



後續一直按繼續就成功了,再來就要設定程式的部分。



安卓要先設定其套件名稱,點選安卓專案->屬性->安卓資訊清單,填入剛剛新增FCM應用程式時的套件名稱



安卓專案安裝需要的Nuget套件

有幾個套件需要下載:
1.Xamarin.GooglePlaySercices.Base
2.Xamarin.Firebase.Messaging
3.Xamarin.Google.Dapper
4.Prisim (可以不安裝,只是一種設計模式來優化程式)

安裝時需要注意編譯的安卓版本,可以看MonoAndroid的版本去做下載,以下為範例程式的載Nuget截圖

將剛剛下載的google-services.json加入專案的根目錄

調整google-services.json的建置動作為GoogleServicesJson(如果沒看到可重開VS或是Rebulid看看)




在AndroidManifest.xml新增<reciver>

下面這段文字請放在<application>內。

<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" />
<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="${applicationId}" />
</intent-filter>
</receiver>

建立CustomFirebaseMessagingService服務

推播要有一個背景執行的Service,此Service需繼承FirebaseMessagingService,裡面有兩個需要覆寫的方法OnNewTokenOnMessageReceived

OnNewToken:得到新的Token時會觸發,通常是APP第一次開啟時。
OnMessageReceived:當有訊息傳入時觸發

CustomFirebaseMessagingService範例

 [Service]
    [IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
    public class CustomFirebaseMessagingService : FirebaseMessagingService
    {
        public readonly ILocalNotificationsService localNotificationsService;
        public CustomFirebaseMessagingService()
        {
            localNotificationsService = new LocalNotificationsService();
        }
        public override void OnNewToken(string token)
        {
            base.OnNewToken(token);
            Log.Debug("FMC_SERVICE", token);
        }
        public override void OnMessageReceived(RemoteMessage message)
        {
            var notification = message.GetNotification();
            localNotificationsService.ShowNotification(notification.Title, notification.Body, message.Data);
        }
    }

用FCM 介面試試看發送第一則訊息


選擇[Firebase通知訊息]



輸入通知標題和通知文字



如果知道Token可用上圖右側[傳送測試訊息]

輸入Token點選送出,會立即發送,不會經過Firebase審核時間。


如果不知道Token可直接依照Topic或是指定條件做群發。





排定時間選擇立即傳送



選用部分可不用填寫,直接點選審查,過一下子就可以看看手機上是有收到推播。









沒有留言:

張貼留言

【.Net Core】 EF Core + Web API 實作

 EF Core是Entity Framework在.Net Core使用的版本,功能幾乎相同,但具有輕巧、高擴充性以及高效能等優點,建議各位學習。 通常在.Net Core如果要用ORM的方式會有兩種選擇分別是EF Core以及Dapper。 從其他網路文章可以看到這兩種在最新...