[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.