Xamarin.Forms - различение фоновых и передних push-уведомлений App Center
Мы используем push-уведомления App Center и в соответствии со следующей статьей https://docs.microsoft.com/en-us/appcenter/sdk/push/xamarin-forms push-уведомления могут обрабатываться в App.xaml.cs с помощью использование Push.PushNotificationReceived.
Это фактически работающий банкомат, и этот метод фактически запускается как для фонового, так и для переднего плана уведомлений.
Нам нужно уметь их различать. Мы перемещаем пользователя к определенной части приложения всякий раз, когда он нажимает на уведомление (фон), и мы не можем сделать то же самое, если приложение уже открыто (на переднем плане).
Я видел несколько способов сделать это, но все они были специфичны для платформы (в данном случае iOS). Есть ли способ сделать то же самое в PCL?
1 ответ
Я думаю, что 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();