首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在安卓应用中阻止choosePrivateKeyAlias对话框?

如何在安卓应用中阻止choosePrivateKeyAlias对话框?
EN

Stack Overflow用户
提问于 2017-07-07 23:18:11
回答 2查看 1.8K关注 0票数 3

我有一个安卓应用程序,调用一个安全的网站在网络视图。webview检索证书以将其提供给网站。

我必须使用KeyChain.choosePrivateKeyAlias(this, keyChainAliasCallback, null, null, null, -1, CERT_ALIAS);方法,这将显示如下所示的对话框

我希望只在用户第一次使用该应用程序时显示此窗口,但我不知道这是否可行。

我看到了如何使用设备/所有者配置文件截获此内容。这是否意味着它应该在android work上运行?对我来说有点模糊。

另一种解决方案是在第一次检索证书和私钥时将其保存到任何其他应用程序和用户都无法访问的地方。我想到了私有模式下的SharedPreferences。

我说错了吗?

谢谢你的感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-28 16:43:09

我不确定解决这个问题的最好方法是什么,但以下是我所做的,对我来说效果很好。

我在preferences中检查了一个布尔变量,如果返回false,则显示choosePrivateKeyAlias窗口。如果返回true,我知道我有权直接检索证书,所以不需要显示弹出窗口。

代码语言:javascript
运行
复制
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();
    }
}

希望这能帮上忙。

票数 4
EN

Stack Overflow用户

发布于 2020-08-12 06:54:54

我使用以下内容来检查用户是否已经选择了证书:

代码语言:javascript
运行
复制
activity?.let { it1 ->
    var selectedPrivateKey = KeyChain.getPrivateKey(it1, "keystore-test")
    if (selectedPrivateKey == null) { // if we can't access the private key then prompt for cert selection
        KeyChain.choosePrivateKeyAlias(it1, {
            Log.d("App", "Popped up KeyChain selection screen")
        }, null, null, null, "keystore-test") // this is the alias that is chosen in the popup by default
    }
}

如果您没有访问私钥的权限,则KeyChain.getPrivateKey(it1, "keystore-test")将返回null,这意味着用户尚未选择证书。

此实现将使您不必使用SharedPreferences,并且在用户删除证书时也不会给出误报。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44974349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档