El procedimiento de publicación en Facebook de iOS 6 termina con el error “remote_app_id no coincide con el ID almacenado”

Estoy tratando de realizar un procedimiento de publicación simple:

- (IBAction)directPostClick:(id)sender { self.statusLabel.text = @"Waiting for authorization..."; if (self.accountStore == nil) { self.accountStore = [[ACAccountStore alloc] init]; } ACAccountType * facebookAccountType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; NSArray * permissions = @[@"publish_stream", @"user_checkins", @"publish_checkins", @"user_likes", @"user_videos"]; NSDictionary * dict = @{ACFacebookAppIdKey : @"My app id here", ACFacebookPermissionsKey : permissions, ACFacebookAudienceKey : ACFacebookAudienceOnlyMe}; [self.accountStore requestAccessToAccountsWithType:facebookAccountType options:dict completion:^(BOOL granted, NSError *error) { __block NSString * statusText = nil; if (granted) { statusText = @"Logged in"; NSArray * accounts = [self.accountStore accountsWithAccountType:facebookAccountType]; self.facebookAccount = [accounts lastObject]; NSLog(@"account is: %@", self.facebookAccount); self.statusLabel.text = statusText; [self postToFeed]; } else { self.statusLabel.text = @"Login failed"; NSLog(@"error is: %@", error); } }]; } 

EDITADO: El problema es que cuando hago clic en el botón Aceptar de alertView (no permitir tampoco funciona) ¡no pasa nada! – Este comportamiento cambió ahora con este procedimiento de publicación en Facebook de iOS 6 que termina con “ID de aplicación remota no coincide con ID almacenado” Entonces, en lugar de simplemente “no pasa nada”, tengo un error “El servidor de Facebook no pudo completar esta solicitud de acceso: remote_app_id no coincide con el ID almacenado ”

enter image description here

Por lo tanto, parece que el manejador de clics de la vista de alerta no hace nada, nunca se invoca mi terminación. Ya tengo el problema similar: iOS 6 Integración social: ve al tema de configuración Y creo que es el mismo problema aquí. ¿Qué piensan ustedes al respecto? PD Estoy ejecutando en MAC mini, OS X 10.8.1 con la última versión de xcode 4.5 (4G182) y usando el simulador de iPhone 6.0.

AGREGADO: Por la solicitud de Bjorn agregando el método postToFeed aunque nunca se llame:

 - (void)postToFeed { NSDictionary * parameters = @{@"message" : @"Hello world!"}; NSURL * feedUrl = [NSURL URLWithString:@"https://graph.facebook.com/me/feed"]; SLRequest * request = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodPOST URL:feedUrl parameters:parameters]; request.account = self.facebookAccount; [request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { dispatch_async(dispatch_get_main_queue(), ^{ self.statusLabel.text = @"Posted!"; }); }]; } 

También experimenté algunas dificultades al trabajar con el Marco de cuentas y la integración de Facebook. Esto es lo que aprendí y cómo lo hice funcionar.

1. Asegúrate de haber configurado correctamente tu aplicación en Facebook
Debes establecer cómo se integra tu aplicación con Facebook a la aplicación nativa de iOS e ingresar la identificación del paquete de tu aplicación en el campo designado. (Editar: tenga en cuenta que los ID de paquete son sensibles a las mayúsculas y minúsculas). Puede configurar la ID de iTunes en 0 por ahora. Habilite el inicio de sesión de Facebook y configure el tipo de aplicación en la pestaña de configuración avanzada en Native / Desktop .
También configure App Secret en Client en No.

Si una o más de estas opciones no están configuradas correctamente, es muy probable que obtenga el error. The Facebook server could not fulfill this access request: remote_app_id does not match stored id .

(Editar: también debe asegurarse de que el sandbox esté desactivado).

2. Instalar la aplicación de Facebook por primera vez
Cuando instala por primera vez una aplicación a través de la integración nativa de Facebook en iOS (y Mac OS X también), ¡debe solicitar solo un permiso de lectura básico! Nada más, como el email , user_birthday y user_location está permitido aquí. Usar user_about_me , que también es un permiso de lectura básico según la documentación de Facebook, no funciona. Esto es bastante confuso si trabajó anteriormente con el JavaScript SDK de Facebook o el PHP SDK de Facebook, porque solicita los permisos básicos de manera predeterminada sin tener que hacer nada. Facebook también actualizó su documentación con una breve guía paso a paso sobre cómo usar el nuevo SDK de Facebook en iOS 6.

3. Solicitar permisos adicionales
Es importante saber que no puede solicitar permisos de lectura y escritura al mismo tiempo. Eso también es algo experimentado que los desarrolladores de SDK de Facebook pueden encontrar confuso. Solicitar el permiso read_stream junto con el permiso publish_stream hará que la solicitud falle, lo que provocará el error. Es posible que una aplicación no solicite permisos de lectura y escritura al mismo tiempo .

Como Facebook realmente no distingue entre permisos de lectura / escritura en la Referencia de permisos , debe identificar los permisos de escritura por usted mismo. Por lo general, publish_* prefijo manage_* , publish_* , create_* o sufijos por *_management .

Facebook tampoco recomienda solicitar permisos adicionales inmediatamente después de obtener los permisos básicos. La documentación dice “Ahora está obligado a solicitar permisos de lectura y publicación por separado (y en ese orden). Lo más probable es que solicite los permisos de lectura para la personalización cuando la aplicación se inicie y el usuario primero inicie sesión. Más adelante, si corresponde, su la aplicación puede solicitar permisos de publicación cuando tenga la intención de publicar datos en Facebook. Solicitar […] los dos tipos por separado también mejora enormemente las posibilidades de que los usuarios otorguen los permisos de publicación, ya que su aplicación solo los buscará en el momento que lo necesite. ellos, más probablemente cuando el usuario tiene una intención más fuerte “.

4. Código de muestra
El siguiente código de ejemplo debería funcionar en iOS y Mac OS X:

 ACAccountType * facebookAccountType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; // At first, we only ask for the basic read permission NSArray * permissions = @[@"email"]; NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"My app id here", ACFacebookAppIdKey, permissions, ACFacebookPermissionsKey, ACFacebookAudienceOnlyMe, ACFacebookAudienceKey, nil]; [self.accountStore requestAccessToAccountsWithType:facebookAccountType options:dict completion:^(BOOL granted, NSError *error) { if (granted && error == nil) { /** * The user granted us the basic read permission. * Now we can ask for more permissions **/ NSArray *readPermissions = @[@"read_stream", @"read_friendlists"]; [dict setObject:readPermissions forKey: ACFacebookPermissionsKey]; [self.accountStore requestAccessToAccountsWithType:facebookAccountType options:dict completion:^(BOOL granted, NSError *error) { if(granted && error == nil) { /** * We now should have some read permission * Now we may ask for write permissions or * do something else. **/ } else { NSLog(@"error is: %@",[error description]); } }]; } else { NSLog(@"error is: %@",[error description]); } }]; 

asegúrese de que el sandbox mode no esté activado si está intentando acceder a la cuenta de Facebook desde la aplicación para usuarios que no sean desarrolladores.