Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <hr> <p><strong>UPDATE</strong>: This issue has been addressed in Facebook iOS SDK 3.1.1.</p> <hr> <p>I synched the code off of github and found that they weren't calling <code>accountStore renewCredentialsForAccount:completion:</code> anywhere. I changed the following code in <code>authorizeUsingSystemAccountStore</code> and it seems to have resolved the issue.</p> <pre><code>// we will attempt an iOS integrated facebook login [accountStore requestAccessToAccountsWithType:accountType options:options completion:^(BOOL granted, NSError *error) { // this means the user has not signed-on to Facebook via the OS BOOL isUntosedDevice = (!granted &amp;&amp; error.code == ACErrorAccountNotFound); dispatch_block_t postReauthorizeBlock = ^{ NSString *oauthToken = nil; if (granted) { NSArray *fbAccounts = [accountStore accountsWithAccountType:accountType]; id account = [fbAccounts objectAtIndex:0]; id credential = [account credential]; oauthToken = [credential oauthToken]; } // initial auth case if (!isReauthorize) { if (oauthToken) { _isFacebookLoginToken = YES; _isOSIntegratedFacebookLoginToken = YES; // we received a token just now self.refreshDate = [NSDate date]; // set token and date, state transition, and call the handler if there is one [self transitionAndCallHandlerWithState:FBSessionStateOpen error:nil token:oauthToken // BUG: we need a means for fetching the expiration date of the token expirationDate:[NSDate distantFuture] shouldCache:YES loginType:FBSessionLoginTypeSystemAccount]; } else if (isUntosedDevice) { // even when OS integrated auth is possible we use native-app/safari // login if the user has not signed on to Facebook via the OS [self authorizeWithPermissions:permissions defaultAudience:defaultAudience integratedAuth:NO FBAppAuth:YES safariAuth:YES fallback:YES isReauthorize:NO]; } else { // create an error object with additional info regarding failed login NSError *err = [FBSession errorLoginFailedWithReason:nil errorCode:nil innerError:error]; // state transition, and call the handler if there is one [self transitionAndCallHandlerWithState:FBSessionStateClosedLoginFailed error:err token:nil expirationDate:nil shouldCache:NO loginType:FBSessionLoginTypeNone]; } } else { // reauth case if (oauthToken) { // union the requested permissions with the already granted permissions NSMutableSet *set = [NSMutableSet setWithArray:self.permissions]; [set addObjectsFromArray:permissions]; // complete the operation: success [self completeReauthorizeWithAccessToken:oauthToken expirationDate:[NSDate distantFuture] permissions:[set allObjects]]; } else { // no token in this case implies that the user cancelled the permissions upgrade NSError *error = [FBSession errorLoginFailedWithReason:FBErrorReauthorizeFailedReasonUserCancelled errorCode:nil innerError:nil]; // complete the operation: failed [self callReauthorizeHandlerAndClearState:error]; // if we made it this far into the reauth case with an untosed device, then // it is time to invalidate the session if (isUntosedDevice) { [self closeAndClearTokenInformation]; } } } }; if (granted) { [accountStore renewCredentialsForAccount:[[accountStore accountsWithAccountType:accountType] lastObject] completion:^(ACAccountCredentialRenewResult renewResult, NSError *error) { dispatch_async(dispatch_get_main_queue(), postReauthorizeBlock); }]; } else { // requestAccessToAccountsWithType:options:completion: completes on an // arbitrary thread; let's process this back on our main thread dispatch_async(dispatch_get_main_queue(), postReauthorizeBlock); } }]; } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload