我们的应用程序使用WLAN与无线设备通信.当我们的应用程序安装在iOS 10中时.有时,udp套接字不起作用.原因是,在iOS 10中,他们在您的应用程序下添加了一个新设置或权限,允许用户打开或关闭WLAN或蜂窝数据的用户.
以下内容将出现在应用程序的设置中:
当我点击无线...它将带我到这个UI:
允许WLAN使用后.该应用程序将正常工作.
现在,问题是,有时,或者在运行iOS 10的某些设备中,我刚刚显示的设置没有出现(我指的是第一张图片上显示的设置).那么,我有什么办法可以让这些设置始终出现吗?似乎有时iOS系统无法识别我的应用程序正在使用无线数据.这将导致我的应用程序永远不会永远使用WLAN.
经过一段时间的研究。我最终寻求 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,并对代码进行一些更改,然后重建它几次(嗯,这就是我在试验时所做的)。重新安装应用程序不会有任何作用。重新启动和重置手机也不起作用。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
1028 次 |
| 最近记录: |