AbstractAccountAuthenticator разрешить только 1 аккаунт - PullRequest
0 голосов
/ 19 ноября 2018

Я реализовал AbstractAccountAuthenticator как требование для использования SyncAdapter, поскольку мое приложение поддерживает только 1 учетную запись одновременно.

Когда пользователь пытается добавить другую учетную запись через настройки - Настройки вылетают с ошибкой, что он перестал работать.

Я видел какое-то приложение, например LinkedIn, Facebook, они как-то обрабатывают его по-разному, пользователю показывается тостовое сообщение с заявлением, что поддерживается только 1 учетная запись.Как я могу достичь этой функциональности?

Это мой аутентификатор

class ApplicationAuthenticator(private val context: Context) : AbstractAccountAuthenticator(context) {

    // Editing properties is not supported
    @Throws(UnsupportedOperationException::class)
    override fun editProperties(response: AccountAuthenticatorResponse,
                                accountType: String): Bundle? {

        throw UnsupportedOperationException()
    }

    // Don't add additional accounts
    override fun addAccount(response: AccountAuthenticatorResponse, accountType: String,
                            authTokenType: String, features: Array<String>,
                            options: Bundle): Bundle? {

        return bundleOf(AccountManager.KEY_INTENT to null)
    }

    // Ignore attempts to confirm credentials
    @Throws(NetworkErrorException::class)
    override fun confirmCredentials(response: AccountAuthenticatorResponse, account: Account,
                                    options: Bundle): Bundle? {

        return null
    }

    // Getting an authentication token is not supported
    @Throws(NetworkErrorException::class, UnsupportedOperationException::class)
    override fun getAuthToken(response: AccountAuthenticatorResponse, account: Account,
                              authTokenType: String, loginOptions: Bundle): Bundle? {

        throw UnsupportedOperationException()
    }

    // Getting a label for the auth token is not supported
    override fun getAuthTokenLabel(authTokenType: String): String {
        return context.resources.getString(R.string.application_name)
    }

    // Updating user credentials is not supported
    override fun updateCredentials(response: AccountAuthenticatorResponse, account: Account,
                                   authTokenType: String, loginOptions: Bundle): Bundle? {

        return null
    }

    // Checking features for the account is not supported
    @Throws(NetworkErrorException::class)
    override fun hasFeatures(response: AccountAuthenticatorResponse, account: Account,
                             features: Array<String>): Bundle {

        return bundleOf(KEY_BOOLEAN_RESULT to false)
    }

}

1 Ответ

0 голосов
/ 29 ноября 2018

Когда пользователь нажимает кнопку «Добавить учетную запись», Android просто вызывает метод addAccount вашего ApplicationAuthenticator. В ответ он ожидает либо создания учетной записи, либо намерения, которое запускает настройку учетной записи, либо ошибки.

Если вы не разрешаете несколько учетных записей, у вас есть несколько вариантов здесь:

  • Вернуть ошибку с кодом ERROR_CODE_UNSUPPORTED_OPERATION . Хотя я еще не пробовал.
  • Возврат вашей существующей учетной записи в результате. В этот момент вы также можете показать Toast.

    Чтобы вернуть существующую учетную запись, просто позвольте addAccount вернуть Bundle со следующими ключами и их соответствующими значениями:

    AccountManager.KEY_ACCOUNT_NAME и AccountManager.KEY_ACCOUNT_TYPE добавленной учетной записи или

  • Вернуть действие Intent, которое не создает учетную запись, но объясняет пользователю, что это неподдерживаемая / ненужная операция. Активность не требует добавления учетной записи.

    Это дает лучший пользовательский опыт IMO.

...