fixed ios wifi part support. retry 2.
This commit is contained in:
1 parent
521c14b2fc
commit
13d06d50eb
4 files changed
+30
-5
No files matched your search
@@ -213,6 +213,7 @@ iOS WiFi:
|
|||||||
- 使用 `NEHotspotConfiguration`。
|
- 使用 `NEHotspotConfiguration`。
|
||||||
- 插件会向 Cordova iOS entitlements 写入 `com.apple.developer.networking.HotspotConfiguration`,但仍必须在 Apple Developer App ID 中开启 `Hotspot Configuration` capability,并使用包含该 capability 的 provisioning profile 重新构建。
|
- 插件会向 Cordova iOS entitlements 写入 `com.apple.developer.networking.HotspotConfiguration`,但仍必须在 Apple Developer App ID 中开启 `Hotspot Configuration` capability,并使用包含该 capability 的 provisioning profile 重新构建。
|
||||||
- 如果 iOS 返回 `NEHotspotConfigurationErrorDomain` code `8` / `internal error`,优先检查 App ID、entitlements、provisioning profile 是否都包含 `Hotspot Configuration`,并确认是在真机前台运行,不是在模拟器中测试。
|
- 如果 iOS 返回 `NEHotspotConfigurationErrorDomain` code `8` / `internal error`,优先检查 App ID、entitlements、provisioning profile 是否都包含 `Hotspot Configuration`,并确认是在真机前台运行,不是在模拟器中测试。
|
||||||
|
- iOS 的 `NEHotspotConfiguration` password initializer 公开支持 WEP/WPA/WPA2 Personal。WPA2/WPA3 mixed 通常应先按 `security: "wpa2"` 测试;如果 WPA2-only 可用但 mixed 不可用,需要调整热点兼容性配置或改用配置描述文件/MDM 流程。
|
||||||
- iOS 不提供第三方 App 断开当前 WiFi 的公开 API,因此 `disconnectWifi` 在 iOS 返回错误。
|
- iOS 不提供第三方 App 断开当前 WiFi 的公开 API,因此 `disconnectWifi` 在 iOS 返回错误。
|
||||||
|
|
||||||
Firebase:
|
Firebase:
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "bluememe-utils",
|
"name": "bluememe-utils",
|
||||||
"version": "0.1.1",
|
"version": "0.1.2",
|
||||||
"description": "Cordova utilities for WiFi, Firebase Cloud Messaging, and biometric unlock for OutSystems 11 apps.",
|
"description": "Cordova utilities for WiFi, Firebase Cloud Messaging, and biometric unlock for OutSystems 11 apps.",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"files": [
|
"files": [
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
|
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
id="bluememe-utils"
|
id="bluememe-utils"
|
||||||
version="0.1.1">
|
version="0.1.2">
|
||||||
<name>bluememe-utils</name>
|
<name>bluememe-utils</name>
|
||||||
<description>Cordova utilities for WiFi, Firebase Cloud Messaging, and biometric unlock.</description>
|
<description>Cordova utilities for WiFi, Firebase Cloud Messaging, and biometric unlock.</description>
|
||||||
<license>MIT</license>
|
<license>MIT</license>
|
||||||
|
|||||||
@@ -286,6 +286,10 @@ static NSString * const BluememeDeviceKeyDefaultsKey = @"bluememe_utils_device_k
|
|||||||
NSString *ssid = [self stringFromDictionary:options key:@"ssid"];
|
NSString *ssid = [self stringFromDictionary:options key:@"ssid"];
|
||||||
NSString *password = [self stringFromDictionary:options key:@"password"];
|
NSString *password = [self stringFromDictionary:options key:@"password"];
|
||||||
NSString *security = [[self stringFromDictionary:options key:@"security"] lowercaseString];
|
NSString *security = [[self stringFromDictionary:options key:@"security"] lowercaseString];
|
||||||
|
if (security.length == 0) {
|
||||||
|
security = password.length == 0 ? @"open" : @"wpa2";
|
||||||
|
}
|
||||||
|
BOOL isOpen = [security isEqualToString:@"open"] || [security isEqualToString:@"none"];
|
||||||
BOOL isWep = [security isEqualToString:@"wep"] || [self boolFromDictionary:options key:@"isWep" defaultValue:NO];
|
BOOL isWep = [security isEqualToString:@"wep"] || [self boolFromDictionary:options key:@"isWep" defaultValue:NO];
|
||||||
BOOL joinOnce = [self boolFromDictionary:options key:@"joinOnce" defaultValue:defaultJoinOnce];
|
BOOL joinOnce = [self boolFromDictionary:options key:@"joinOnce" defaultValue:defaultJoinOnce];
|
||||||
BOOL hiddenSsid = [self boolFromDictionary:options key:@"hiddenSsid" defaultValue:NO];
|
BOOL hiddenSsid = [self boolFromDictionary:options key:@"hiddenSsid" defaultValue:NO];
|
||||||
@@ -295,6 +299,16 @@ static NSString * const BluememeDeviceKeyDefaultsKey = @"bluememe_utils_device_k
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!isOpen && password.length == 0) {
|
||||||
|
[self sendErrorForCommand:command code:@"INVALID_WIFI_OPTIONS" message:@"password is required for secured WiFi networks."];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isOpen && !isWep && (password.length < 8 || password.length > 63)) {
|
||||||
|
[self sendErrorForCommand:command code:@"INVALID_WIFI_OPTIONS" message:@"WPA/WPA2 passphrase must be 8 to 63 characters."];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
#if TARGET_OS_SIMULATOR
|
#if TARGET_OS_SIMULATOR
|
||||||
[self sendErrorForCommand:command
|
[self sendErrorForCommand:command
|
||||||
code:@"UNSUPPORTED_IOS_SIMULATOR"
|
code:@"UNSUPPORTED_IOS_SIMULATOR"
|
||||||
@@ -304,7 +318,7 @@ static NSString * const BluememeDeviceKeyDefaultsKey = @"bluememe_utils_device_k
|
|||||||
|
|
||||||
if (@available(iOS 11.0, *)) {
|
if (@available(iOS 11.0, *)) {
|
||||||
NEHotspotConfiguration *configuration = nil;
|
NEHotspotConfiguration *configuration = nil;
|
||||||
if (password.length == 0 || [security isEqualToString:@"open"]) {
|
if (isOpen) {
|
||||||
configuration = [[NEHotspotConfiguration alloc] initWithSSID:ssid];
|
configuration = [[NEHotspotConfiguration alloc] initWithSSID:ssid];
|
||||||
} else {
|
} else {
|
||||||
configuration = [[NEHotspotConfiguration alloc] initWithSSID:ssid passphrase:password isWEP:isWep];
|
configuration = [[NEHotspotConfiguration alloc] initWithSSID:ssid passphrase:password isWEP:isWep];
|
||||||
@@ -317,7 +331,14 @@ static NSString * const BluememeDeviceKeyDefaultsKey = @"bluememe_utils_device_k
|
|||||||
[[NEHotspotConfigurationManager sharedManager] applyConfiguration:configuration completionHandler:^(NSError *error) {
|
[[NEHotspotConfigurationManager sharedManager] applyConfiguration:configuration completionHandler:^(NSError *error) {
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
if (error != nil && error.code != NEHotspotConfigurationErrorAlreadyAssociated) {
|
if (error != nil && error.code != NEHotspotConfigurationErrorAlreadyAssociated) {
|
||||||
[self sendWifiApplyErrorForCommand:command error:error];
|
NSDictionary *context = @{
|
||||||
|
@"ssid": ssid,
|
||||||
|
@"security": security,
|
||||||
|
@"passwordLength": @(password.length),
|
||||||
|
@"joinOnce": @(joinOnce),
|
||||||
|
@"hiddenSsid": @(hiddenSsid)
|
||||||
|
};
|
||||||
|
[self sendWifiApplyErrorForCommand:command error:error context:context];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
NSDictionary *result = @{
|
NSDictionary *result = @{
|
||||||
@@ -335,9 +356,12 @@ static NSString * const BluememeDeviceKeyDefaultsKey = @"bluememe_utils_device_k
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)sendWifiApplyErrorForCommand:(CDVInvokedUrlCommand *)command error:(NSError *)error
|
- (void)sendWifiApplyErrorForCommand:(CDVInvokedUrlCommand *)command error:(NSError *)error context:(NSDictionary *)context
|
||||||
{
|
{
|
||||||
NSMutableDictionary *details = [NSMutableDictionary dictionary];
|
NSMutableDictionary *details = [NSMutableDictionary dictionary];
|
||||||
|
if (context != nil) {
|
||||||
|
[details addEntriesFromDictionary:context];
|
||||||
|
}
|
||||||
if (error.domain.length > 0) {
|
if (error.domain.length > 0) {
|
||||||
details[@"nativeDomain"] = error.domain;
|
details[@"nativeDomain"] = error.domain;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user