I have followed many examples and looked at many questions regarding this access token error, but I can't seem to find out why I am getting it or how to fix it.
I init Facebook like they do in the 3.1 sdk examples:
NSArray* permissions = [[NSArray alloc] initWithObjects:@"publish_stream", @"publish_actions", nil];
self.fb = [[FBSession alloc] initWithPermissions:permissions];
[self.fb openWithCompletionHandler:^(FBSession *session,
FBSessionState status,
NSError *error)
{
[self sessionStateChanged:session :status :error];
}];
This works fine and the user is asked to accept the app permissions in Safari and is returned to the app afterwards. When the user is returned to the app, my FBSessionState is FBSessionStateOpen.
When I try this:
[FBRequestConnection startForMeWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error)
{
[self showAlert:@"logged in?" result:result error:error];
}];
or this:
NSMutableDictionary* fbPost = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"post from iOS", @"message", nil];
[FBRequestConnection startWithGraphPath:@"me/feed" parameters:fbPost HTTPMethod:@"POST" completionHandler:^(FBRequestConnection *connection, id result, NSError *error)
{
[self showAlert:@"message posted?" result:result error:error];
}];
but I get:
FBSDKLog: FBURLConnection <#1126>:
Duration: 936 msec
Response Size: 0 kB
MIME type: text/javascript
Response:
{"error":{"message":"An active access token must be used to query information about the current user.","type":"OAuthException","code":2500}}
I have taken the access token from my FBSession and put it into Facebook's Access Token Debugger and it shows I have a good token:
App ID: <hidden>
Metadata: {"sso":"iphone-safari"}
User ID: <hidden>
Issued: 1351525817 (about an hour ago)
Expires: 1356709817 (in about 2 months)
Valid: True
Origin: Mobile Web Faceweb
Scopes: create_note photo_upload publish_actions publish_stream share_item status_update video_upload
I must be missing some small detail in the settings or something.
Thank you all in advance!
In Xcode, click File > Swift Packages > Add Package Dependency. In the dialog that appears, enter the repository URL: https://github.com/facebook/facebook-ios-sdk. In Version, select Up to Next Major and the default option. Complete the prompts to select the libraries you want to use in your project.
When your app uses Facebook Login to authenticate someone, it receives a User access token. If your app uses one of the Facebook SDKs, this token lasts for about 60 days. However, the SDKs automatically refresh the token whenever the person uses your app, so the tokens expire 60 days after last use.
According to the docs, https://developers.facebook.com/docs/reference/ios/3.1/class/FBRequestConnection
"The request uses the active session represented by [FBSession activeSession]."
This applies to the static methods dealing with requests. So what you want to do is make sure you set the active session. Do the following:
[FBSession setActiveSession:self.fb];
Just before you call the first FBRequestConnection start* method.
Well After some time, noticing that FBSession.activeSession was not nil, what I was missing before sending the request was:
if (!FBSession.activeSession.isOpen) {
[FBSession openActiveSessionWithAllowLoginUI: YES];
}
I got this error in v4 of the SDK when attempting to use a FBSDKGraphRequest
object that had been created before logging in. When I changed this to create the FBSDKGraphRequest
immediately before using it (i.e. after having logged in) it worked fine. It seems the initializer for this class sets some token that isn't refreshed when the request is started.
I tried updating the request's tokenString
property after logging in, but for some reason this is a readonly
property.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With