Błąd podczas używania [FBSession openActiveSessionWithPublishPermissions: ..]

Aktualizuję aplikację, aby użyć najnowszego zestawu SDK Facebooka, aby uzyskać dostęp do natywnej obsługi Facebooka w systemie iOS6. Obecnie używa całkiem starej wersji SDK Facebooka.

Aplikacja wymaga uprawnienia „publikuj_wydania” z Facebooka tylko w przypadku Facebooka.

Początkowo myślałem, że mogę użyć[FBSession openActiveSessionWithPublishPermissions: ...] ale to nie działa na iOS6, gdy użytkownik ma skonfigurowanego Facebooka w ustawieniach iOS6. Zawodzi z powodu tego wymogu,z dokumentów Facebooka:

Zauważ, że aby korzystać z rodzimego autoryzacji systemu iOS 6, aplikacje muszą zmienić sposób, w jaki żądają uprawnień od użytkowników - aplikacje muszą oddzielić swoje żądania dotyczące uprawnień do odczytu i zapisu. Zestaw SDK Facebooka dla systemu iOS obsługuje te funkcje i pomaga programistom wykorzystywać je do tworzenia aplikacji, które działają w wielu wersjach iOS i konfiguracjach urządzeń.

To duża PITA, IMO. Naszą preferencją byłoby skłonienie użytkownika do uzyskania pozwolenia i ukończenia go, ale „nowym” ideałem na Apple / Facebook jest monitowanie o określone uprawnienia w kontekście, gdy są one potrzebne, ale jeszcze nie udzielono.

Obecnie planujemy zachować nasze stare zachowanie dla użytkowników iOS5 i użytkowników iOS6, którzy nie mają skonfigurowanego Facebooka w Ustawieniach. I dostosuj się do nowej podwójnej zachęty dla użytkowników iOS6, którzy korzystają z dostępu natywnego.

Pytanie brzmi, jak najlepiej to zrobić? W jaki sposób powinienem wykryć, czy zestaw SDK Facebooka wybierze rodzimy login iOS6 zamiast mechanizmów rezerwowych? Czy przeoczę coś oczywistego?

EDYTOWAĆ:

gerraldWilliam wprowadził mnie na właściwy tor. Jego rozwiązanie prawie zadziałałoby, z wyjątkiem tego, że ACAccountTypeIdentifierFacebook nie jest dostępny w iOS5. Ponadto, jeśli użytkownik zablokuje dostęp FB w Ustawieniach do aplikacji, wywołanie accountsWithAccountType zwróci pustą tablicę.

Pierwszy problem można obejść, pytając o identyfikator dopasowania typu konta „com.apple.facebook” - zwróci on zero w iOS5 i obiekt typu rzeczywistego konta w iOS6.

Ale drugi problem jest nierozwiązywalny. Moim nowym planem jest, aby zawsze otwierać początkową sesję na iOS6 z uprawnieniami tylko do odczytu i pytać później, w kontekście, o pozwolenie na publikację, jeśli jest to wymagane. W systemie iOS5 nadal otworzę sesję początkową, podając żądane uprawnienie do publikowania. Oto kod:

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

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