que estoy usando FBConnect SDK con el fin de publicar entradas en el perfil de un usuario a través de mi solicitud. Tengo un número de problemas con esto:cuestiones FBConnect SDK de Facebook en iOS
Cuando el código relevante se ejecuta por primera vez en el dispositivo, el usuario es redirigido, como quería, a la aplicación/sitio web de Facebook, que le pide que autorice eso. si el usuario lo autoriza, se vuelve de nuevo a la aplicación, que aparece una "Conecta con Facebook" controlador de vista, que pide al usuario que ingrese. esto es raro, ya que el usuario ya está conectado, de lo contrario, ¿cómo podría autorizar la aplicación ? pero supongo que esto puede estar bien, ya que aún no había iniciado sesión a través de la aplicación. después de que inicia sesión, no hace nada. solo la segunda vez que se ejecuta el código, después de que autorizó la aplicación, el usuario obtiene el diálogo de publicación.
Si el usuario no había autorizado la aplicación, cuando se trata de volver a mi aplicación después de que el diálogo de autorización, se le pide al usuario iniciar sesión (igual que si autorizado), y no hace nada después de haber conectado la única. segunda vez que el código se corrió, se abre el diálogo de autorización, con las optinos "autorizar" & "Dejar de aplicaciones", en lugar de "autorizar" & "no autorice"/"Permitir" & "no permitir".
Además, si el usuario ha borrado su autorización a través de la configuración de su cuenta en facebook, en lugar de simplemente pidiéndole que volver a autorizar que, a estallidos de diálogo facebook (en lugar del diálogo de la post/autorización), que dice: "Un ha ocurrido un error. Por favor intente de nuevo más tarde ". Intentar más tarde no ayuda. aparecerá siempre, incluso si reinicias la aplicación. la única forma de hacer que desaparezca es volver a instalar la aplicación, lo que hará que vuelva a mostrar el cuadro de diálogo de autorización.
Así que aquí es lo que quiero lograr:
- Después de que el usuario autoriza a la aplicación, que no tendría que volver a iniciar sesión.
- Después de que el usuario autoriza la aplicación, el diálogo de publicación aparecerá immedietly, sin que éste tenga que volver a ejecutar el código (que se activa, por cierto, con un botón).
- Si el usuario no-autoriza la aplicación, se le pedirá de nuevo con el diálogo de autorización, en lugar del error de diálogo
- Si se negaba la autorización, voy a llamar a una función que muestra un error/etc.
Aquí está el código correspondiente:
MyViewController.m
- (void)shareOnFacebook
{
Facebook *facebook = [[Facebook alloc] initWithAppId:myAppID];
[(MyAppDelegate *)[[UIApplication sharedApplication] delegate] setFacebook:facebook];
[facebook release];
facebook = [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] facebook];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"] && [defaults objectForKey:@"FBExpirationDateKey"]) {
facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}
if (![facebook isSessionValid]) {
[facebook authorize:[NSArray arrayWithObjects:@"publish_stream", nil] delegate:(MyAppDelegate *)[[UIApplication sharedApplication] delegate]];
}
NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
//Giving the dictionary some parameters for posting defaults
[facebook dialog:@"feed" andParams:dictionary andDelegate:self]; //Note: we have 2 different delegates! appDelegate for connections & url switching, and self for dialogs
}
MyAppDelegate.h
@interface MyAppDelegate : NSObject <UIApplicationDelegate, FBSessionDelegate, FBDialogDelegate>
{
Facebook *facebook; // kept for facebook sharing, accessed only from MyViewController although delegate methods are handeled in here
}
@property (nonatomic, retain) Facebook *facebook;
@end
MyAppDelegate.m
- (void)fbDidLogin
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
return [self.facebook handleOpenURL:url];
}
¿Es posible que me falta un par de funciones de delegado en MyViewController? Porque veo por alguna razón que lo he marcado como la implementación del protocolo FBDialogDelegate, aunque no implementa ninguna función desde allí.
Estaría muy contento si ustedes me ayudaría, ya que esto es muy frustrante para mí. No pude encontrar nada sobre esto en Internet, y siento que me estoy ahogando aquí.
Tnx por adelantado!
Probablemente no sea la respuesta a su pregunta, pero me parece que uno de los problemas que podría tener es la instancia de Facebook que se recrea en cada recurso compartido. Según la documentación, parece que la instancia de Facebook generalmente se agrega a AppDelegate y nunca se reasigna cuando la aplicación se está ejecutando. Tal vez revise este código que escribí para un proyecto en el que estoy trabajando, podría ser más fácil resolver sus problemas (aún no es perfecto, pero parece funcionar bien en lo que respecta al uso compartido): http://stackoverflow.com/questions/7085162/facebook-connect-class-with-singleton-access-token-issue/7085809 # 7085809 –