困惑する難問: 1 つの URL で友達リストを取得すると、同じ URL を使用して正常にリストが返されますが、クエリ文字列 (?fields=id,name,picture) とまったく同じ権限を使用すると、次のエラーが表示されます。 「現在のユーザーに関する情報を照会するには、アクティブなアクセス トークンを使用する必要があります。」何を与える?
現在有効な権限は、publish_stream、email、および read_stream です。そのクエリ文字列を追加すると、なぜ台無しになるのでしょうか? 私が考えられる唯一のことは、私が持っているアクセスキーが私が考えているものではないということです. 実際のアクセス キーを取り出して NSLog に公開し、グラフ エクスプローラーでテストする方法はありますか?
機能する URL は次のとおりです。
https://graph.facebook.com/me/friends
そうでない URL は次のとおりです。
https://graph.facebook.com/me/friends?fields=id,name,picture
これは、実際にアクセス許可を取得するコードです。実際、これは Stuart Breckenridge が GitHub で自由に提供したのと同じコードです (ありがとう!) API 呼び出しの最後に '?fields=name,id,picture' を追加しない限り、うまく動作するようです:
-(void)requestPermissions
{
if (debugF) NSLog(@"FAM: requestPermissions");
// Specify the Facebook App ID.
_facebookAppID = @"123456789123456"; // You Must Specify Your App ID Here.
// Submit the first "read" request.
// Note the format of the facebookOptions dictionary. You are required to pass these three keys: ACFacebookAppIdKey, ACFacebookAudienceKey, and ACFacebookPermissionsKey
// Specify the read permission
_facebookPermissions = @[@"email"];
// Create & populate the dictionary the dictionary
_facebookOptions = @{ ACFacebookAppIdKey : _facebookAppID,
ACFacebookAudienceKey : ACFacebookAudienceFriends,
ACFacebookPermissionsKey : _facebookPermissions};
_facebookAccountType = [_facebookAccountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
[_facebookAccountStore requestAccessToAccountsWithType:_facebookAccountType options:_facebookOptions completion:^(BOOL granted, NSError *error)
{
// If read permission are granted, we then ask for write permissions
if (granted) {
_readPermissionsGranted = YES;
// We change the _facebookOptions dictionary to have a publish permission request
_facebookPermissions = @[@"publish_stream", @"read_stream", @"friends_photos"];
_facebookOptions = @{ ACFacebookAppIdKey : _facebookAppID,
ACFacebookAudienceKey : ACFacebookAudienceFriends,
ACFacebookPermissionsKey : _facebookPermissions};
[_facebookAccountStore requestAccessToAccountsWithType:_facebookAccountType options:_facebookOptions completion:^(BOOL granted2, NSError *error)
{
if (granted2)
{
_publishPermissionsGranted = YES;
// Create the facebook account
_facebookAccount = [[ACAccount alloc] initWithAccountType:_facebookAccountType];
_arrayOfAccounts = [_facebookAccountStore accountsWithAccountType:_facebookAccountType];
_facebookAccount = [_arrayOfAccounts lastObject];
}
// If permissions are not granted to publish.
if (!granted2)
{
if (debugF) NSLog(@"Publish permission error: %@", [error localizedDescription]);
_publishPermissionsGranted = NO;
}
}];
}
// If permission are not granted to read.
if (!granted)
{
if (debugF) NSLog(@"Read permission error: %@", [error localizedDescription]);
_readPermissionsGranted = NO;
if ([[error localizedDescription] isEqualToString:@"The operation couldn’t be completed. (com.apple.accounts error 6.)"])
{
[self performSelectorOnMainThread:@selector(showError) withObject:error waitUntilDone:NO];
}
}
}];
}