2012-10-02 2 views
5

Wir möchten auf 3.x upgraden, damit unsere Benutzer auf iOS 6/iPhone 5 die bestmögliche FB-Erfahrung haben ... vorausgesetzt, dass ich konfrontiert bin eine FB-Integration neu schreiben, oder ist es mir möglich, die veralteten Header zu verwenden und weiterhin die 2.x APIs mit dem 3.1 SDK zu verwenden?Probleme bei der Migration von Facebook iOS SDK 2.x auf 3.x

Einige der wichtigsten Methoden und Anfragen, die wir angewiesen sind, sind: [ad.facebook autorisieren: perms], shouldExtendAccessToken, extendAccessTokenIfNeeded, isSessionValid, Dialog: @ "feed" andParams: params andDelegate: Delegierter, „https : //graph.facebook.com/me? fields = ID, E-Mail, Vorname & access_token = ", et.al. Bei einigen Suchvorgängen in den 3.1-Beispielprojekten sieht es so aus, als wären diese alle ersetzt worden - und ich könnte mir vorstellen, dass es nicht nur Namensänderungen sind.

Ich habe keine 2.x bis 3.x Version dieser Upgrading from 3.0 to 3.1 gefunden - wenn ich das übersehen habe, bitte beraten.

Als ich kürzlich versuchte, auf 3.0 zu aktualisieren, stieß ich auf erhebliche Brüche (doppelte SBJson-Header, nicht auflösende FB-Header) beim Versuch, die abgeschriebenen APIs zu verwenden, und sobald es kompiliert wurde, schien handleOpenURL defekt zu sein ein zweites Mal zu FB, dann crash. Und ich bin auf Postings gestoßen, die darauf hinweisen, dass es Probleme mit der Deaktivierung von ARC von 3.x geben könnte (wir können es nicht verwenden, da wir C++ haben).

Ich habe nicht begonnen 2.x zu 3.1. Vielleicht würde das reibungsloser verlaufen, aber ich würde gerne einen Einblick von denen bekommen, die vor einem zweiten langen At-Bat vor mir waren - vielen Dank.

Antwort

9

Ich habe gerade dieses Upgrade für meine App durchgeführt. Mein Grund dafür war ein flüssigerer Flow für iOS 6 und die zukünftige Unterstützung von Facebook, da sie den alten SDK möglicherweise ablehnen werden. Die großen Änderungen waren Login Flow und Open Graph Calls. Der Dialog fordert das Posten an Ihrer Wand immer noch von den veralteten Überschriften ab. Für die Methoden sind Sie interessiert sie wie folgt ersetzt werden würde:

[ad.facebook autorisieren: 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]; 

für zusätzliche Durchführungsanweisungen auf Login
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/

sehen

shouldExtendAccessToken, extendAccessTokenIfNeeded, - diese sind jetzt weg und das Facebook SDK implementiert das Zwischenspeichern und Erweitern des Tokens bei Bedarf. Wenn Sie in meinem ersten Code Snippit sehen, wenn das LoginUI nicht angezeigt werden soll, aber der Sitzungsstatus in FBSessionStateCreatedTokenLoaded war, möchten Sie die Sitzung trotzdem öffnen. Wenn Sie Ihre Sitzung im Zustand FBSessionStateCreatedTokenLoaded heißt es:

Einer der beiden ersten Sitzung Zustände anzeigt, dass eine im Cache gespeicherte Token geladen wurde; wenn eine Sitzung in diesem Zustand befindet, um einen Anruf zu öffnen * in einer offenen Sitzung führen, ohne UX oder App-Schalt die SessionLoginSample für weitere Informationen

Kasse.

isSessionValid - das ist jetzt

FBSession.activeSession.isOpen 

Dialog: @ "feed" andParams: params andDelegate: delegieren - das ist immer noch die gleichen, aber Sie so die Facebook-Instanz erstellen, bevor mit ihm:

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]; 

https://developers.facebook.com/docs/howtos/feed-dialog-using-ios-sdk/ für weitere Informationen siehe

"https://graph.facebook.com/me?fields=id,email,first_name & access_token =", - Die Graphaufrufe sind jetzt viel einfacher. Sie können sie auch sehr einfach zusammenstellen.

//[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) {}]; 

siehe https://developers.facebook.com/docs/howtos/batch-requests-ios-sdk/ für weitere Informationen

+0

DANKE für die durchdachte und detaillierte Antwort - sehr hilfreich. Wenn ich die Möglichkeit habe, diese zu validieren, werde ich sicherstellen, dass dies die richtige Antwort ist. Danke noch einmal. – leontx

+0

Nur neugierig, wie ich genau diesen Job machen muss und ich fragte mich, wie lange es dauerte, damit ich eine anständige Schätzung geben kann. Danke –

+0

@ JonathanDixon nicht so lange wahrscheinlich 2-3 Stunden. Das neue SDK enthält weiterhin ALLE alten SDKs, sodass Sie dieses Projekt in Teilen angreifen können. Ersetzen Sie einfach, was Sie brauchen und lassen Sie den Rest mit dem alten System. Dann langsam upgraden. – odyth