相信很多人已经知道,在国行iOS10上增加了网络权限的限制,首次启动应用就会弹出请求:「允许 XXX 使用数据?」,如下图,具体情况,请看这里

请求网络权限

问题描述

应用首次启动时由于网络权限限制,在没有允许前是不能访问网络的,这时应用就会出现网络请求失败页面,用户还需要手动刷新页面来请求数据。由于苹果没有提供方法来获得权限,所以目前大部分应用只有一些临时解决方案,但效果都不十分理想。比如:提示用户问题原因,或者增加引导页来提前触发请求权限。

解决方案

经过测试发现请求权限提示框选择后会触发UIApplicationDidBecomeActiveNotification通知,所以我们就可以利用此来进行一些特殊处理来实现比较好的用户体验。
首先在特定情况下添加通知:

1
2
3
if (/*iOS10 && 应用首次启动*/) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(activeNotification:) name:UIApplicationDidBecomeActiveNotification object:nil];
}

其次在触发通知进行处理:

1
2
3
4
5
6
7
8
9
10
- (void)activeNotification:(NSNotification *)notification
{
// 在没有加载数据时加载数据,否则移除通知
// 还可以进行次数判断,在触发一定次数通知后移除通知
if (!self.alreadyLoadData) {
[self loadData];
} else {
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil];
}
}

内容更新:2017-03-29

其实上面的方法有点绕远了,其实解决方案很简单,可以监听网络状态,网络连接时重新请求数据就可以了。