Ошибка при использовании [FBSession openActiveSessionWithPublishPermissions: ..]

Я обновляю приложение, чтобы использовать последнюю версию SDK Facebook, чтобы получить доступ к собственной поддержке Facebook iOS6. В настоящее время он использует довольно старую версию Facebook SDK.

Приложение требует & quot; publish_actions & quot; разрешение от Facebook на единственное, что он делает с Facebook.

Сначала я думал, что смогу использовать[FBSession openActiveSessionWithPublishPermissions: ...] но это не удается на iOS6, когда пользователь настроил Facebook в настройках iOS6. Это не из-за этого требования,из документов Facebook:

Note, to use iOS 6 native auth, apps need change the way they request permissions from users - apps must separate their requests for read and write permissions. The Facebook SDK for iOS supports these features and helps developers use them to build apps that work on multiple iOS versions and device configurations.

Это большая пита, ИМО. Мы предпочли бы один раз запросить у пользователя разрешение и покончить с этим, но & quot; новый & quot; Идеально для Apple / Facebook - запрашивать конкретные разрешения в контексте, когда они необходимы, но еще не предоставлены.

На данный момент планируется сохранить прежнее поведение пользователей iOS5 и iOS6, у которых Facebook не настроен в настройках. И соответствовать новой двойной подсказке для пользователей iOS6, которые используют native-доступ.

The question is, what's the best way to do this?  Как мне узнать, выберет ли Facebook SDK родную учетную запись iOS6 против механизмов восстановления? Я пропускаю что-то очевидное?

EDIT:

GerraldWilliam поставил меня на правильный путь. Его решение почти сработало бы, за исключением того, что ACAccountTypeIdentifierFacebook не доступен в iOS5. Кроме того, если пользователь блокирует доступ к FB в настройках приложения, то вызов accountWithAccountType вернет пустой массив.

Первую проблему можно обойти, запросив идентификатор соответствия типа учетной записи «com.apple.facebook». - это вернет nil на iOS5 и объект типа реального аккаунта на iOS6.

Но вторая проблема неразрешима. Мой новый план состоит в том, чтобы всегда открывать начальный сеанс на iOS6 с разрешениями только для чтения и запрашивать позже, в контексте, разрешение на публикацию при необходимости. На iOS5 я все равно открою начальный сеанс, указав желаемое разрешение publish_actions. Вот код:

ACAccountStore* as = [[ACAccountStore new] autorelease]; 
ACAccountType* at = [as accountTypeWithAccountTypeIdentifier: @"com.apple.facebook"]; 
if ( at != nil ) {
    // iOS6+, call  [FBSession openActiveSessionWithReadPermissions: ...]

} else  {
    // iOS5, call [FBSession openActiveSessionWithPublishPermissions: ...] 
}

Ответы на вопрос(4)

Ваш ответ на вопрос