Хорошо, я тоже изучил это, и вот что я придумал.
Согласно документации, можно создать тестового пользователя, вызвав графикAPI выглядит следующим образом:
NSString *urlString = [NSString stringWithFormat:@"%@/accounts/test-users", kAppId];
[facebook requestWithGraphPath:urlString andParams:params andHttpMethod:@"POST" andDelegate:self];
, где params
- это NSMutableDictionary, содержащий некоторые или все параметры, как указано в https://developers.facebook.com/docs/test_users/.
Однако я обнаружил, что API требует приложениятокен доступа для создания тестового пользователя, а метод requestWithGraphPath:andParams:andHttpMethod:andDelegate:
в файле SDK Facebook.m
фактически отправляет токен доступа пользователя.Даже если вы специально установили токен доступа к приложению в словаре params
, он будет перезаписан токеном доступа пользователя в этом методе.
Может показаться, что существует два пути решения этой проблемы.Мы могли бы поиграться с Facebook SDK и принять это во внимание, что определенно не рекомендуется.Или мы могли бы прибегнуть к стандартным HTTP-запросам и взять дело в свои руки.Вот как я справился со вторым подходом.
Сначала нам нужен токен доступа к приложению, который можно получить, отправив запрос на: https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=client_credentials
.
Затем мы используем токен доступа к приложению.вернулся из этого запроса в нашем следующем запросе: https://graph.facebook.com/APP_ID/accounts/test-users?installed=true&name=FULL_NAME&permissions=read_stream&method=post&access_token=APP_ACCESS_TOKEN
Общий формат обоих запросов одинаков.Вот как будет выглядеть весь запрос в коде для второго из двух запросов.
NSString *urlString = @"https://graph.facebook.com/APP_ID/accounts/test-users";
NSURL *testUserUrl = [NSURL URLWithString:urlString];
NSMutableURLRequest *testUserRequest = [[NSMutableURLRequest alloc] initWithURL:testUserUrl];
[testUserRequest setHTTPMethod:@"POST"];
[testUserRequest addValue:@"text/plain" forHTTPHeaderField:@"content-type"];
NSString *bodyString = @"installed=true&permissions=read_stream&access_token=APP_ACCESS_TOKEN";
NSData *bodyData = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
[testUserRequest setHTTPBody:bodyData];
[[NSURLConnection alloc] initWithRequest:testUserRequest delegate:self];
[testUserRequest release];
Надеюсь, это поможет вам преодолеть трудности в экспериментах с тестовыми пользователями.