2012-10-02 7 views
5

Queremos actualizar a 3.x para que nuestros usuarios en iOS 6/iPhone 5 tengan la experiencia de FB más optimizada posible ... dado que, estoy enfrentando ¿una reescritura de integración FB, o es posible para mí utilizar los encabezados depreciados y continuar utilizando las API 2.x con el SDK 3.1?Problemas migrando de Facebook iOS SDK 2.x a 3.x

Algunos de los métodos y las peticiones que está confiando en clave son: [ad.facebook autorizar: las permanentes], shouldExtendAccessToken, extendAccessTokenIfNeeded, isSessionValid, de diálogo: @ andParams "alimentar": params andDelegate: delegado, "https : //graph.facebook.com/me? fields = id, email, first_name & access_token = ", et.al. Algunas búsquedas en los proyectos de ejemplo 3.1 hacen que parezca que todos estos han sido reemplazados, y me imagino que no se trata solo de cambios de nombre.

No he encontrado una versión 2.x a 3.x de este Upgrading from 3.0 to 3.1 - si he pasado por alto eso, por favor avise. Cuando anteriormente intenté actualizar a la versión 3.0 recientemente, tropecé con roturas significativas (encabezados de SBJson duplicados, encabezados FB no resueltos) cuando intentaba usar las API depreciadas, y una vez compilado, handleOpenURL parecía estar roto y volvería a cambiar a FB una segunda vez, luego se cuelga. Y me encontré con publicaciones que indican que podría haber problemas para deshabilitar el ARC de 3.x (no podemos usarlo ya que tenemos C++).

No me he embarcado en 2.x a 3.1. Tal vez eso sería más fácil, pero me gustaría obtener una idea de aquellos que me han precedido antes de un segundo turno al bate largo, muchas gracias.

Respuesta

9

Recientemente hice esta actualización para mi aplicación. Mi razón para hacerlo fue un flujo más suave para iOS 6 y soporte futuro para Facebook ya que eventualmente van a depreciar el viejo SDK. Los grandes cambios fueron el flujo de inicio de sesión y las llamadas de gráficos abiertos. El cuadro de diálogo llama para publicar en su muro que todavía está guardado de los encabezados obsoletos. Para los métodos que está interesado en que serían sustituidos de la siguiente manera:

[autorizar ad.facebook: las permanentes]

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

ver para obtener instrucciones adicionales de aplicación de inicio de sesión
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, - estos ya no están y el SDK de Facebook implementa menciona el almacenamiento en caché y extiende el token si es necesario. Si ve en mi primer snippit de código si se supone que no debe mostrar loginUI, pero el estado de la sesión fue en FBSessionStateCreatedTokenLoaded, aún desea abrir la sesión. Cuando la sesión está en el estado FBSessionStateCreatedTokenLoaded que significa:

Uno de los dos estados de las sesiones iniciales que indican que una ficha en caché era cargado; cuando una sesión está en este estado, una llamada para abrir * resultará en una sesión abierta, sin UX o aplicación de conmutación de

la caja del SessionLoginSample para obtener más información.

isSessionValid - esto es ahora

FBSession.activeSession.isOpen 

diálogo: andParams @ "piensos": params andDelegate: delegar - esto sigue siendo la misma, sin embargo hay que crear la instancia de facebook como esto antes usarlo:

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

ver https://developers.facebook.com/docs/howtos/feed-dialog-using-ios-sdk/ para obtener más información

"https://graph.facebook.com/me?fields=id,email,first_name & access_token =", - Las llamadas a gráficos ahora son mucho más simples. También puede agruparlos juntos con bastante facilidad también.

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

ver https://developers.facebook.com/docs/howtos/batch-requests-ios-sdk/ para obtener más información

+0

GRACIAS por la respuesta reflexiva y detallada, muy útil. Cuando tenga la oportunidad de validar estos, me aseguraré de marcar esto como la respuesta correcta. gracias de nuevo. – leontx

+0

Es curioso porque tengo que hacer este trabajo exacto y me preguntaba cuánto tiempo te tomó para poder darte una estimación decente. Gracias –

+0

@JonathanDixon no tan largo probablemente 2-3 horas. El nuevo SDK todavía incluye TODO el antiguo SDK para que pueda atacar este proyecto en pedazos. Simplemente reemplace lo que necesita y deje el resto usando el sistema anterior. Luego, actualice lentamente. – odyth

Cuestiones relacionadas