Estoy tratando de realizar una simple operación de contabilización:

- (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 alertView botón OK (no permitas que tampoco funciona) no pasa nada! – Este comportamiento cambiado ahora con este
iOS 6 Facebook la publicación de procedimiento termina con «remote_app_id no coincide con la almacenada id» Así que en lugar de simplemente «no pasa nada» tengo un error
«El Facebook del servidor podría no cumplir con esta solicitud de acceso: remote_app_id no coincide con la almacenada id»

iOS 6 Facebook la publicación de procedimiento termina con

Así , parece que la alerta de vista del controlador haga clic en no hacer nada, mi completionHandler nunca es llamado.
Yo tengo un problema similar ya: iOS 6 integración Social – ir a la configuración de tema
Y creo que es el mismo problema. ¿Ustedes qué piensan al respecto?
P. S.
Estoy ejecutando en el MAC mini, mac OS X 10.8.1 con la última versión de xcode 4.5 (4G182) y el uso de iPhone 6.0 simulador.

AÑADIDO:
Por la Bjorn solicitar la adición de la postToFeed método aunque nunca es llamado:

- (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!";
        });
    }];
}
  • Podría usted por favor, agregue el código de su postToFeed método?
  • Si seguro, voy a agregar a la pregunta en la parte inferior
  • No estoy seguro de si esta solucionado el problema para mí cuando la tuve, pero asegúrese de realizar la instalación de tu Aplicación en Facebook correctamente. Establecer la forma en que se integra con Facebook para «Nativo de la Aplicación de iOS», rellenar el ID de Paquete (App Store ID puede ser 0, por ahora) y activar la opción «Facebook Login». Además, establecer el «Tipo de Aplicación» en la Ficha Avanzadas a Nativo/Escritorio. También puede establecer que «el Secreto de la App en el Cliente» No. Háganos saber si que ayudó a/se ha establecido correctamente
  • No puedo encontrar «Nativo de la aplicación de iOS» casilla..el resto se ha establecido correctamente
  • Es en los «Ajustes Básicos» de su Facebook App: «Seleccione la forma de su aplicación se integra con Facebook»
  • Parece que todas las opciones configuradas correctamente ahora..todavía no funciona..
  • Después de establecer el identificador del paquete el error ha cambiado: La aplicación debe solicitar un básico permiso de lectura en el momento de la instalación. Así que parece que la provisión de identificador del paquete resuelto el problema de la id, thx Bjorn
  • Como el error dice, usted puede pedir sólo permisos de lectura de basic. Este es user_about_me o email. Todo lo que aparece aquí bajo el Usuario «y Amigos de los Permisos de» debería estar bien. También note que usted no puede pedir permisos de lectura/escritura al mismo tiempo 😉
  • permítanos continuar esta discusión en el chat
  • lo sentimos, se olvidó de premio con recompensa )
  • Jeje, no hay problema 😉 Gracias!

InformationsquelleAutor Stas | 2012-09-28

2 Comentarios

  1. 97

    También he experimentado algunas dificultades cuando se trabaja con el Marco de Cuentas y el Facebook de la integración. Aquí es lo que he aprendido y cómo yo tengo trabajo.

    1. Asegúrese de que ha de instalación de la Aplicación en Facebook correctamente

    Usted necesita para establecer cómo la Aplicación se integra con Facebook para Nativo de la Aplicación de iOS e introduzca el ID del Paquete de la Aplicación en el campo designado. (Edición: tenga en cuenta que el paquete de Id son sensibles a las mayúsculas) puede configurar el ID de iTunes a 0 por ahora. Habilitar Facebook Login y establecer el Tipo de Aplicación en la ficha configuración avanzada para Nativo/Escritorio.

    También se establece el Secreto de la App en el Cliente a No.

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

    (Edit: también tiene Que garantizar la caja de arena está deshabilitado).

    2. La instalación de la Facebook App por primera vez

    Durante la primera instalación de una Aplicación a través de la nativa de Facebook integración en iOS y Mac OS X también), usted debe solicitar un básico permiso de sólo lectura! Nada como email, user_birthday y user_location está permitido aquí. El uso de user_about_me, que también es un básico permiso de lectura según el Facebook de la documentación, no funciona. Esto es bastante confuso si previamente ha trabajado con el Facebook SDK de JavaScript o el Facebook SDK para PHP, ya que se les pide los permisos básicos por defecto sin tener que hacer algo. Facebook también ha actualizado su documentación con un corto paso a paso guía sobre cómo usar el nuevo Facebook SDK en iOS 6.

    3. Solicitar permisos adicionales

    Es importante saber, que usted no puede pedir permisos de lectura y escritura al mismo tiempo. Eso también es algo que se experimenta Facebook SDK, los desarrolladores pueden encontrar confuso. Solicitar la read_stream permiso junto con el publish_stream el permiso de hacer la solicitud de fallar, lo que produce el error Una aplicación no puede aks para permisos de lectura y escritura al mismo tiempo.

    Como Facebook, realmente no distinguir entre los permisos de lectura/escritura en el Permiso De Referencia, debe identificar permisos de escritura por sí mismo. Por lo general están señaladas con manage_*, publish_*, create_* o sufijo *_management.

    Facebook también se recomienda no pedir permisos adicionales inmediatamente después de la obtención de permisos básicos. El documentación dice que «ahora es necesario para solicitar la lectura y publicar permiso por separado (y en ese orden). Lo más probable es que va a solicitar los permisos de lectura para la personalización cuando se inicia la aplicación y el usuario se registra primero en. Más tarde, si procede, su aplicación puede solicitar permisos de publicación cuando se tiene la intención de publicar los datos de Facebook. […] Pidiendo los dos tipos por separado también mejora en gran medida las posibilidades de que los usuarios de la subvención de los permisos de publicación, ya que su aplicación sólo buscan ellos en el momento en que los necesita, más probable es que cuando el usuario tiene una fuerte intención.».

    4. Código De Ejemplo

    El siguiente ejemplo de código 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]);
        }
    }];
    • En el paso 1 asegúrese de asegúrese de buscar en la ficha avanzadas en developer.facebook.com/apps para Tipo de Aplicación y el Secreto de la App. Además, Facebook dice que va a tardar «varios minutos» para golpear a todos sus servidores, pero se tomó unos 30m supongo que cuando vi este con el Facebook 3.1.1 SDK.
    • Hola, u puede decirme por favor el auto.facebookAccount es que tipo . me refiero a lo que tengo que declarar? @Björn Kaiser
    • HOLA.. he configurado correctamente como usted ha dicho, pero todavía estoy recibiendo este error «El Facebook del servidor podría no cumplir con esta solicitud de acceso: El proxy de la aplicación no puede solicitar permisos de publicación sin que haya sido instalado previamente.» @Björn Kaiser
    • Sí es resuelto ahora he añadido user_about_me en los permisos ahora he cambiado a user_location @Björn Kaiser
    • Pero, no es entrar en este bucle si(concedida ) { NSArray *accountsArray = [accountStore accountsWithAccountType:accountType]; . Por favor me Ayudan @Björn Kaiser
    • ¿Recibe algún error en los registros?
    • Gracias u .. Buena Explicación me ayudó mucho @Björn Kaiser
    • Gracias . quiero dar permiso de escritura y el mensaje de post en mi muro . estoy acostumbrado «graph.facebook.com/me/feed» url . pero obtener el código de estado de error 403 . ¿cómo puedo publicar mensajes en el uso de los piensos ?
    • echa un vistazo en este p-a: stackoverflow.com/questions/13817590/…
    • Me estoy poniendo un «400» la respuesta, que he averiguado es un «Mal» Solicitud de uso de SLRequest. ¿Cómo es que esto es así? Puedo seleccionar mi cuenta, y guardarlo. Sólo parece haber una falta de acceso token?
    • Todavía el ‘400’ código de respuesta y estoy en una pérdida. Yo no sabía que podía etiqueta con usted para informarle de mi pregunta..
    • Por favor, abre una nueva pregunta aquí sobre ESO. Asegúrese de incluir todos los pertinentes códigos de error y mensajes.
    • cómo un NSDictionary *dict puede tener setObject método? setObject está disponible para NSMutableDictionary sólo!
    • Ups, tienes razón. Me fijo, es ahora un NSMutableDictionary como debe ser.
    • Kaiser Gracias. su respuesta es muy útil para la solución de mi facebook de error. y para que yo te de upvote. gracias…..
    • A la hora de pedir permisos básicos sólo, ¿por qué estás preguntando por «correo electrónico» de los permisos? Es que justo seleccionadas al azar permiso básico?
    • Lo siento por volver a usted tan tarde. Sí, yo lo elegí al azar. Yo no encontrar el lugar exacto en la documentación, pero que yo recuerde usted puede elegir entre «email», «user_birthday», o «user_location».
    • Giga-upvote. Gracias por aclarar esta molestia de arriba.

  2. 12

    asegúrese de sandbox mode no está activado si usted está tratando de acceder a facebook cuenta a partir de la aplicación para los no desarrolladores usuarios.

    • aparte de otra respuesta, esto también ayudó
    • Además, las cuentas de prueba son GRANDES. Script para hacer uno aquí: gist.github.com/6971496

Dejar respuesta

Please enter your comment!
Please enter your name here