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

27 篇文章 0 订阅
15 篇文章 0 订阅

情况说明

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

分析

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

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

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

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

解决方案

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

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

#import <Foundation/Foundation.h>

@interface IWebRequestPermission : NSObject
 
#ifdef __cplusplus
extern "C" {
#endif
    BOOL IsConnectedToInternet();
    void TryRequestPermissionIfNeeded();
#ifdef __cplusplus
}
#endif
@end

#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()即可

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Unity 中,弹窗提示可以使用 Unity 提供的 UI 系统来实现。具体实现方法如下: 1. 创建 UI 元素 在 Unity 中,打开场景或者新建一个场景,然后在 Hierarchy 窗口中右键选择 UI -> Panel,创建一个 Panel 元素。然后在 Panel 中添加一个 Text 元素,用于显示提示信息。最后在 Panel 上添加一个 Button 元素,用于关闭提示框。 2. 添加脚本 创建一个新的 C# 脚本,将其命名为 MessageBox。在脚本中定义一个 public 方法 Show,该方法用于显示提示框。在 Show 方法中,设置提示框的可见性,并将提示信息显示在 Text 元素中。添加一个 private 方法 Hide,该方法用于隐藏提示框。 代码如下: ```csharp using UnityEngine; using UnityEngine.UI; public class MessageBox : MonoBehaviour { public Text messageText; public GameObject panel; public void Show(string message) { messageText.text = message; panel.SetActive(true); } private void Hide() { panel.SetActive(false); } public void OnCloseButtonClicked() { Hide(); } } ``` 3. 将脚本添加到 Panel 上 将 MessageBox 脚本添加到 Panel 上,然后将 Text 和 Button 元素分别拖拽到 MessageBox 脚本中的 messageText 和 panel 变量中。 4. 使用弹窗提示 在其他脚本中,使用以下代码来显示提示框: ```csharp public MessageBox messageBox; public void ShowMessageBox(string message) { messageBox.Show(message); } ``` 在 Unity 中,将需要显示提示框的脚本拖拽到 messageBox 变量中。 这样,当调用 ShowMessageBox 方法时,就会弹自定义的提示框。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iningwei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值