检测Xamarin表单中的网络更改

时间:2018-12-13 04:04:28

标签: xamarin xamarin.forms

我想检测用户何时在线或离线。

我正在使用CrossConnectivity软件包来检测连接性更改。

我必须连接到 VPN(确切地说是Sonic Wall),才能连接到我的服务器。

我的问题是这样的:当我连接到服务器时,我需要切换应用程序才能连接到服务器。当我切换回我的应用程序时,功能SyncFunction.SyncUser(host, database, contact, ipaddress, pingipaddress)未执行。连接更改功能不在我的App.xaml.cs上,而是在我的Main Menu Content page上,因为我需要在主菜单中而不是整个应用程序中执行同步功能。我该如何解决?

CrossConnectivity.Current.ConnectivityChanged += async (sender, args) =>
{
    var appdate = Preferences.Get("appdatetime", String.Empty, "private_prefs");

    if (string.IsNullOrEmpty(appdate))
    {
        Preferences.Set("appdatetime", DateTime.Now.ToString(), "private_prefs");
    }
    else
    {
        if (DateTime.Now >= DateTime.Parse(Preferences.Get("appdatetime", String.Empty, "private_prefs")))
        {
            Preferences.Set("appdatetime", DateTime.Now.ToString(), "private_prefs");

            if (CrossConnectivity.Current.IsConnected)
            {
                var ping = new Ping();
                var reply = ping.Send(new IPAddress(pingipaddress), 5000);

                if (reply.Status == IPStatus.Success)
                {
                    lblStatus.Text = "Syncing data to server";
                    lblStatus.BackgroundColor = Color.FromHex("#2bcbba");

                    await Task.Delay(5000);
                    SyncFunction.SyncUser(host, database, contact, ipaddress, pingipaddress);
                    lblStatus.Text = "Online - Connected to server";
                    lblStatus.BackgroundColor = Color.FromHex("#2ecc71");
                }
                else
                {
                    lblStatus.Text = "Online - Server unreachable. Connect to VPN";
                    lblStatus.BackgroundColor = Color.FromHex("#e67e22");
                }
            }
            else
            {
                lblStatus.Text = "Offline - Connect to internet";
                lblStatus.BackgroundColor = Color.FromHex("#e74c3c");
            }
        }
        else
        {
            await DisplayAlert("Application Error", "It appears you change the time/date of your phone. Please restore the correct time/date", "Got it");
            await Navigation.PopToRootAsync();
        }
    }

};

1 个答案:

答案 0 :(得分:0)

检测整个VPN的连接更改并不容易。

一种解决方法是将Web服务用作ping。 如果您有使用API​​的后端,则可以定期执行此“ ping”操作,以确保可以访问网络和API。

除了连接检查之外,还将使用此解决方案

  1. 订阅连接已更改
  2. 当连接正常时,请检查“ ping服务”

通常在mob应用程序中,此“ ping端点”可能类似于“ / about”。 此外,可以使用此特定服务来执行App Mob版本和API版本之间的兼容性版本检查。

(另请参阅Xamarin.Essentials,以Xamarin.Essentials:Connectivity,https://docs.microsoft.com/fr-fr/xamarin/essentials/connectivity?context=xamarin%2Fxamarin-forms&tabs=android代替CrossConnectivity)