2

我有一个user_photos启用了 Facebook 权限的应用程序。问题是如果我去 Facebook 并删除应用程序,iOS 不会注意到这一点。ACAccountStore说我有权限,所以requestAccess...返回“已授予”,但是一旦我尝试SLRequest,我就会收到类似的错误,Error validating access token: User XXXXX has not authorized application YYYYY并且该应用程序不会重新出现在 Facebook 中。

解决方法是转到设备上的“设置”->“Facebook”,然后关闭并重新打开我的应用程序的权限。下次我尝试使用 时requestAccess,系统会要求我再次确认访问权限,然后该应用程序会在 Facebook 中重新安装,一切正常。

ACAccountStore *accountStore = [[[ACAccountStore alloc] init] autorelease];
ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];

[accountStore requestAccessToAccountsWithType:accountType
                                      options:@{ACFacebookAppIdKey:       kFacebookAppID,
                                                ACFacebookPermissionsKey: @[@"user_photos"]}
                                   completion:^(BOOL granted, NSError *error)
{
   if( error ) {
      NSLog( @"account permission error %@", error );
   }
   else if( granted ) {
      NSURL *requestURL = [NSURL URLWithString:@"https://graph.facebook.com/me/albums"];
      SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook
                                              requestMethod:SLRequestMethodGET
                                                        URL:requestURL
                                                 parameters:[NSMutableDictionary dictionary]];
      NSArray *accounts = [accountStore accountsWithAccountType:accountType];
      if( [accounts count] > 0 ) {
         request.account = accounts[0];
         [request performRequestWithHandler:^ (NSData *responseData, NSHTTPURLResponse *response, NSError *error)
         {
            if( error ) {
               NSLog( @"error accessing Facebook account: %@", error );
            }
            else {
               NSDictionary *data = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:nil];
               if( data[@"error"] != nil ) {
                  NSLog( @"error loading request: %@", data[@"error"] );
               }
               else {
                  NSLog( @"success! %@", data );
               }
            }
         }];
      }
      else {
         NSLog( @"error: no Facebook accounts" );
      }
   }
}];

就我而言,从 Facebook 删除应用程序后,我总是得到最终错误(“错误加载请求:”),没有其他错误。在设备的设置中切换应用程序的权限后,我获得了成功。

4

1 回答 1

6

根据 Apple 的说法,这是按预期工作的(BS!)。在实践中,事实证明您必须先ACAccountStore调用才能与 Facebook 同步renewCredentialsForAccount。在这种情况下,结果是ACAccountCredentialRenewResultRejected。然后您可以ACAccountStore requestAccessToAccountsOfType再次调用,最终将提示用户再次允许您的应用程序。

于 2013-02-02T00:15:48.927 回答