1

嗨,我有一个与 Android 客户经理有关的问题。我的应用程序向其中注入了一个帐户,因此设备上安装的其他应用程序也可以访问它。我认为一旦任何应用程序向系统询问存储在帐户中的数据,它应该首先询问用户(经典的 android 身份验证屏幕,有两个按钮告诉用户应用程序想要访问该帐户)。但是,我现在就尝试过,我编写了一个简单的应用程序,其目的只是从客户经理那里填充存储的身份验证令牌。有效。它工作得很好,除了没有任何步骤要求用户许可,它只是显示令牌。请问我需要如何将帐户配置为不公开?

以下是我用于访问该帐户的代码。我只使用了帐户的类型和令牌的类型。就这样。

  AccountManager accountManager = AccountManager.get(this);
    assert accountManager != null;
    Account[] kosAccounts = accountManager.getAccountsByType("account_type");
    if(kosAccounts.length < 1) tokenView.setText("no account");
    else{
        accountManager.getAuthToken(kosAccounts[0],"token_type",null, this, new AccountManagerCallback<Bundle>() {
            @Override
            public void run(AccountManagerFuture<Bundle> future) {
                try {
                    Bundle result = future.getResult();
                    if(result == null) tokenView.setText("problem");
                    else{
                        tokenView.setText(result.getString(AccountManager.KEY_AUTHTOKEN));
                    }

                } catch (OperationCanceledException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (AuthenticatorException e) {
                    e.printStackTrace();
                }

            }
        }, new Handler());
    }

这是我用于创建帐户的代码(来自另一个应用程序).​​.它实际上是代码的精简版本,我删除了所有你不需要帮助我的杂乱信息:)

final AccountManager accountManager = AccountManager.get(getApplicationContext());
final String username = getUserDataResponse.getString("username");
final String authToken = getUserDataResponse.getString("token"); // null pointer
final Account account = new Account(username, AuthenticatorConfig.ACCOUNT_TYPE);

accountManager.addAccountExplicitly(account, null, null);
accountManager.setAuthToken(account, AuthenticatorConfig.AUTH_TOKEN_TYPE, authToken);
4

1 回答 1

1

好的,所以答案很简单..证书很重要!如果这些应用程序使用不同的证书签名,则会出现该屏幕。 在此处输入图像描述

于 2013-08-31T07:26:40.230 回答