Ich habe vor kurzem begonnen, Facebook SDK 3.1 zu verwenden, und habe einige Probleme mit der Anmeldung mit openActiveSessionWithReadPermissions
.openActiveSessionWithReadPermissions meldet sich nicht automatisch an
Eigentlich funktioniert Loggin perfekt, wenn es ein zwischengespeichertes Token gibt, meldet es sich an, ohne Facebook-UI zu präsentieren, und wenn nicht, stellt es die UI dar.
Das Problem tritt auf, nachdem ich einen Anruf an reauthorizeWithPublishPermissions
. Wenn ich rufe reauthorizeWithPublishPermissions
, dann schließen und öffnen Sie die Anwendung, und einen Anruf an openActiveSessionWithReadPermissions
, stellt es die Facebook-Benutzeroberfläche und fordert den Benutzer zu sagen, "Ja, ich bin OK mit Leseberechtigungen", obwohl ein Cache-Token verfügbar ist.
Es zeigt die Facebook-Benutzeroberfläche nur fälschlicherweise an, wenn ich reauthorizeWithPublishPermissions
anrufe, sonst funktioniert alles gut.
Öffnen für Lesecode:
[FBSession openActiveSessionWithReadPermissions:readpermissions allowLoginUI:YES
completionHandler:^(FBSession *aSession, FBSessionState status, NSError *error) {
[self sessionStateChanged:[FBSession activeSession] state:status error:error];
if (status != FBSessionStateOpenTokenExtended) {
// and here we make sure to update our UX according to the new session state
FBRequest *me = [[FBRequest alloc] initWithSession:aSession
graphPath:@"me"];
[me startWithCompletionHandler:^(FBRequestConnection *connection,
NSDictionary<FBGraphUser> *aUser,
NSError *error) {
self.user = aUser;
aCompletionBlock(aSession, status, error);
}];
}
}];
die sessionStateChanged Funktion:
- (void)sessionStateChanged:(FBSession *)aSession state:(FBSessionState)state error:(NSError *)error {
if (aSession.isOpen) {
// Initiate a Facebook instance and properties
if (nil == self.facebook || state == FBSessionStateOpenTokenExtended) {
self.facebook = [[Facebook alloc]
initWithAppId:FBSession.activeSession.appID
andDelegate:nil];
// Store the Facebook session information
self.facebook.accessToken = FBSession.activeSession.accessToken;
self.facebook.expirationDate = FBSession.activeSession.expirationDate;
}
} else {
// Clear out the Facebook instance
if (state == FBSessionStateClosedLoginFailed) {
[FBSession.activeSession closeAndClearTokenInformation];
}
self.facebook = nil;
}
}
den Anruf veröffentlichen, mit einem leeren aPublishAction für die Prüfung:
- (void)doPublishAction:(void(^)(FBSession *aSession, NSError *error))aPublishAction {
if ([FBSession.activeSession.permissions
indexOfObject:@"publish_actions"] == NSNotFound) {
NSArray *writepermissions = [[NSArray alloc] initWithObjects:
@"publish_stream",
@"publish_actions",
nil];
[[FBSession activeSession]reauthorizeWithPublishPermissions:writepermissions defaultAudience:FBSessionDefaultAudienceFriends completionHandler:^(FBSession *aSession, NSError *error){
if (error) {
NSLog(@"Error on public permissions: %@", error);
}
else {
aPublishAction(aSession, error);
}
}];
}
else {
// If permissions present, publish the story
aPublishAction(FBSession.activeSession, nil);
}
}
Vielen Dank für alles im Voraus Ich wäre dankbar für jede Hilfe !!
Ich denke, publish_actions ist alles was Sie brauchen. Ich denke, es umfasst jetzt publish_stream. – SAHM
Haben Sie jemals eine Lösung dafür gefunden? Ich habe genau das gleiche Problem. – Casey
Lösung nie gefunden, wir haben tatsächlich aufgehört, veröffentlichen Berechtigungen, so dass wir nie eine Lösung finden mussten. –