[料理佳餚] Xamarin.Forms 透過 Firebase Cloud Messaging(FCM)的 click_action 使輕按推播通知後執行指定的程式碼

Firebase Clound Messaging(FCM)的 Notification Payload 裡面有一個 click_action,顧名思義就是當推播訊息被使用者點擊之後,App 跟隨著要做什麼樣的反應動作,最常見的就是 App 依據 click_action 跳至與通知相關的頁面,我們就來看看如何透過 click_action 來控制顯示不同頁面。

我額外建立兩個 Page:Page1、Page2,當收到的 click_action 為 page1 時就跳至 Page1,page2 就跳至 Page2。

Android

Android 要處理 click_action 需要透過 IntentFilter,透過標記 Intent 的方式來取得 click_action 值,我們在 MainActivity 上添加 IntentFilter。

之後我們可以透過 this.Intent.Action 取得 click_action 的值,我在這邊建立了一個 AndroidClickActionValue 類別用來存取 click_action 的值,另一種做法是透過 MessagingCenter 來傳遞 click_action 的值,這部分可以參考相關文章

internal class AndroidClickActionValue : IClickActionValue
{
    public static readonly AndroidClickActionValue Instance = new AndroidClickActionValue();
    private readonly object lockedObject = new object();
    private string value;

    private AndroidClickActionValue()
    {
    }

    public void Set(string value)
    {
        this.value = value;
    }

    public string Get()
    {
        lock (this.lockedObject)
        {
            var clickAction = this.value;
            this.value = default(string);

            return clickAction;
        }
    }

    public string Peek()
    {
        return this.value;
    }
}

然後我們在 App.xaml.cs 中的 OnStart 方法裡面加入判斷邏輯

我們來看執行效果

iOS

iOS 的話,要在 AppDelegate.cs 中 override ReceivedRemoteNotification 方法,在裡面我們就可以取得我們要的 click_action 值。

接著我們在 App.xaml.cs 中的 OnResume 方法裡面加入判斷邏輯

以下是執行結果

參考資料

 < Source Code >

C# 指南ASP.NET 教學ASP.NET MVC 指引
Azure SQL Database 教學SQL Server 教學Xamarin.Forms 教學