作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个在 webview 中调用安全网站的 android 应用程序。webview 检索证书以将其提供给网站。
我必须使用 KeyChain.choosePrivateKeyAlias(this, keyChainAliasCallback, null, null, null, -1, CERT_ALIAS);
方法,这会显示这样的对话框
我只想在用户第一次使用该应用程序时显示此窗口,但我不知道这是否可能。
我看到有关使用设备/所有者配置文件进行拦截的信息。这是否意味着它应该在 android 上工作?对我来说有点模糊。
另一种解决方案是将第一次检索的证书和私钥保存在任何其他应用程序或用户都无法访问的地方。我想到了私有(private)模式下的 SharedPreferences。
我错了吗?
感谢您的回答!
最佳答案
我不确定解决此问题的最佳方法,但这是我所做的对我来说效果很好的方法。
我在首选项中检查了一个 bool 变量,如果它返回 false,我会显示 choosePrivateKeyAlias
窗口。如果它返回 true,我知道我有权限直接检索证书,因此不需要显示弹出窗口。
boolean isGranted = prefs.getBoolean("MY_CERT", false);
if(!isGranted) {
//Get cert and private key from internal android store
KeyChainAliasCallback keyChainAliasCallback = new KeyChainAliasCallback() {
@Override
public void alias(@Nullable String s) {
Log.d(TAG, "selected alias = " + s);
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
editor.putBoolean("MY_CERT", true);
editor.commit();
retriveCertsTask.execute();
}
};
KeyChain.choosePrivateKeyAlias(mActivity, keyChainAliasCallback, null, null, null, -1, CERT_ALIAS);
} else {
// Retrieve certs an private key
retriveCertsTask.execute();
}
}
希望对你有帮助
关于android - 如何防止android应用程序中的choosePrivateKeyAlias对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44974349/
我是一名优秀的程序员,十分优秀!