【uni-app】基于uni-app的ios离线打包,wifi物联网

背景:公司有款产品内置wifi模块,需要ios端提供接口供前端uni-app去调用。主要功能分为开启wifi关闭wifi、连接wifi。

重点:以下会涉及ios11以上的连接方法。(OC代码)

(1)ios11以下无连接指定的wifi的方法,只能考虑如何跳至wifi设置页面手动开启。

(2)ios11以上通过代码连接wifi后,暂无发现断开当前连接的wifi的方法,搜索了很多资料很少涉及ios断开wifi的方法,目前正在研究官方文档,以下只提供wifi连接方法。

1.ios11以上连接wifi的方法

(1)首先添加依赖库

(2) 配置一下权限

 (3)新建一个.m文件,放置以下代码,运行

/// 导入类
#import <NetworkExtension/NetworkExtension.h>
#import <SystemConfiguration/CaptiveNetwork.h>

//判断当前Wi-Fi是否开启
- (BOOL)isWiFiEnabled{

    NSCountedSet * cset = [NSCountedSet new];

    struct ifaddrs *interfaces;

    if( ! getifaddrs(&interfaces) ) {
        for( struct ifaddrs *interface = interfaces; interface; interface = interface->ifa_next)
        {
            if ( (interface->ifa_flags & IFF_UP) == IFF_UP ) {
                [cset addObject:[NSString stringWithUTF8String:interface->ifa_name]];
            }
        }
    }
    
    //判断当前版本
    if (@available(iOS 11.0, *)) {
        NSLog(@"iOS 11以上版本");
        //判断当前是否开启Wi-Fi
        if([cset countForObject:@"awdl0"] > 1 ? YES : NO){
            NSLog(@"true");
            //使用network extension框架去连接wifi
            return true;
        }else{
            //未开启wifi需要引导用户开启
            NSLog(@"false");
            return false;
        }
    } else {
        NSLog(@"当前不支持 iOS 11以下版本");
        return false;
    }
}

//连接wifi类方法
+ (void)linkWiFi:(NSString*) a :(NSString*) b{
    NSLog(@"linkWiFia:%@,linkWiFib:%@",a,b);
    
    NEHotspotConfiguration *hotspotConfig = [[NEHotspotConfiguration alloc]initWithSSID:a passphrase:b isWEP:NO];
    [[NEHotspotConfigurationManager sharedManager] applyConfiguration:hotspotConfig completionHandler:^(NSError * _Nullable error) {
        if (error && error.code != 13 && error.code != 7) {
            NSLog(@"加入失败");
        }else if(error.code ==7){
            NSLog(@"已取消");
        }else{
            NSLog(@"已连接");
        }
    }];
}

注:调用以上方法出现下图弹框是正常现象,因为要获取用户的授权才能连接目标wifi

小结:如果uni-app想调用ios的连接方法,可以参考uni-app调用OC代码块

续文:ios如果想实现断开当前wifi效果,可以查看一下官方-logoff方法

如果看完logoff方法会发现需要传参,参数是wifi列表里面的一个对象,如果想取得此对象又需要去官网各种申请,最后会发现想获得列表是需要去设置wifi页面刷新,兜了一圈,仅仅是想断开当前wifi而已,这样子处理的话没有太大意义了,所以这边采用的方案是前端弹出提示框让用户点击跳转前往wifi设置页面手动断开wifi,前端调取gotoSettings方法即可

//跳转至系统设置wifi页面
- (void)gotoSettings {
    NSString *urlString = @"App-Prefs:root=WIFI";
    NSURL *url = [NSURL URLWithString:urlString];
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        if (@available(iOS 10.0, *)) {
            [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
        } else {
            [[UIApplication sharedApplication] openURL:url];
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
uni-app是一款基于Vue.js开发的跨平台应用框架,可以用于快速开发同时支持多个平台的应用程序。uni-app提供了一种打包线app的方式,可以将应用程序打包成原生的安装包,使得应用可以在手机上离线运行。 要打包线app,首先需要在uni-app项目中进行相关配置。在项目的manifest.json文件中,可以设置app的名称、图标、启动页等信息。同时,还可以配置应用的权限、网络请求等。 接下来,需要选择目标平台进行打包uni-app支持多个平台,包括iOS、Android、H5、微信小程序等。根据不同的平台,可以选择相应的打包方式。 对于iOS平台,可以使用HBuilderX进行打包。在HBuilderX中,选择菜单栏的“发行”-“原生App-云打包”,然后按照提示进行相关配置,最后生成ipa文件即可。 对于Android平台,可以使用HBuilderX或者使用命令行进行打包。使用HBuilderX时,选择菜单栏的“发行”-“原生App-云打包”,然后按照提示进行相关配置,最后生成apk文件即可。使用命令行时,需要安装好Android SDK,并配置好环境变量,然后使用命令行工具执行相应的打包命令。 对于H5平台,可以直接将项目打包成一个静态网页,然后部署到服务器上即可。 对于微信小程序平台,可以使用HBuilderX进行打包。在HBuilderX中,选择菜单栏的“发行”-“小程序”,然后按照提示进行相关配置,最后生成小程序的代码即可。 总结一下,uni-app提供了多种打包线app的方式,可以根据不同的平台选择相应的打包方式进行配置和生成安装包。通过这些步骤,就可以将uni-app项目打包成离线app,使得应用可以在手机上离线运行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值