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

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

背景:公司有款产品内置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 
#import 

//判断当前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(@"已连接");
        }
    }];
}

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

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

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

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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/742573.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存