2022年9月22日 星期四

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

 待補

【Xamarin】Firebase Cloud Messaging 推播API說明

此篇是講解如何使用API主動推播給APP的用戶

API總共有兩種呼叫方式

1.Server Key。
2.Service Account+ProjectID(SenderID)。

這兩種我們會推薦使用第二種方式去發送推播,因為未來可以針對服務帳號去切開各推播的連線方式。

先進入FCM的專案設定 =>雲端設定








點選管理服務帳戶,會看到服務帳號的內容。












選擇一個Admin的帳戶點入後,在點選密鑰頁籤內的[添加密鑰]=>[創建新密鑰]。







選擇JSON格式後,網頁會自動下載。

成功後就可以看到有一個密鑰產生。(下載檔案後面會用到)



程式部分用Winform當作範例,並安裝相關的Nuget套件。

只需安裝[FireBaseAdmin]即可。


Winform建立一個按鈕和三個文字框,並定義成下圖所示。


在表單初始化的地方加入FCM驗證那段(不用自行處理Oauth2,FirebaseAdmin會幫你實做這段)

  public Form1()
        {
            InitializeComponent();

            #region FCM驗證
            FirebaseApp.Create(new AppOptions()
            {
                Credential = GoogleCredential.FromFile("private_key.json")
            });
            #endregion
        }
p.s.目前範例使用檔案載入金鑰,也可使用JSON字串的方式帶入,如同下方範例
    #region FCM驗證
            FirebaseApp.Create(new AppOptions()
            {
                Credential = GoogleCredential.FromJson("JSON字串")
            }) ;
            #endregion

在按鈕的Click事件上寫下方程式(要注意定義的名稱)

private void btnSend_Click(object sender, EventArgs e)
        {
            string token = txtToken.Text;
            string notificationTitle = txtTitle.Text;
            string notificationBody = txtContent.Text;
            // See documentation on defining a message payload.
            var message = new FirebaseAdmin.Messaging.Message()
            {
                Data = new Dictionary<string, string>()
                {
                    { "myData", "1337" },
                },
                //Token = registrationToken,
                //Topic = "all",
                Notification = new Notification()
                {
                    Title = notificationTitle,
                    Body = notificationBody
                },

         //IOS 專用屬性

        Apns=new ApnsConfig(){

            Aps= new Aps

            { 

                //紅點數字通知,傳1代表固定顯示1。

                Badge=1

            }

        }

            };
            if (string.IsNullOrEmpty(token))
            {
                message.Topic = "all";
            }
            else
            {
                message.Token = token;
            }
            // Send a message to the device corresponding to the provided
            // registration token.
            string response = FirebaseMessaging.DefaultInstance.SendAsync(message).Result;
            // Response is a message ID string.
            Console.WriteLine("Successfully sent message: " + response);
        }

在專案根目錄下放入剛剛下載的密鑰(名稱改為private_key.json)。



開始偵錯專案,填入Token、主旨和內容,點選發送。



手機就可以看到推播訊息。












【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。 從其他網路文章可以看到這兩種在最新...