iOS 10之后首次安装App只要请求网络都会有这个提示。
![](https://img.haomeiwen.com/i2416132/d975b8ddac114156.png)
由于uni-app首页是动态化的,通过接口请求返回数据布局,如果停留几秒在点击无线局域网与蜂窝网络后,但是由于没有授权,所以接口无数据返回。所以出现了白屏。期初以为是uni的锅,后来调研后发现是iOS之后所有App都有这样的问题。
Android
Android首次网络请求,点击允许后才会往后面执行,所以Android并没有这个问。
iOS
ios 没有任何操作也会往后面执行,所以在没有授权网络的情况下是没有数据返回的。那么就针对iOS容错处理。
容错处理方式1
首次iOS写一个原生插件给uni
#import <CoreTelephony/CTCellularData.h>
//获取网络权限
- (void)checkNetworkPermissions{
CTCellularData *cellularData = [[CTCellularData alloc] init];
// 状态发生变化时调用
cellularData.cellularDataRestrictionDidUpdateNotifier = ^(CTCellularDataRestrictedState restrictedState) {
switch (restrictedState) {
case kCTCellularDataRestrictedStateUnknown:
NSLog(@"蜂窝移动网络状态:未知");
break;
case kCTCellularDataRestricted:
NSLog(@"蜂窝移动网络状态:关闭");
break;
case kCTCellularDataNotRestricted:
NSLog(@"蜂窝移动网络状态:开启");
break;
default:
break;
}
};
}
uni端轮询来获取权限,如果获取网络权限为开启的状态那么就网络请求刷新页面。如果轮询假设5次之后还是没有权限,此时可能用户点击了不允许。所以轮询5次后还是没有权限就提示用户进行网络设置,这些就iOS提供原生插件给uni调用就可以了。
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{} completionHandler:^(BOOL success) {
}];
容错处理方式2
进入首页什么都不做,只要网络请求没有数据返回就显示无网络的式样,加一个按钮,让用户自己做刷新操作。操作的时候在判断权限,如果用户能点击按钮。那说明要么用户允许网络了。要么用户点击不允许。所以 此时在判断一下网络权限。如果有权限请求刷新。没有权限提示做设置。
网友评论