2

Facebook のuser_photosアクセス許可が有効になっているアプリがあります。問題は、Facebook にアクセスしてアプリを削除しても、iOS がこれに気付かないことです。ACAccountStore権限があると言うのでrequestAccess...「許可」を返しますが、試してみるとすぐに次SLRequestのようなエラーが発生Error validating access token: User XXXXX has not authorized application YYYYYし、アプリがFacebookに再表示されません。

回避策は、デバイスで [設定] -> [Facebook] に移動し、アプリのアクセス許可をオフにしてからオンに戻すことです。次にrequestAccess.

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 からアプリを削除した後、常に最終エラー ("error loading request: ") が発生しますが、他のエラーは発生しません。デバイスの設定でアプリの許可を切り替えた後、成功しました。

4

1 に答える 1

6

Apple によると、これは意図したとおりに機能します (BS!)。実際には、最初ACAccountStoreに電話して Facebook と同期する必要があることがわかりましたrenewCredentialsForAccount。この場合、結果はACAccountCredentialRenewResultRejectedです。その後、もう一度呼び出すことができACAccountStore requestAccessToAccountsOfType、ユーザーは最終的にアプリを再度許可するように求められます。

于 2013-02-02T00:15:48.927 に答える