Ich habe eine Schaltfläche, um einen Link zu teilen. Ich verwende grundsätzlich zwei Anrufe: openActiveSessionWithReadPermissions
und requestNewPublishPermissions
.Facebook iOS SDK 3.5.1: openActiveSessionWithReadPermissions - Abschluss-Handler zweimal aufgerufen
Das ist also die Button-Aktion:
- (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];
}
}
und damit ich um Erlaubnis zu veröffentlichen, wenn keine permissione in Sitzung
-(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 nur Beiträge etwas
gefunden-(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
}
}];
}
Das erste Mal versuche ich zu teilen (bereits angemeldet FB in iOS6 und App bereits autorisiert) Der Beendigungshandler openActiveSessionWithReadPermissions
wird zweimal aufgerufen: einmal mit FBSessionStateOpen und einmal mit FBSessionStateOpenTokenExtended (aus dem Aufruf openSessionForPublishPermissions). Als Folge wird _share
auch zweimal aufgerufen, zum ersten Mal im else
Teil von _prepareShare
(wenn ich bereits veröffentlichen Berechtigungen habe) und das zweite Mal im Abschluss-Handler von openSessionForPublishPermissions. Also ich habe einen doppelten Post auf Facebook Wall, nur das erste Mal, dass ich jemals in der App teile. Ich hatte auch einen Absturzbericht für FBSession: It is not valid to reauthorize while a previous reauthorize call has not yet completed
(ich konnte es nicht wieder passieren lassen).
Was ist der richtige Weg, um mit dieser Situation umzugehen?
Bitte beachten Sie die Antwort in diesem Beitrag: [1] [1] [link Beschreibung hier eingeben]: http://stackoverflow.com/questions/12915420/facebook-ios-3-1- sdk-login-mit-Publish-Erlaubnis-Rückrufe – Chengjiong