APP发布后,部分用户反馈手机可以连上WiFi,但是APP通信不上,有的手机甚至在设置界面就找不到APP,证书中加入了网络和WiFi服务,工程TARGETS 的 Capabilities中的Network Extension 和wireless a'ccessory configuration 都打开了,但是还是有这个问题。我以为每个APP应该是在首次安装的时候都会提示“是否允许连接无线数据”,到现在我才发现这真的只是我以为。。。我的APP有好多在不同的iPhone上首次运行并没有提示“是否允许连接无线数据”。
出现这个问题,还有一个隐藏的因素,就是我的APP连接的WiFi不能上网,只能用来与控制卡发送和接收数据。
又一次 拿来一台有问题的iPhone测试,发现把WiFi断开,这个时候连接的是4G,再去打开其他软件,再回到APP,就出现提示“是否允许连接无线数据”,然后我去下载了其他的软件,发现一个问题,就是有的在首次打开时候就用到网络的,肯定会提示,有这个提示的话,到设置界面也就显示了APP这个情况就感觉有点思路了。。。就是在程序入口的时候检测一下网络权限,因为有的iPhone会在程序第一次运行的时候直接提示“是否允许使用无线数据”,但是有的还不会提示。没有联网权限的时候使用一下网络,这个时候可能就会有这个提示了。
解决办法:我在入口类里面先去检测APP是否有网络权限,检测到有问题的iPhone确实是没有联网权限,然后在在没有联网权限的时候去使用(连接)一下网络,这样就解决了APP不会提示“是否允许连接无线数据”的问题。
代码部分
1,检测联网权限
首先要导入 @import CoreTelephony;
- (void)checkNetwork{
CTCellularData *cellularData = [[CTCellularData alloc]init];
cellularData.cellularDataRestrictionDidUpdateNotifier = ^(CTCellularDataRestrictedState state){
BOOL _isRestricted = YES;
//获取联网状态
switch (state) {
case kCTCellularDataRestricted:
NSLog(@"Restricted"); //拒绝
break;
case kCTCellularDataNotRestricted:
_isRestricted = NO;
NSLog(@"Not Restricted"); //允许
break;
case kCTCellularDataRestrictedStateUnknown:
NSLog(@"Unknown"); //未知
break;
default:
break;
};
if (_isRestricted == YES) {
[self requestNetwork];
}
};
}
2,假设在程序没有联网权限的时候,去(使用网络)连接一下百度
- (void)requestNetwork{
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
}];
}