iOS 10 - 某些iOS设备中不显示WLAN访问设置

fin*_*tic 5 ios ios10

我们的应用程序使用WLAN与无线设备通信.当我们的应用程序安装在iOS 10中时.有时,udp套接字不起作用.原因是,在iOS 10中,他们在您的应用程序下添加了一个新设置或权限,允许用户打开或关闭WLAN或蜂窝数据的用户.

以下内容将出现在应用程序的设置中:

在此输入图像描述

当我点击无线...它将带我到这个UI:

在此输入图像描述

允许WLAN使用后.该应用程序将正常工作.

现在,问题是,有时,或者在运行iOS 10的某些设备中,我刚刚显示的设置没有出现(我指的是第一张图片上显示的设置).那么,我有什么办法可以让这些设置始终出现吗?似乎有时iOS系统无法识别我的应用程序正在使用无线数据.这将导致我的应用程序永远不会永远使用WLAN.

fin*_*tic 0

经过一段时间的研究。我最终寻求 Apple 代码级支持的帮助。苹果表示,当您重新设计应用程序时,很可能会出现此问题。他们说这可能是因为主应用程序和重新设计的应用程序的图像 UUID 是相同的。当您在手机中安装这两个应用程序时,系统会将重新设计的应用程序视为与主应用程序相同的应用程序。因此,如果一个应用程序无法访问 WLAN,那么它也会影响另一个应用程序。据他们称,这似乎是iOS 中的一个错误。目前,他们还没有为开发人员提供任何解决方案。这是雷达错误编号:

为了以某种方式减少问题的发生,我所做的就是使用以下代码添加对网络限制的跟踪。

- (void)startCheckingNetworkRestriction
{
    __weak AppDelegate *weakSelf = self;

    _monitor = [[CTCellularData alloc] init];

    _monitor.cellularDataRestrictionDidUpdateNotifier = ^(CTCellularDataRestrictedState state)
    {
        [[NSOperationQueue mainQueue] addOperationWithBlock:^
         {
             NSString *  statusStr;

             switch(state)
             {
                 case kCTCellularDataRestrictedStateUnknown:
                 {
                     statusStr = @"restriction status:Unknown";
                 }
                     break;

                 case kCTCellularDataRestricted:
                 {
                     statusStr = @"restriction status:restricted";

                     [weakSelf performUrlSession];
                 }
                     break;

                 case kCTCellularDataNotRestricted:
                 {
                     statusStr = @"restriction status:not restricted";
                 }
                     break;

                 default:
                 {
                     abort();
                 }
                     break;
             }

             NSLog(@"Restriction state: %@", statusStr);
         }];
    };
}
Run Code Online (Sandbox Code Playgroud)

请注意,您必须导入 CoreTelephony 才能执行此操作。

@import CoreTelephony;
Run Code Online (Sandbox Code Playgroud)

当我检测到网络受到限制时。我将打开一个 URL 会话来强制尝试访问互联网,并希望弹出限制警报对话框。一旦弹出警报,那么我所说的WLAN访问设置肯定会出现在设置下方。有时这不起作用。如果发生这种情况,那么您只需重命名捆绑包 ID,并对代码进行一些更改,然后重建它几次(嗯,这就是我在试验时所做的)。重新安装应用程序不会有任何作用。重新启动和重置手机也不起作用。

希望这可以帮助。