[英]Xamarin.iOS app asking Local Network permission in iOS 14.0
我在生產中使用 Xamarin.iOS 應用程序,它要求在 iOS 14 設備上啟動時獲得本地網絡許可。 應用程序未使用任何 Bonjour 服務,也未使用任何特定於本地網絡的內容。 應用程序有各種 nuget 包,包括 Xamarin.Essentials、MvvmCross、Firebase 服務、Realm DB 等。
我瀏覽了 developer.apple.com 上的各種開放線程,包括WWDC2020 視頻,但仍然沒有得到觸發此權限對話框的原因。
經過多次嘗試和錯誤,我們終於能夠識別本地網絡權限觸發點。
CrossConnectivity.Current.IsRemoteReachable("127.0.0.1", 22, 5000);
所以我的應用程序使用套接字通信,並且應用程序第一次創建連接時,用戶會收到此權限提示。 不幸的是,這導致我第一次嘗試套接字通信失敗。 為了解決這個問題,我在應用程序生命周期的最開始添加了以下代碼。 (我有一個配置頁面,它總是在應用程序第一次啟動時顯示,所以我在那里添加了它。)此代碼然后強制權限提示。 我注意到的一件事是,如果我在強制提示時沒有使用相同的 ipaddress/端口,因為我稍后將使用它來建立我的套接字連接,我第二次被提示輸入權限。 (我使用的是 IP 地址 192.0.0.1 和端口 20。)這很令人沮喪。 我似乎也找不到檢查此權限的方法
無論如何,這里有一些簡單的代碼可以在您的應用程序中更早地強制提示,以防止您實際嘗試連接時出現通信問題。
public async static void ForcePermissions(string ps_IPAddress, int pi_Port)
{
try
{
IPAddress ipAddress = IPAddress.Parse(ps_IPAddress);
//This is only done to force the local network permissions access in iOS 14.
IPEndPoint remoteEndPoint = new IPEndPoint(ipAddress, pi_Port);
// Create a TCP/IP socket.
var client = new Socket(ipAddress.AddressFamily,
SocketType.Stream, ProtocolType.Tcp);
var lb_ReturnValue = await client.ConnectAsync(remoteEndPoint).ConfigureAwait(false);
}
catch (Exception ex)
{
App.ProcessException(ex);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.