"[App]" Хотелось бы получить доступ к Twitter Учетные записи не отображаются в iOS 6

Я использую TWTweetComposeViewController для доступа к учетным записям пользователя, которые он добавил в настройках → Twitter. Когда приложение пытается получить доступ к учетной записи twitter, оно должно представить предупреждение с сообщением, аналогичным этому:

"[AppName] Would Like Access to Twitter Accounts"

К которому вы можете нажать "Не разрешать" или "ОК". Я предполагаю, что это предупреждение, отображаемое самой ОС, так как нажатие "ОК" фактически разрешает доступ к твиттеру.

Вышеуказанное предупреждение отображается, когда я тестирую его на устройстве iOS 5.x, но это не тот случай, когда я тестирую его на устройстве iOS 6. Я ожидаю, что предупреждение будет представлено, когда я отправлю следующее сообщение, и я еще не получил доступ к моему сайту в Twitter в настройках:

[TWTweetComposeViewController canSendTweet]

Как описано, этого не происходит. Кто-нибудь знает, если это известная ошибка в iOS 6? Я не смог найти какие-либо сообщения на SO, и поскольку я не могу найти других причин для разных действий, я считаю, что это ошибка.

FYI, я тестирую это на следующих двух устройствах:

  • iPhone 4 с iOS 5.1
  • iPhone 4 с iOS 6.0

Обновление

Я использую DETweetComposeViewController, который проверяет iOS 5 следующим образом:

+ (BOOL)de_isIOS5
{
    return (NSClassFromString(@"NSJSONSerialization") != nil);
}

Но так как класс NSJSONSerialization также представлен в iOS 6, это не должно быть причиной.

Ответ 1

Я сортировал эту же вещь на iOS 5.1 vs iOS 6.0 весь день.

Пока есть учетная запись Twitter, настроенная в настройках, мое приложение больше не запрашивает разрешение на доступ к Twitter в iOS 6.0, чтобы отобразить TWTweetComposeViewController. Я проверил это, отключив доступ Twitter для моего приложения в Settings > Privacy > Twitter. При доступе я должным образом отрицал возможность создания дружбы с использованием TWRequest, но все же может появиться TWTweetComposeViewController. Я получаю приглашение в iOS 5.1 каждый раз, пока не предоставил ему доступ.

Это имеет смысл для меня. Все TWTweetComposeViewController выполняет инициализацию твита, поэтому, если у пользователя уже есть настроенная учетная запись Twitter, это должно быть достаточно, чтобы отправлять твиты из любого места. На самом деле это лишний дополнительный шаг, чтобы предоставить доступ для каждого приложения.

Если учетные записи Twitter не настроены, TWTweetComposeViewController предложит это сообщение tho:

No Twitter Accounts
There are no Twitter accounts
configured. You can add or create
a Twitter account in Settings.

с удобными кнопками "Настройки" и "Отмена".

Объяснение этому: iOS 6 также запрашивает сообщение "[AppName] Would Like Access to Twitter Accounts" при первом обращении к приложению.

После этого вы должны reset Settings > General > Reset > Reset Location & Privacy вернуть запрос. Даже если вы удалите и переустановите/переустановите приложение, настройка "уже задана один раз" сохраняется. Вы можете вручную разрешить доступ в Settings > Privacy, но этот reset является единственным способом получить приглашение для повторного отображения (если это важно для вашего тестирования).

Две лишние вещи, которые я узнал. В блоке завершения [ACAccountStore requestAccessToAccountsWithType:options:completion:], если granted == NO:

  • Если [error code] == 6, у вашего пользователя нет определенных учетных записей.
  • Если error == nil, ваш пользователь запретил доступ для вашего приложения, либо сейчас, либо ранее. Если это произошло ранее, запрос молча игнорируется без предупреждения, отображаемого на экране, без нажатия кнопки "Не разрешать".