国行iphone第一次安装APP网络状况
国行手机第一次安装APP,会有请求网络权限的一个弹框出现,在这期间APP是没有任何网络连接的。
想必大部分APP的需求和这个逻辑有冲突。
先推荐一个链接:http://www.cocoachina.com/ios/20161125/18181.html
普通情况的解决方案还是蛮多的。
1.设置引导页
2.无数据情况在空白UI区域设置一个刷新按钮,
当然上述场景中如果有注册推送的情况,大多数注册推送都会在appdelegate入口里,这种写法下允许推送的弹框和允许使用网络的弹框出现的顺序没有一定。如果先出允许推送的弹框,用户点击允许,此时注册 deviceToken 是不能成功的。当然如果用户允许访问网络,第二次打开 app 时也会走一遍注册远程推送方法,此时就能注册成功了。当然第二次注册成功总还是一个不大不小的bug。
目前我的需求是第一次安装打开APP,要请求一个LaunchAD也就是弹屏广告,而且要确保是第一次打开,因为是一款儿童应用,只有第一次打开的情况大多数才是父母的操作。这个需求跟注册推送其实差不多~
解决方案:通过AFN监听网络状态,当监听到有网络连接的时候再进行请求LaunchAD
- (void)monitorNetState{ AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager]; [mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { switch (status) { case AFNetworkReachabilityStatusUnknown: break; case AFNetworkReachabilityStatusNotReachable: break; case AFNetworkReachabilityStatusReachableViaWiFi: [self getLaunchAdAgain]; break; case AFNetworkReachabilityStatusReachableViaWWAN: [self getLaunchAdAgain]; break; default: break; } }]; [mgr startMonitoring]; }
然后在getLaunchAdAgain方法中做一些判断防止重复请求就完美解决了
- (void)getLaunchAdAgain{ BOOL app_ready = [[NSUserDefaults standardUserDefaults] boolForKey:@"app_ready"]; if (self.hasGetLaunchAd||!app_ready) { return; } [self getLaunchAd]; }