Ho un pulsante per condividere un collegamento. Sto usando fondamentalmente due chiamate: openActiveSessionWithReadPermissions
e requestNewPublishPermissions
.Facebook iOS SDK 3.5.1: openActiveSessionWithReadPermissions - gestore di completamento chiamato due volte
Quindi questo è l'azione tasto:
- (IBAction) shareFacebookButtonAction:(id)sender
if (![[FBSession activeSession] isOpen])
{
NSArray *permissions = @[@"read_friendlists", @"email"];
[FBSession openActiveSessionWithReadPermissions:permissions
allowLoginUI:YES
completionHandler:^(FBSession *session,
FBSessionState state,
NSError *error)
{
if (FB_ISSESSIONOPENWITHSTATE([session state]))
{
[self _prepareShare];
}
else
{
// show alert view with error
}
}];
}
else
{
[self _prepareShare];
}
}
e con questo sto chiedendo il permesso pubblicare, se non permissione si trovano in sessione
-(void) _prepareShare;
{
if ([FBSession.activeSession.permissions
indexOfObject:@"publish_actions"] == NSNotFound)
{
[FBSession.activeSession
requestNewPublishPermissions:
[NSArray arrayWithObject:@"publish_actions"]
defaultAudience:FBSessionDefaultAudienceFriends
completionHandler:^(FBSession *session, NSError *error)
{
if (!error)
{
[self _share];
}
else
{
//error
}
}];
} else
{
[self _share];
}
}
_share solo i messaggi qualcosa
-(void) _share;
{
NSMutableDictionary *params_dict = [NSMutableDictionary dictionary];
// setting some params
[FBRequestConnection startWithGraphPath:@"me/feed" parameters:params_dict HTTPMethod:@"POST" completionHandler:^(FBRequestConnection *connection, id result, NSError *error)
{
if (result)
{
// sharing succedeed, do something
}
else if (error)
{
//sharing failed, do something else
}
}];
}
Prima volta provo a condividere (FB già connesso in iOS6 e app già autorizzata) il gestore di completamento di openActiveSessionWithReadPermissions
viene chiamato due volte: una volta con FBSessionStateOpen e una volta con FBSessionStateOpenTokenExtended (dalla chiamata openSessionForPublishPermissions). Di conseguenza, _share
viene anche chiamato due volte, la prima volta nella parte else
di _prepareShare
(se ho già autorizzazioni di pubblicazione) e la seconda volta nel gestore di completamento di openSessionForPublishPermissions. Quindi ho un doppio post sulla bacheca di Facebook, solo la prima volta che condivido l'app. Ho anche avuto un rapporto di incidente per FBSession: It is not valid to reauthorize while a previous reauthorize call has not yet completed
(non potrei essere in grado di farlo accadere di nuovo).
Qual è il modo corretto di gestire questa situazione?
Si prega di vedere la risposta in questo post: [entra Descrizione collegamento qui] [1] [1]: http://stackoverflow.com/questions/12915420/facebook-ios-3-1- sdk-login-with-publish-permission-callbacks – Chengjiong