使用AppCenter,我可以通过Xamarin Forms(仅限Android)应用向所有设备发送推送通知。
由于我的设备将要共享,因此我无法根据设备ID在AppCenter端过滤通知。
我需要根据当前登录到我的应用程序的用户来进行过滤。为此,我还通过推送通知发送了WorkerID,用作过滤器。
虽然我可以在应用程序处于前台状态时执行此过滤器,但是当应用程序在后台运行或不运行时它不起作用。(由于push事件在应用程序启动中,因此是正常行为)
protected override void OnStart()
{
// This should come before AppCenter.Start() is called
// Avoid duplicate event registration:
if (!AppCenter.Configured)
{
Push.PushNotificationReceived += (sender, e) =>
{
var title = e.Title;
var message = e.Message;
// If app is in background title and message are null
// App in foreground
if (!string.IsNullOrEmpty(title))
{
foreach (string key in e.CustomData.Keys)
{
if (e.CustomData[key] == Settings.WorkerID)
{
Current.MainPage.DisplayAlert(title, message, "OK");
}
}
}
};
}
// Handle when your app starts
AppCenter.Start("android=xxxxxxxxxxxxxxxxxx", typeof(Push));
}
有没有一种方法可以在应用程序处于后台时拦截和过滤推送通知,并在应用程序未运行时(因为尚未登录)阻止它们?
答案 0 :(得分:1)
要在发送推送通知时过滤用户,最好使用set user id:
AppCenter.SetUserId("your-user-id");
然后在appcenter.ms上转到Push
> Send notificaiton
。填写必填字段。
然后在second step中选择User list
而不是All registered devices
。然后输入用户ID,以逗号分隔。
答案 1 :(得分:1)
通过文档,您可以enable-or-disable-push-at-runtime,因此可以在使用时启用或禁用推送,例如,进入后台或回到前台,
protected override void OnSleep()
{
// Handle when your app sleeps
Push.SetEnabledAsync(false);
}
protected override void OnResume()
{
// Handle when your app resumes
Push.SetEnabledAsync(true);
}
您还可以在用户登录或注销时启用或禁用推送:
public void userLogin() {
Push.SetEnabledAsync(true);
}
public void userLoginOut() {
Push.SetEnabledAsync(false);
}
将其设置在正确的位置以满足您的要求。