uni-app 自定义ios插件获取WiFi ssid并且云打包时ssid为空
uni-app 自定义ios插件获取WiFi ssid并且云打包时ssid为空
操作步骤:
- 请看我的bug描述
 
预期结果:
- 请看我的bug描述
 
实际结果:
- 请看我的bug描述
 
bug描述:
我自己写了一个获取iOS手机WiFi ssid的插件,我的证书已经包含了access Wi-Fi information,并且APP已经申请了定位权限,使用的云端打包,但是ssid为空;然后我无意间将官方插件uni-wifi导入工程,并且调用了uni.getConnectedWifi(OBJECT),然后我的插件就正常返回ssid了(uni.getConnectedWifi接口没有成功,失败了);然后我将uni-wifi从工程里去掉,我的插件又不能返回ssid了。请问这是怎么回事呢?
| 信息类别 | 信息内容 | 
|---|---|
| 产品分类 | uniapp/App | 
| PC开发环境操作系统 | Windows | 
| PC开发环境操作系统版本号 | win10 | 
| HBuilderX类型 | 正式 | 
| HBuilderX版本号 | 4.15 | 
| 手机系统 | iOS | 
| 手机系统版本号 | iOS 16 | 
| 手机厂商 | 苹果 | 
| 手机机型 | iPhoneX | 
| 页面类型 | vue | 
| vue版本 | vue2 | 
| 打包方式 | 云端 | 
| 项目创建方式 | HBuilderX | 
更多关于uni-app 自定义ios插件获取WiFi ssid并且云打包时ssid为空的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于uni-app 自定义ios插件获取WiFi ssid并且云打包时ssid为空的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在处理uni-app自定义iOS插件以获取WiFi SSID时,确保在云打包环境中SSID不为空的问题,关键在于理解iOS系统的权限管理和插件的实现细节。由于iOS对获取WiFi网络信息的权限限制非常严格,特别是在iOS 13及以后版本,获取SSID需要在设备已连接到该WiFi网络并且应用具有相应的位置权限。
以下是一个简化的uni-app自定义iOS插件示例,用于尝试获取当前连接的WiFi SSID。请注意,此代码仅用于演示目的,并可能需要根据实际开发环境和iOS版本进行调整。
iOS插件代码(Objective-C)
首先,创建一个新的Objective-C类作为插件的主要实现。
// MyWiFiPlugin.h
#import <Foundation/Foundation.h>
@interface MyWiFiPlugin : NSObject
- (void)getSSID:(NSInvocation *)invocation;
@end
// MyWiFiPlugin.m
#import "MyWiFiPlugin.h"
#import <CoreLocation/CoreLocation.h>
#import <NetworkExtension/NetworkExtension.h>
@implementation MyWiFiPlugin
- (void)getSSID:(NSInvocation *)invocation {
    CLLocationManager *locationManager = [[CLLocationManager alloc] init];
    if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedWhenInUse || [CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedAlways) {
        NSArray *interfaces = CNCopySupportedInterfaces();
        for (NSString *interfaceName in interfaces) {
            NSDictionary *info = CNCopyCurrentNetworkInfo(interfaceName);
            NSString *ssid = info[@"SSID"];
            [invocation setReturnValue:&ssid];
            return;
        }
    } else {
        NSError *error = [NSError errorWithDomain:@"MyWiFiPlugin" code:-1 userInfo:@{NSLocalizedDescriptionKey:@"Location services not authorized"}];
        [invocation setReturnValue:nil];
        [invocation setSelector:@selector(failedWithError:)];
        [invocation setArgument:&error atIndex:2];
    }
}
@end
uni-app调用插件
在uni-app项目中,通过plus.bridge.exec方法调用自定义插件。
plus.bridge.exec('MyWiFiPlugin', 'getSSID', [], function(e) {
    if (e && e.SSID) {
        console.log('SSID:', e.SSID);
    } else {
        console.error('Failed to get SSID:', e);
    }
});
注意事项
- 权限处理:确保在iOS项目中正确配置
Info.plist以请求位置权限。 - iOS版本差异:不同iOS版本对获取SSID的限制可能不同,特别是iOS 13及以上版本。
 - 云打包问题:云打包环境可能无法模拟设备的真实状态,如位置权限的授权状态,这可能导致SSID获取失败。在实际设备上进行测试是验证插件功能的关键。
 
由于iOS系统的严格限制,获取SSID的插件实现可能需要根据最新的iOS SDK和平台政策进行调整。
        
      
                    
                  
                    
