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 >
