2013-08-30 6 views
1

Привет, У меня есть вопрос, связанный с менеджером аккаунта 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); 

ответ

1

Хорошо, так что ответ довольно прост .. Сертификат имеет значение! Если эти приложения подписаны с разными сертификатами, появится экран. enter image description here

+0

Спасибо, смешно, я нашел ваш ответ. Точно, что мне нужно :) –