Facebook Graph API GET request - должен содержать параметр "fields" (Swift, Facebook SDK v4. 5. 1)
мое приложение iOS использует запрос API графика Facebook во время регистрации, чтобы получить информацию о пользователе, которая отлично работала до обновления до новейшего SDK Facebook. После обновления я получаю сообщение об ошибке выполнения: "FBSDKLog: начиная с Graph API v2.4, GET requests for /me должен содержать явный параметр "fields".
вот код:
func requestFacebook() {
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
if ((error) != nil)
{
// Process error
println("Error: (error)")
}
else if error == nil
{
let birthday : NSString = (result.valueForKey("birthday") as? NSString)!
var currentDate = NSDate()
var birthdayFormatter = NSDateFormatter()
let userCalendar = NSCalendar.currentCalendar()
birthdayFormatter.dateFormat = "MM/DD/YYYY"
var birthdayNSDate = birthdayFormatter.dateFromString(birthday as String)
var userAge = self.calculateAge(birthdayNSDate!)
PFUser.currentUser()!["age"] = userAge
var facebookID: NSString = (result.valueForKey("id") as? NSString)!
var pictureURL = "https://graph.facebook.com/(facebookID)/picture?type=large&return_ssl_resources=1"
var URLRequest = NSURL(string: pictureURL)
var URLRequestNeeded = NSURLRequest(URL: URLRequest!)
NSURLConnection.sendAsynchronousRequest(URLRequestNeeded, queue: NSOperationQueue.mainQueue(), completionHandler: {(response: NSURLResponse!,data: NSData!, error: NSError!) -> Void in
if error == nil {
var picture = PFFile(data: data)
PFUser.currentUser()!["picture"] = picture
PFUser.currentUser()!.saveInBackgroundWithBlock({ (success, error) -> Void in
if error == nil {
var userPicture:PFFile = PFUser.currentUser()!.valueForKey("picture") as! PFFile
userPicture.getDataInBackgroundWithBlock { (imageData, error) -> Void in
if error == nil {
self.meProfileImageView.image = UIImage(data: imageData!)
var userName:String = PFUser.currentUser()!.valueForKey("username") as! String
var userAge:Int = PFUser.currentUser()!.valueForKey("age") as! Int
self.meLabel.text = "(userName), (userAge)"
self.findFriends()
}
}
} else {
println(error)
}
})
}
else {
println("Error: (error.localizedDescription)")
}
})
}
})
}
сообщение об ошибке на строку:
let birthday : NSString = (result.valueForKey("birthday") as? NSString)!
этот код работал отлично перед обновлением до Facebook SDK v4.5.1, но я не знаю, что изменить, чтобы сделать эту работу сейчас. Огромное спасибо всем, кто может мне помочь!
5 ответов:
в этой строке необходимо значение параметров, которое не равно nil
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)Я буду расширять больше, например, и это своего рода код psuedo:
так что для ObjC это было бы так, например, так что выше будет читать следующее:
parameters:@{@"fields": @"id, name"}в swift было бы что-то подобное
что-то вроде этого:
parameters:["fields": "email"]это только для двух полей, и снова это код psuedo, но вам нужно указать параметры
обновление:
Im добавление этого обновления, чтобы показать людям, где вы найдете параметры для полей, как описано выше, вот быстрая ссылка:
вот информация о поле Paramters (это должно оставаться примерно статичным с FBSDK, некоторые из них являются "ядром", что означает, что он не будет сильно меняться, но я буду обновлять всякий раз, когда я может):
https://developers.facebook.com/docs/graph-api/reference/user
формат информации ниже следующий, вроде, Я просто сделал это быстро:
"параметр""типа"
"описание"
id числовая строка
идентификатор учетной записи данного человека. Этот идентификатор уникален для каждого приложения и не может быть используется в разных приложениях. Наше руководство по обновлению предоставляет дополнительная информация о идентификаторах приложений
о строка
раздел о себе в профиле этого человека
age_range Возрастдиапазон
возрастной сегмент для этого человека выражается как минимум и максимум возраст. Например, больше 18, меньше 21.
био строка
в био человека
день рождения строка
день рождения человека. Это строка фиксированного формата, например MM/DD / YYYY. Тем не менее, люди могут контролировать, кто может видеть год их рождения отдельно от месяца и дня так что эта строка может быть только год (Гггг) или месяц + день (ММ/ДД)
контекст UserContext
социальный контекст для этого человека
валюты Валюта
информация о местной валюте человека
устройства список
список устройств, которые использует человек. Это вернет только iOS и Android устройств
образование список
образование человека
email строка
основной адрес электронной почты человека, указанный в его профиле. Это поле не будет возвращается, если действительный адрес электронной почты не доступен
favorite_athletes список
спортсмены человек любит
favorite_teams список
спортивные команды человек любит
"имя" строка
сначала имя человека
пол строка
пол, выбранный этим человеком, мужчина или женщина. Это значение будет опущено, если пол установлен в пользовательское значение
городе страница
родной город человека
inspirational_people список
вдохновляющие люди человека
install_type перечисление
установки типа
установлен буль
приложение сделать запрос установлен?
interested_in список
пол человека интересует
is_shared_login буль
это общий логин (например, серый пользователь)
is_verified буль
люди с большим количеством последователей могут иметь подлинность их личность вручную проверяется Facebook. Это поле указывает проверяется ли профиль человека таким образом. Это отличается из проверенного поля
языки список
Facebook страницы, представляющие языки, которые этот человек знает
last_name строка
фамилия человека
ссылке строка
ссылка на временную шкалу человека
location страница
текущее местоположение человека, введенное им в своем профиле. Это поле не относится к возвратам
locale строка
человека!--5-->meeting_for список
то, что человек заинтересован в встрече для
* * middle_name string
второе имя человека
имя строка
полное имя человека
CoreDefault
name_format строка
имя человека, отформатированное для правильной обработки китайского, японского или Корейский заказ
payment_pricepoints PaymentPricepoints
pricepoints компенсации персоны
test_group unsigned int32
тестовая платформа группа
политические строка
политические взгляды человека
relationship_status строка
статус отношений человека
религия строка
религия человека
security_settings SecuritySettings
параметры безопасности
significant_other пользователей
вторая половинка человека
спорт список
Спорт этот человек любит
кавычки строка
любимые цитаты человека
third_party_id строка
строка, содержащая анонимный, но уникальный идентификатор человек. Вы можете использовать это идентификатор с третьими лицами
часовой пояс поплавок (мин: -24) (Макс: 24)
смещение текущего часового пояса человека от UTC
token_for_business строка
токен, который является одинаковым в приложениях бизнеса. Доступ к этому знак требует, чтобы человек вошел в ваше приложение. Этот маркер изменится, если бизнес, владеющий приложением, изменится
updated_time datetime
времени
shared_login_upgrade_required_by datetime
время, в течение которого общий журнал должен быть обновлен до Business Manager на
проверен буль
указывает, была ли проверена учетная запись. Это отличается от поле is_verified. Кто-то считается проверенным, если они принимают какие-либо из следующие действия:
Register for mobile Confirm their account via SMS Enter a valid credit cardvideo_upload_limits VideoUploadLimits
ограничения загрузки видео
viewer_can_send_gift буль
может ли зритель отправить подарок этому человеку?
сайт строка
человекаработа список
детали работы человека опыт
открытый_ключ строка
открытый ключ PGP человека
покров CoverPhoto
кроме того, вот текущий материал "Edge": формат для материала "Edge" - это, грубо говоря, я сделал это быстро:
"край"
"описание"
favorite_requests
любимые запросы разработчиков к API Graph
request_history
История запросов API графика разработчиков
счета
страницы Facebook этот человек администрирует / является администратором для
достижения
достижения, сделанные в Играх Facebook
adaccounts
в рекламные аккаунты, к которым этот человек имеет доступ
adaccountgroups
группы рекламных аккаунтов
adcontracts
рекламные контракты человека
admined_groups
группы пользователей "администраторы"
adnetworkanalytics
данные Insights для приложений Audience Network человека
альбомы
фотоальбомы, созданные этим человеком
apprequests
ожидающие запросы этого человека из приложения
apprequestformerrecipients
запросы приложений
- книги
книги, перечисленные в профиле этого человека
Домены
Домены администраторов пользователей
событий
событий для этого человека. По умолчанию это не включает события человек отказался или не ответил на
семья
семейные отношения этого человека.
stream_filters
список фильтров, которые могут быть применены к краю Ленты Новостей
friendlists
пользовательские списки друзей человека
ids_for_business
субъекты предпринимательства могут претендовать на владение несколькими приложениями с помощью бизнес-менеджер. Это ребро возвращает список идентификаторов, которые есть у этого пользователя в любом из этих других приложений
invitable_friends
список друзей, которые могут быть приглашены для установки Facebook холст приложение
- игры
игры этот человек любит
группы
группы Facebook, к которым принадлежит человек
любит
все страницы этого человека понравились
фильмы
фильмы, которые этот человек любит
музыка
музыка этот человек любит
объекты
объекты
разрешения
разрешения, которые человек предоставил это приложение
фото
фотографии человек помечен или загрузил
картинка
фотография профиля человека
tagged_places
список отмеченных мест для этого человека. Он может включать теги на видео, сообщения, статусы или ссылки
promotable_domains
все домены пользователь может продвигать
promotable_events
все события, которые пользователь может продвигать.
taggable_friends
друзья, которые могут быть помечены в контенте, опубликованном с помощью графика API
телевидение
ТВ-шоу этот человек любит
видео
видео человек помечен или загружен
video_broadcasts
видеотрансляции от этого человека
приложения
приложения Facebook, что этот человек является разработчиком.
checkins
чеки этот человек сделал.
feed
лента сообщений (включая обновления статуса) и ссылки, опубликованные этот человек.
friendrequests
ожидание запросов друга человека.
друзья
друзья человека.
дома
главная страница Facebook человека.
почтовый
входящие сообщения Facebook человека.
мест
лента сообщений и фотографий, которые включают информацию о местоположении и в что этот человек был помечен. Это полезно для построения хронология мест, которые человек посетил.
mutualfriends
список общих друзей между двумя людьми.
уведомления
непрочитанные уведомления Facebook, что человек имеет.
исходящие
исходящие сообщения Facebook человека.
вопросы
вопросы, которые человек создал.
баллы
баллы этот человек получил от Facebook игр, которые они имеют сыгранный.
подписчики
профили, которые следуют за этим человеком.
subscribedto
профиль, который этот человек следует.
используйте "поля" в качестве ключа, а затем запятые разделяют ваши значения
let params = ["fields": "email, friends"]
в Obj-C вставить в метод logInWithReadPermissions:
parameters:@{@"fields": @"id, name, email"}Если вы оставите nil в параметрах, вы получите только id и имя в объекте результата, хотя вы установили, например:
NSArray *permissionsArray = @[ @"email", @"public_profile"];его не очень ясно в документации, надеюсь, что это может помочь.
у меня была та же проблема, но добавление параметров поля приведет к ошибке запроса при извлечении фотографии пользователя. Я решил эту проблему, добавив простой
parameters:@{@"fields": @""}код:FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"me/picture"] parameters:@{@"fields": @""} HTTPMethod:@"GET"]; [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { if (!error) { // success } else { // fail }} ];
в Swift, вы можете объявить несколько параметров, как это:
let graphRequest: FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "email, first_name, last_name, gender, picture"])
Comments