根据当前登录的用户过滤AppCenter推送通知

时间:2019-06-24 10:04:45

标签: android xamarin.forms push-notification visual-studio-app-center

使用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));
}

有没有一种方法可以在应用程序处于后台时拦截和过滤推送通知,并在应用程序未运行时(因为尚未登录)阻止它们?

2 个答案:

答案 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);
}

将其设置在正确的位置以满足您的要求。