[iOS] Facebook Error: The Facebook server could not fulfill this access request: The app must ask for a basic read permission at install time.
I encountered an error when implementing Facebook authentication with Facebook iOS SDK version 3.5.1.
Error Logerror:Error Domain=com.facebook.sdk Code=2 “The operation couldn’t be completed. (com.facebook.sdk error 2.)” UserInfo=0x1e8b2740 {com.facebook.sdk:ErrorLoginFailedReason=com.facebook.sdk:SystemLoginCancelled, com.facebook.sdk:ErrorInnerErrorKey=Error Domain=com.apple.accounts Code=7 “The Facebook server could not fulfill this access request: The app must ask for a basic read permission at install time.” UserInfo=0x1ddf1eb0 {NSLocalizedDescription= The Facebook server could not fulfill this access request: The app must ask for a basic read permission at install time. }, com.facebook.sdk:ErrorSessionKey=<FBSession: 0x1ddabd90, state: FBSessionStateClosedLoginFailed, loginHandler: 0x0, appID: 336861069774973, urlSchemeSuffix: , tokenCachingStrategy:<FBSessionTokenCachingStrategy: 0x1dd91670>, expirationDate: (null), refreshDate: (null), attemptedRefreshDate: 0001-12-30 00:00:00 +0000, permissions:(null)>}
Initially, I was trying to get only publish_actions using openActiveSessionWithPublishPermissions as follows, but according to the error message “The app must ask for a basic read permission at install time.”, you need to first request basic profile information.
+ (void)connectWithCompletionHandler:(void(^)(FBSession *session, FBSessionState status, NSError *error))handler {
NSLog(@"Connection");
if ([[FBSession activeSession] isOpen]) {
NSLog(@"Logout");
[[FBSession activeSession] closeAndClearTokenInformation];
}
// Request publish permissions
NSArray *publishPermissions = [NSArray arrayWithObjects:@"publish_actions", nil];
[FBSession openActiveSessionWithPublishPermissions:publishPermissions
defaultAudience:FBSessionDefaultAudienceFriends
allowLoginUI:YES
completionHandler:handler];
}
So, you can fix this by first calling openActiveSessionWithReadPermissions as shown below:
+ (void)connectWithCompletionHandler:(void(^)(FBSession *session, FBSessionState status, NSError *error))handler {
NSLog(@"Connection");
if ([[FBSession activeSession] isOpen]) {
NSLog(@"Logout");
[[FBSession activeSession] closeAndClearTokenInformation];
}
// Request basic profile information
// 基本情報で必要なものがある場合、指定する
// NSArray *readPermissions = [NSArray arrayWithObjects:@"email", @"user_birthday", nil];
NSArray *readPermissions = nil;
[FBSession openActiveSessionWithReadPermissions:readPermissions
allowLoginUI:NO
completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
/* handle success + failure in block */
}];
// Request publish permissions
NSArray *publishPermissions = [NSArray arrayWithObjects:@"publish_actions", nil];
[FBSession openActiveSessionWithPublishPermissions:publishPermissions
defaultAudience:FBSessionDefaultAudienceFriends
allowLoginUI:YES
completionHandler:handler];
}
[Reference]
・Facebook iOS SDK3.5で投稿処理を行う際の流れ(その2) - assaulter’s diary
That’s all from the Gemba.