Xamarin.Forms-区分背景和前台App Center推送通知

时间:2018-12-27 16:26:55

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

我们正在使用App Center推送通知,根据下面的文章https://docs.microsoft.com/en-us/appcenter/sdk/push/xamarin-forms,可以通过使用Push.PushNotificationReceived在App.xaml.cs中处理推送通知。

这实际上是在运行的ATM,并且实际上是为后台和前台通知触发的方法。

我们需要能够区分它们。每当用户点击通知时,我们都会将其导航到应用程序的特定部分(背景),如果已打开应用程序(前景),我们将无法进行同样的操作。

我已经看到了一些实现方法,但是它们都是特定于平台(在这种情况下为iOS)的。有没有办法在PCL中做同样的事情?

1 个答案:

答案 0 :(得分:1)

我认为Xamarin Forms并没有为我们提供获取应用程序状态的API。

您可以通过在Xamarin.Forms中使用DependencyService来实现:

首先在您的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();