对于Xamarin Android,我无法处理点击事件的后台通知

时间:2017-05-08 20:36:55

标签: android xamarin background notifications

我尝试使用Xamarin表单创建应用,可以在Android上接收前景和背景通知。对于前景,它工作正常。我创建firebase服务来处理前台通知。但是,我找不到让背景通知工作的方法。

首先,我尝试更新清单以支持此事件。 enter image description here

其次,我在splashactivity中添加了一些代码来处理后台通知。 enter image description here

接下来,我使用以下PHP代码向Firebase服务器发送通知。enter image description here

在我的设备上,我可以看到上述通知。enter image description here

点按通知即可打开我的应用。然而,没有任何事情发生,设备日志也没有让我知道发生了什么。

enter image description here

我的代码中是否有任何错误?

谢谢,

1 个答案:

答案 0 :(得分:1)

取自Firebase文档:

  

处理背景应用中的通知消息   当您的应用在后台时,Android会将通知消息定向到系统托盘。用户点按通知会默认打开应用启动器。这包括包含通知和数据有效负载的消息(以及从Notifications控制台发送的所有消息)。在这些情况下,通知将传递到设备的系统托盘,并且数据有效负载将在启动器活动的附加内容中传递。

我能够通过向FCM有效负载发送自定义数据然后在MainActivity OnCreate()方法中解决此问题:

var someValue = Intent.GetStringExtra("YourKey");
// if result not null then handle how you like...

在我的情况下,我想将用户重定向到通知所针对的视图。

更新

还有一种方法可以解决这个问题。

覆盖OnMessageReceived方法......

[Service]
[IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
public class MyFirebaseMessagingService : FirebaseMessagingService
{
    public override void OnMessageReceived(RemoteMessage message)
    {
        SendNotification(message?.Data);
    }

    void SendNotification(IDictionary<string, string> data)
    {
        // handle your data that got passed
    }
}

而不是在你的例子中这样做:

{
    "noticiation" : {
        "title" : "Test 456",
        "text" : "Otra 123123"
    }
}

改为传递数据:

{
    "data" : {
        "title" : "Test 456",
        "text" : "Otra 123123"
    }
}

现在,当您的应用位于前景的背景中时,将同时调用OnMessageReceived。

请注意,此方法意味着您无法使用Firebase中的控制台发送消息,因为据我所知,它在有效负载中包含“通知”。