【问题标题】:Xamarin.iOS app asking Local Network permission in iOS 14.0Xamarin.iOS 应用在 iOS 14.0 中询问本地网络权限
【发布时间】:2020-09-29 12:29:24
【问题描述】:

我有 Xamarin.iOS 应用程序正在生产中,它在 iOS 14 设备上启动时询问本地网络权限。应用程序未使用任何 Bonjour 服务,也未使用任何特定于本地网络的内容。应用有各种 nuget 包,包括 Xamarin.Essentials、MvvmCross、Firebase 服务、Realm DB 等。

我浏览了 developer.apple.com 上的各种开放线程,包括 WWDC2020 video,但仍然没有得到触发此权限对话框的原因。

【问题讨论】:

    标签: ios xamarin xamarin.ios ios14 ios-permissions


    【解决方案1】:

    经过多次尝试和错误,我们终于能够确定本地网络权限触发点。

    • 这个提示是由于我们的SSHConnection检查方法触发的 用于识别越狱的 iPhone 设备。
    • 此方法检查 SSH 客户端是否尝试在端口 22 上连接 127.0.0.1(localhost) 如果连接成功,则设备越狱。
    • 此代码导致权限提示CrossConnectivity.Current.IsRemoteReachable("127.0.0.1", 22, 5000);

    【讨论】:

    • 此代码仅在设备连接到 WiFi 时显示 LAN 权限对话框。我认为 CrossConnectivity 插件在没有连接时不会发送请求。
    【解决方案2】:

    所以我的应用程序使用套接字通信,并且在应用程序第一次创建连接时,系统会向用户提示此权限提示。不幸的是,这导致我第一次尝试套接字通信失败。为了解决这个问题,我在应用程序生命周期的最开始添加了以下代码。 (我有一个配置页面,它总是在应用程序第一次启动时显示,所以我在那里添加了它。)然后这段代码强制权限提示。我注意到的一件事是,如果我在强制提示时没有使用相同的 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);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2021-05-03
      • 2018-11-23
      • 2022-09-30
      • 2021-05-22
      • 2021-01-13
      • 2021-01-12
      • 2017-05-05
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多