Xamarin.Forms - различение фоновых и передних push-уведомлений App Center - PullRequest
0 голосов
/ 27 декабря 2018

Мы используем push-уведомления App Center и в соответствии со следующей статьей https://docs.microsoft.com/en-us/appcenter/sdk/push/xamarin-forms, push-уведомления могут обрабатываться в App.xaml.cs с использованием Push.PushNotificationReceived.

Это на самом делеработающий банкомат, и метод фактически запускается как для фонового, так и для переднего плана уведомлений.

Нам нужно уметь их различать.Мы перемещаем пользователя к определенной части приложения всякий раз, когда он нажимает на уведомление (фон), и мы не можем сделать то же самое, если приложение уже открыто (передний план).

Я видел несколько способоввыполнения этого, но все они были специфичны для платформы (в данном случае iOS).Есть ли способ сделать то же самое в PCL?

1 Ответ

0 голосов
/ 28 декабря 2018

Я думаю, что Xamarin Forms не дает нам API для получения состояния приложения.

Этого можно добиться, используя DependencyService в Xamarin.Forms:

Сначала определитеИнтерфейс в вашем проекте PCL:

public interface IGetAppState
{
    bool appIsInBackground();
}

В iOS:

[assembly: Dependency(typeof(GETAppState_iOS))]

namespace App129.iOS
{
    public class GETAppState_iOS : IGetAppState
    {
        public bool appIsInBackground()
        {
            UIApplicationState state = UIApplication.SharedApplication.ApplicationState;
            bool result = (state == UIApplicationState.Background);

            return result;
        }
    }
}

В Android:

[assembly: Dependency(typeof(GETAppState_Android))]

namespace App129.Droid
{
    public class GETAppState_Android : IGetAppState
    {
        public bool appIsInBackground()
        {
            bool isInBackground;

            RunningAppProcessInfo myProcess = new RunningAppProcessInfo();
            GetMyMemoryState(myProcess);
            isInBackground = myProcess.Importance != Importance.Foreground;

            return isInBackground;
        }
    }
}

В любом месте, где вы хотите знать, находится ли ваше приложение в фоновом или переднем плане, вы можете использовать:

bool isInBackground = DependencyService.Get<IGetAppState>().appIsInBackground();
...