Wifi环境下Unity开发iOS应用启动后HTTPS请求未弹出是否允许无线数据使用数据的弹窗

情况说明

笔者项目在首次启动,登录界面点击登录按钮会先HTTPS请求创建帐号,但是在WIFI网络下,请求后一直提示网络连接失败。但是切换到流量包后,则会弹出"无线数据"使用数据的弹窗,选择允许后则可顺利进入。

分析

错误原因就是在WIFI环境下HTTPS请求未能弹出权限界面,导致当前无线数据的权限是关闭的,而使用流量时又可以内部触发弹出权限选择界面。

具体的原因网上说法也很多,比如:

  • WIFI设置了代理,流量未设置代理。导致WIFI环境下的HTTPS请求被拦截,未能弹出选择窗口。
  • Info.list下未配置NSAllowsArbitraryLoads权限为true

上述笔者这边都排除了,但是有个可能是笔者这边HTTPS请求是使用的是一个比较老的稳定性挺好,且用于多个线上项目的Best HTTP插件,有可能是Unity升级后插件适配的问题?

解决方案

一般而言App首次启动,网络请求时都会弹出是否允许使用数据的弹窗。但是这种坑就遇到了,又不想换Best HTTP插件。

遂写了个iOS插件,在进入登录界面时模拟一次网络请求。代码如下:

c 复制代码
#import <Foundation/Foundation.h>

@interface IWebRequestPermission : NSObject
 
#ifdef __cplusplus
extern "C" {
#endif
    BOOL IsConnectedToInternet();
    void TryRequestPermissionIfNeeded();
#ifdef __cplusplus
}
#endif
@end
c 复制代码
#import "WebRequestPermission.h"
// 引入 SystemConfiguration.framework
#import <SystemConfiguration/SystemConfiguration.h>

@implementation IWebRequestPermission
// 检查当前网络连接状态
BOOL IsConnectedToInternet() {
    BOOL isConnected = NO;
    SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, "www.baidu.com");
    SCNetworkReachabilityFlags flags;
    if (SCNetworkReachabilityGetFlags(reachability, &flags)) {
        isConnected = ((flags & kSCNetworkReachabilityFlagsReachable) != 0);
    }
    CFRelease(reachability);
    return isConnected;
}

// 在应用启动时尝试发起一个简单的网络请求
void TryRequestPermissionIfNeeded() {
    if (IsConnectedToInternet()) {
        NSURL *url = [NSURL URLWithString:@"https://www.baidu.com"];
        NSURLSessionDataTask *dataTask = [[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
            // 处理网络请求的结果
        }];
        [dataTask resume];
    }
}
@end

在进入登录界面时Unity侧调用TryRequestPermissionIfNeeded()即可

相关推荐
MDM.Plus6 小时前
苹果MDM技术演进:从远程控制到设备信任体系的构建
运维·服务器·安全·ios·mdm·手机店
郝学胜-神的一滴7 小时前
中级OpenGL教程 013:渲染器类架构设计与逐帧渲染流程详解
开发语言·c++·unity·游戏引擎·图形渲染·opengl·unreal
韩曙亮7 小时前
【Flutter】Flutter 进程保活 ③ ( 屏幕常亮设置 | Flutter 禁止息屏、关闭自动锁屏、屏蔽系统屏保 )
android·flutter·ios·屏幕常亮·禁止息屏
2501_9159090610 小时前
IPA 深度混淆是什么意思?从混淆强度到实际效果的解读
android·ios·小程序·https·uni-app·iphone·webview
_helen_52012 小时前
unreal engine 虚拟现实 + airsim
游戏引擎·vr·虚幻
apihz13 小时前
经纬度制作高清卫星图片免费 API 接口详解
开发语言·ios·swift
黄林晴13 小时前
KMP 正式支持 SwiftPM:CocoaPods 迁移配置指南
android·ios·kotlin
Tisfy1 天前
iOS:压缩和解压live图(.livp)——百度一刻相册+百度网盘识别支持
ios·百度网盘·livp·live图·一刻相册
唐诺1 天前
Objective-C 之 KVC 详解
ios·objective-c·kvc
00后程序员张2 天前
iOS 打包方式汇总 从 Xcode Archive 到轻量级工具链的 IPA 构建
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程