0

解析を使用した私のFacebookログインは問題なく完全に機能していますが、ログイン時にその許可を与えたにもかかわらず、生成されたアクセストークンはフレンドリストの許可を示していません。Facebook Graph API 'Friendlists'(fbID/friendlists) を使用したときに、応答配列が空であることを知りました。そのため、生成された同じアクセス トークンで Graph API エクスプローラーも実行します。エラーは表示されず、データ配列は同じ空で、次のデバッグメッセージが表示されます

「フィールド 'friendlists' は、ユーザーが 'read_custom_friendlists' パーミッションを付与した後、User オブジェクトでのみアクセス可能です」

これは私が使用している方法です

WLLoginViewController *login = [[WLLoginViewController alloc]init];
login.fields = PFLogInFieldsFacebook;
NSArray *permission = [[NSArray       alloc]initWithObjects:@"email",@"read_custom_friendlists",@"publish_actions",@"user_location",@"user_hometown",@"user_website",@"user_about_me",@"user_photos",@"user_friends",@"read_custom_friendlists", nil];

login.facebookPermissions = permission;

WLLoginViewController は PFUserLoginManager を継承しており、他のクラスから呼び出しています。

- (void)logInViewController:(PFLogInViewController *)logInController   didLogInUser:(PFUser *)user {

[FBRequestConnection startForMeWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
    NSLog(@"permissions%@",logInController.facebookPermissions);
    if(result) {
        if ([result valueForKey:@"hometown"]) {
            NSString *nn = [[result valueForKey:@"hometown"] valueForKey:@"name"];
            [user setValue:[[result valueForKey:@"hometown"] valueForKey:@"name"] forKey:@"hometown"];
        }
        if ([result valueForKey:@"location"]) {
            [user setValue:[[result valueForKey:@"location"] valueForKey:@"name"] forKey:@"location"];
        }
        [user setObject:[result valueForKey:@"id"] forKey:kWLUser_FacebookId];
        [user setObject:[result valueForKey:@"name"] forKey:kWLUser_Name];
        [user saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
            if([PFInstallation currentInstallation]) {
                // save in background current installation.
                [[PFInstallation currentInstallation] setObject:user forKey:@"user"];
                [[PFInstallation currentInstallation]saveInBackground];
            }
        }];
        [[ParseManager sharedInstance]saveDeviceToken:[[NSUserDefaults standardUserDefaults]objectForKey:@"DeviceToken"]];
        [self dismissViewControllerAnimated:YES completion:nil];
    }else {
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Could not login" message:@"Could not login to facebook, please try again" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil];
        [alert show];
    }
}];

これは、ユーザーが facebook からアプリに戻ったときに実行されているメソッドです。コード内の nslog は、私が与えたパーミッションを完全に示しています。

最後に、これは Facebook リクエストを処理するためのメソッドです -(void)handleFacebookFriendsRequest {

NSString *queryParams = @"id,name,picture.width(350).height(250),location,hometown,likes.limit(100000),statuses.limit(1),languages";
[queryParams stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@",[FBSession activeSession].permissions);
NSLog(@"%@",[[FBSession activeSession].permissions description]);
NSLog(@"%@",[FBSession activeSession].accessTokenData.accessToken);
[FBRequestConnection startWithGraphPath:[NSString stringWithFormat:@"me/friends?fields=%@",queryParams] completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
    if (!error) {
        //change For getting everything out
        NSLog(@"%@",[result objectForKey:@"data"]);
        [[ApplicationDataModel sharedInstance]setFacebookFriendsList:[result objectForKey:@"data"]];
        [self facebookRequestDidLoad:result];
    } else {
        [self facebookRequestDidFailWithError:error];
    }

}];
}

ここに画像の説明を入力

私はひどく立ち往生しており、助けが必要です。前もって感謝します

4

1 に答える 1

0

read_custom_friendlists はデフォルトの権限ではないため、この機能の承認プロセスを経る必要があります ( https://developers.facebook.com/docs/facebook-login/permissions/v2.2 )

承認のためにアイテムを送信するには、developers.facebook.com -> My Apps -> Status & Review にアクセスしてください。

警告:「管理者、開発者、テスターなど、アプリ ダッシュボードのロール セクションにリストされている人は、レビューなしで許可を与えることができます。これらのロールの人だけがアプリを使用する場合は、ログイン レビューのためにアプリを送信する必要はありません。 ."( https://developers.facebook.com/docs/apps/faq )

于 2015-09-25T22:54:15.003 に答える