The answer - and it took me a long time to find - initWithSession:FBSession.activeSession should be initWithSession:nil , and the access token should be set in the parameters NSDictionary field as [parameters setObject:yourAccessToken forKey:@"access_token"] . The access token in FBSession.activeSession overrides the access_token parameter in the parameters (which it should not IMHO), making the message appear as a fan post, rather than a page as a page.
[d addObject:yourFetchedAccessTokenString forKey:@"access_token"]; FBRequest *request = [[FBRequest alloc] initWithSession:nil graphPath:graphPath parameters:d HTTPMethod:@"POST"];
Of course, there are other problems, for example, how long the access token will remain idle, which requires token caching schemes: https://developers.facebook.com/docs/howtos/token-caching-ios-sdk/
Found the answer here: https://github.com/facebook/facebook-ios-sdk/pull/483
source share