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