Android 企业配置后如何在 Android 10 中保存 EAP wifi 网络
How to save EAP wifi network in Android 10 after Android Enterprise provisioning
直到 API 29 级,我们一直在使用 WifiConfiguration 与我们的 DPC(设备和配置文件所有者模式)建立 wifi 连接。由于 API lvl 29 我们仍然可以保存 Open、WEP、WPA 网络,但是任何保存 EAP 网络的尝试都将被完全忽略。我们尝试使用 WifiSuggestions 方法并且建议在通知栏中正确显示,但是当用户点击“允许”时 - 没有任何反应。日志中没有错误,addNetworkSuggestions() 方法 returns STATUS_NETWORK_SUGGESTIONS_SUCCESS.
仅当我们的 DPC 被提供 Device/Profile 具有完整配置过程的所有者权限(工作配置文件创建或在第一次启动期间完全管理)时,才会存在此问题。使用 ADB 获取设备所有者状态让我们可以通过允许网络建议来保存网络。
这是我们设置网络建议的方式:
@RequiresApi(api = Build.VERSION_CODES.Q)
public static WifiNetworkSuggestion setupWifiNetworkSuggestion (WifiConfiguration wifiConfiguration){
return new WifiNetworkSuggestion.Builder()
.setSsid(wifiConfiguration.SSID)
.setIsHiddenSsid(wifiConfiguration.hiddenSSID)
.setWpa2EnterpriseConfig(wifiConfiguration.enterpriseConfig)
.build();
}
之后我们调用:
List<WifiNetworkSuggestion> networkSuggestionList = new ArrayList<>();
networkSuggestionList.add(setupWifiNetworkSuggestion(wifiConfiguration));
int status = mWifiManager.addNetworkSuggestions(networkSuggestionList);
if (status != WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) {
_logger.error("Problem adding network suggestion, status code: " + status);
}
我们是不是漏掉了什么?相同的代码适用于我们不使用 EMM 配置来获取设备所有者的其他应用程序。两个应用程序中所有请求的权限都是相同的。我们试图获取一些错误信息或设置一些日志,但我们一直只获得成功状态。
我们终于成功了!该问题是由三个不同的问题引起的:
我们缺少允许的密钥管理设置WifiConfiguration.KeyMgmt.WPA_EAP
当企业配置中提供任何域时,我们的测试 RADIUS 服务器拒绝连接尝试。即使在我们解决 Android-side 个问题
时,它也给我们带来了不必要的断开连接
最重要:出于某种原因,我们的密码策略没有得到执行,在测试环境中我们使用 self-signed 证书。如果没有至少 PIN-lock 在设备上设置,证书将无法附加到网络配置文件,因此它不能 added/connected 到。即使保存了网络,也缺少必须手动选择的证书(虽然它已正确部署到证书存储区)
直到 API 29 级,我们一直在使用 WifiConfiguration 与我们的 DPC(设备和配置文件所有者模式)建立 wifi 连接。由于 API lvl 29 我们仍然可以保存 Open、WEP、WPA 网络,但是任何保存 EAP 网络的尝试都将被完全忽略。我们尝试使用 WifiSuggestions 方法并且建议在通知栏中正确显示,但是当用户点击“允许”时 - 没有任何反应。日志中没有错误,addNetworkSuggestions() 方法 returns STATUS_NETWORK_SUGGESTIONS_SUCCESS.
仅当我们的 DPC 被提供 Device/Profile 具有完整配置过程的所有者权限(工作配置文件创建或在第一次启动期间完全管理)时,才会存在此问题。使用 ADB 获取设备所有者状态让我们可以通过允许网络建议来保存网络。
这是我们设置网络建议的方式:
@RequiresApi(api = Build.VERSION_CODES.Q)
public static WifiNetworkSuggestion setupWifiNetworkSuggestion (WifiConfiguration wifiConfiguration){
return new WifiNetworkSuggestion.Builder()
.setSsid(wifiConfiguration.SSID)
.setIsHiddenSsid(wifiConfiguration.hiddenSSID)
.setWpa2EnterpriseConfig(wifiConfiguration.enterpriseConfig)
.build();
}
之后我们调用:
List<WifiNetworkSuggestion> networkSuggestionList = new ArrayList<>();
networkSuggestionList.add(setupWifiNetworkSuggestion(wifiConfiguration));
int status = mWifiManager.addNetworkSuggestions(networkSuggestionList);
if (status != WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) {
_logger.error("Problem adding network suggestion, status code: " + status);
}
我们是不是漏掉了什么?相同的代码适用于我们不使用 EMM 配置来获取设备所有者的其他应用程序。两个应用程序中所有请求的权限都是相同的。我们试图获取一些错误信息或设置一些日志,但我们一直只获得成功状态。
我们终于成功了!该问题是由三个不同的问题引起的:
我们缺少允许的密钥管理设置
WifiConfiguration.KeyMgmt.WPA_EAP
当企业配置中提供任何域时,我们的测试 RADIUS 服务器拒绝连接尝试。即使在我们解决 Android-side 个问题
时,它也给我们带来了不必要的断开连接最重要:出于某种原因,我们的密码策略没有得到执行,在测试环境中我们使用 self-signed 证书。如果没有至少 PIN-lock 在设备上设置,证书将无法附加到网络配置文件,因此它不能 added/connected 到。即使保存了网络,也缺少必须手动选择的证书(虽然它已正确部署到证书存储区)