Sto utilizzando FBConnect sdk per pubblicare post sul profilo di un utente tramite la mia applicazione. Sto avendo un certo numero di problemi con questo:Problemi dell'SDBC FBConnect di Facebook su iOS
Quando il codice rilevante viene eseguito per la prima volta sul dispositivo, l'utente viene reindirizzato, come desiderato, all'app/sito web di Facebook, che gli chiede di autorizzare esso. se l'utente lo autorizza, ritorna all'applicazione, che apre un controller di visualizzazione "Connetti a Facebook" che chiede all'utente di accedere. questo è strano, poiché l'utente è già loggato, altrimenti come potrebbe autorizzare l'app ? ma immagino che questo possa essere ok, dato che non ha ancora effettuato il login attraverso l'app. dopo aver effettuato l'accesso, non fa nulla. solo la seconda volta che il codice viene eseguito, dopo che ha autorizzato l'app, l'utente ottiene la finestra di dialogo relativa alla pubblicazione.
Se l'utente non ha autorizzato l'app, quando torna alla mia app dopo la finestra di dialogo di autorizzazione, chiede all'utente di effettuare il login (come se fosse autorizzato), e non fa nulla dopo aver effettuato l'accesso. la seconda volta che viene eseguito il codice, viene visualizzata la finestra di dialogo di autorizzazione con gli optinos "Autorizza" & "Lascia App", invece di "Autorizza" & "Non autorizzare"/"Permetti" & "Non consentire".
Inoltre, se l'utente ha cancellato la sua autorizzazione tramite le impostazioni del suo account su Facebook, anziché semplicemente chiedergli di re-autorizzarlo, appare una finestra di dialogo di Facebook (invece della finestra di dialogo post/autorizzazione), che dice: "Un Si è verificato un errore. Riprova più tardi. " Provare più tardi non aiuta. scatterà sempre, anche se riavvii l'app. l'unico modo per farla sparire è reinstallare l'app, che farà in modo che venga nuovamente visualizzata la finestra di dialogo dell'autorizzazione.
Così qui è quello che voglio raggiungere:
- Dopo che l'utente autorizza l'applicazione, che non avrebbe dovuto effettuare nuovamente il login.
- Dopo che l'utente autorizza l'applicazione, la finestra di dialogo di registrazione si aprirà immediatamente, senza che egli debba rieseguire il codice (che viene attivato, btw, con un pulsante).
- Se l'utente non-autorizza l'applicazione, che verrà richiesto di nuovo con la finestra di dialogo di autorizzazione, invece di dialogo
- l'errore se ha rifiutato l'autorizzazione, chiamerò una funzione che visualizza un errore/etc.
Ecco il codice rilevante:
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];
}
È possibile che manchi un paio di funzioni delegate su MyViewController? Perché vedo che per qualche motivo l'ho contrassegnato come implementazione del protocollo FBDialogDelegate, sebbene non implementi alcuna funzione da lì.
Sarei davvero felice se voi ragazzi mi aiutaste, perché questo è estremamente frustrante per me. Non ho trovato nulla su questo su internet, e mi sembra di affogare qui.
Tnx in anticipo!
Probabilmente non è la risposta alla tua domanda, ma mi sembra che un problema che potresti avere sia l'istanza di Facebook che viene ricreata su ogni condivisione. Dalla documentazione sembra che l'istanza di Facebook venga generalmente aggiunta a AppDelegate e mai riassegnata quando l'app è in esecuzione. Forse leggi questo codice che ho scritto per un progetto su cui sto lavorando, potrebbe essere più facile risolvere i tuoi problemi (non è ancora perfetto, ma sembra funzionare bene per quanto riguarda la condivisione): http://stackoverflow.com/questions/7085162/facebook-connect-class-con-singleton-access-token-issue/7085809 # 7085809 –