having trouble with Facebook iOS SDK v 3.1.1

2019-07-16 18:13发布

问题:

My app is now using the Facebook SDK version 3.1.1 for iOS.

On iOS6 I'm noticing strange behavior with the FBSession expirationDate. The date is always set to the year 4001 (distant future?). I've read that this can be related to offline_access permission but we're not asking for that (we did at one time, in a very old version of the app. But this is a fresh install on a clean image.)

Per the FB SDK guidelines we always ask for basic read permissions first via FBSession openActiveSessionWithReadPermissions. The session expiration date returned is always 4001-01-01. Later, when we want to post, we call FBSession reauthorizeWithPublishPermissions, asking for publish_action.

This all seems to work fine until the token expires. I only noticed the expirationDate issue because I found that we were passing expired tokens to the graph API, and those calls were failing.

But this shouldn't happen, right? - whenever the app starts cold we're calling FBSession openActiveSessionWithReadPermissions, and whenever the app becomes active we call FBSession handleDidBecomeActive. This should be correct to refresh any expired active token, yes?

What am I likely doing wrong, and what are some things to check? And why is the expirationDate set to 4001?

Edit:

I think my issue is related to what is described here: Expired access token after openActiveSession for Facebook iOS SDK

I'm not using any of the FB SDK support for calling the graph API's. So I'm not taking advantage of the apparently built-in SDK support for refreshing the iOS6-managed token.

Edit 2:

I think this is an exact duplicate of my issue:

iOS 6 Facebook Login not refreshing access token

also referenced here: http://developers.facebook.com/bugs/441739699216684?browse=search_5099512da57214b73000801

回答1:

The offline_access permission did in fact return an auth token that expired in the year 4001.

In my experience so far, iOS 6's native FB auth always returns a token whose expiration date is recorded (in your app's plist) as the year 4001 as well, but whose actual expiration date is much different, according to the FB token debugger. In short, don't rely on the value stored on the phone. Somehow there's a disconnect.

I too had the same assumptions as you did (calling FBSession openActive... and handleDidBecomeActive) about my token getting refreshed by calling those methods, but that didn't pan out for me either.

In your updates, you linked to a similar question I posed, and I just added my solution. You can check it out here: http://facebook.stackoverflow.com/questions/13125430/ios-6-facebook-login-not-refreshing-access-token#answer-13298770

Hopefully this helps!