2012-10-02 19 views
5

Chcemy dokonać aktualizacji do wersji 3.x, aby nasi użytkownicy na iOS 6/iPhone 5 mogli korzystać z najbardziej usprawnionego korzystania z FB ... biorąc pod uwagę, że jestem skierowany przepisanie integracji FB, czy może mogę używać zamortyzowanych nagłówków i nadal używać interfejsów API 2.x z pakietem 3.1 SDK?Problemy z migracją z Facebook iOS SDK 2.x do 3.x

Niektóre z kluczowych metod i wniosków jesteśmy powołując się na to: [ad.facebook zezwolić na: perms] shouldExtendAccessToken, extendAccessTokenIfNeeded, isSessionValid, okno dialogowe: @ andParams "pasza": params andDelegate: delegat „https : //graph.facebook.com/me? fields = id, email, first_name & access_token = ", et.al. Niektóre wyszukiwania w przykładowych przykładach 3.1 sprawiają, że wygląda na to, że wszystkie zostały zastąpione - i wyobrażam sobie, że to nie tylko zmiany nazwy.

Nie znalazłem wersji 2.x do 3.x tego Upgrading from 3.0 to 3.1 - jeśli przeoczyłem to, proszę doradzić.

Kiedy poprzednio próbowałem uaktualnić do 3.0 ostatnio, natknąłem się na poważne pęknięcia (duplikaty nagłówków SBJson, nierozstrzygające nagłówki FB), gdy próbowałem użyć zdeprecjonowanych API, a po skompilowaniu, okazało się, że handleOpenURL jest zepsuty i ponownie się przełączał do FB po raz drugi, a następnie awarię. I natknąłem się na posty, które wskazują, że mogą występować problemy z wyłączaniem ARC 3.x (nie możemy go używać, ponieważ mamy C++).

Nie rozpocząłem 2.x do 3.1. Być może to pójdzie gładko, ale chciałbym zyskać trochę wglądu u tych, którzy odebrali przede mną przed drugim długim atakiem - dziękuję bardzo.

Odpowiedz

9

Właśnie zrobiłem to uaktualnienie dla mojej aplikacji. Mój powód to był płynniejszy przepływ dla iOS 6 i przyszłe wsparcie dla Facebooka, ponieważ w końcu zamierzają wycofać stary SDK. Wielkie zmiany to przepływ logowania i wywoływanie otwartych wykresów. Okno dialogowe wzywa do umieszczenia na ścianie wciąż wciągniętej z wycofanych nagłówków. Do metod jesteś zainteresowany by je wymienić, co następuje:

[ad.facebook zezwolić na: perms]

FBSession *session = [[FBSession alloc] initWithAppID:appId 
           permissions:permissionsArray 
          urlSchemeSuffix:urlSuffix 
         tokenCacheStrategy:nil]; 

[FBSession setActiveSession:session]; 
if(allowLoginUI == YES) 
{ 
    [session openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent completionHandler:handler]; 
} 
else if(session.state == FBSessionStateCreatedTokenLoaded) 
{ 
    [session openWithCompletionHandler:^(FBSession *_session, FBSessionState status, NSError *error) { 
     [self _sessionStateChanged:_session state:status error:error];    
    }]; 
} 
[session release]; 

widzieć dodatkowych instrukcji wdrożeniowych przy logowaniu
https://developers.facebook.com/docs/howtos/share-appid-across-multiple-apps-ios-sdk/
https://developers.facebook.com/docs/howtos/login-with-facebook-using-ios-sdk/

shouldExtendAccessToken, extendAccessTokenIfNeeded, - one już nie istnieją, a pakiet SDK na Facebooku działa w razie potrzeby buforowanie i rozszerzanie tokena. Jeśli widzisz w moim pierwszym kodzie skończonym, jeśli loginUI nie powinien być wyświetlany, ale stan sesji był w FBSessionStateCreatedTokenLoaded, nadal chcesz otworzyć sesję. Kiedy sesja jest w stanie FBSessionStateCreatedTokenLoaded to znaczy:

Jeden z dwóch stanów początkowych sesji wskazujących, że buforowane tokena było załadowany; gdy sesja jest w tym stanie, to wezwanie do otwarcia * spowoduje w otwartej sesji, bez UX lub aplikacji przełączania

kasie SessionLoginSample aby uzyskać więcej informacji.

isSessionValid - to jest teraz

FBSession.activeSession.isOpen 

dialogowych: @ andParams "pasza": params andDelegate: delegować - jest to wciąż ta sama, jednak trzeba stworzyć instancję facebook jak to wcześniej używając go:

Facebook *facebook = [[Facebook alloc] initWithAppId:FBSession.activeSession.appID andDelegate:nil]; 
facebook.accessToken = FBSession.activeSession.accessToken; 
facebook.expirationDate = FBSession.activeSession.expirationDate; 
//... normal code to setup a feed post 
[facebook dialog:@"feed" andParams:params andDelegate:self]; 
[facebook release]; 

zobaczyć https://developers.facebook.com/docs/howtos/feed-dialog-using-ios-sdk/ więcej informacji

"https://graph.facebook.com/me?fields=id,email,pierwsza nazwa & access_token =", - Wywołania wykresów są teraz znacznie prostsze. Można je również łatwo łączyć ze sobą.

//[facebook requestWithGraphPath:@"me" andDelegate:self]; would become 
[FBRequestConnection startForMeWithCompletionHandler:^ 
    (FBRequestConnection *connection, id result, NSError *error) {}]; 

//[facebook requestWithGraphPath:@"me/albums" andParams:params andHttpMethod:@"POST" andDelegate:self]; would become 
    [FBRequestConnection startWithGraphPath:@"me/albums" 
          parameters:params 
          HTTPMethod:@"POST" 
         completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {}]; 

zobaczyć https://developers.facebook.com/docs/howtos/batch-requests-ios-sdk/ uzyskać więcej informacji

+0

DZIĘKI za przemyślaną i szczegółową odpowiedź - bardzo pomocne. Kiedy dostanę szansę na ich sprawdzenie, zaznaczę to jako poprawną odpowiedź. dzięki jeszcze raz. – leontx

+0

Po prostu ciekawy, jak muszę to zrobić dokładną pracę i zastanawiałem się, ile czasu zajęło ci, żebym mógł dać przyzwoitą ocenę. Dzięki –

+0

@ JonathanDixon nie tak długo prawdopodobnie 2-3 godziny. Nowy pakiet SDK nadal zawiera WSZYSTKIE stare SDK, aby można było zaatakować ten projekt w porcjach. Wystarczy wymienić to, czego potrzebujesz, a resztę pozostawić przy użyciu starego systemu. Następnie powoli ulepszaj. – odyth

Powiązane problemy