Подтвердить что ты не робот

API-интерфейс Facebook Graph API GET - должен содержать параметр "поля" (Swift, Facebook SDK v4.5.1)

В моем приложении iOS используется API-интерфейс Facebook Graph во время регистрации, чтобы получить информацию о пользователе, которая отлично работала до перехода на новый SDK для Facebook. После обновления у меня появляется ошибка времени выполнения: "FBSDKLog: начиная с Graph API v2.4, запросы GET для /me должны содержать явный параметр" поля ".

Вот код:

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, но я не знаю, что изменить, чтобы сделать эту работу сейчас. Огромное спасибо всем, кто может мне помочь!

4b9b3361

Ответ 1

для этой строки требуется значение параметра, которое не равно nil

let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)

Я буду расширять больше, например, и это код psuedo:

поэтому для ObjC это было бы, например, так, чтобы приведенное выше прочитало следующее:

parameters:@{@"fields": @"id, name"}

В быстром это было бы что-то похожее

что-то вроде этого:

parameters:["fields": "email"]

Это только для двух полей, и снова это psuedo-код, но вам нужно указать параметры


UPDATE:

Я добавляю это обновление, чтобы показать людям, где вы найдете параметры для полей, как описано выше, здесь быстрая ссылка:

Здесь информация о параметрах Parameters (это должно оставаться примерно статическим с FBSDK, некоторые из них являются "ядром", что означает, что это не изменится так сильно, но я буду обновлять каждый раз, когда могу):

https://developers.facebook.com/docs/graph-api/reference/user

Формат нижеуказанной информации следующий: я просто сделал это быстро:

"параметр " тип

"Описание"

id числовая строка

Идентификатор пользователя этого пользователя. Этот идентификатор уникален для каждого приложения. и не может использоваться в разных приложениях. В нашем руководстве по обновлению более подробная информация о идентификаторах приложения.

о строке

Раздел "Обо мне" этого профиля пользователя

age_range AgeRange

Возрастный сегмент для этого человека, выраженный как минимум и максимум возраст. Например, более 18, меньше 21.

био строка

Человек био

день рождения строка

День рождения человека. Это фиксированная форматная строка, например MM/DD/YYYY. Однако люди могут контролировать, кто может видеть год, в котором они родились отдельно от месяца и дня, поэтому эта строка может быть только годом (ГГГГ) или месяц + день (ММ/ДД)

контекст UserContext

Социальный контекст для этого человека

валюта Валюта

Информация о местной валюте

устройства список

Список устройств, которыми пользуется человек. Это вернет только iOS и Устройства Android

образовательный список

Обучение людей

электронная почта строка

Первичный адрес электронной почты человека, указанный в их профиле. Это поле не будет возвращен, если действительный адрес электронной почты не доступен

список избранных_файлов

Спортсмены, которым нравится человек

список избранных_файлов

Спортивные команды, которым нравится человек

first_name строка

Имя человека

гендер строка

Пол, выбранный этим человеком, мужчиной или женщиной. Это значение будет опущено, если пол установлен на пользовательское значение

родной город Страница

Человек, родной город

список inspirational_people

Человек, вдохновляющий людей

install_type enum

Тип установки

установлен bool

Установлено ли приложение, устанавливающее запрос?

interesting_in список

Наделяет человека интересом к

is_shared_login bool

Это общий логин (например, серый пользователь)

is_verified bool

Люди с большим количеством последователей могут иметь подлинность их идентификация вручную проверена Facebook. Это поле указывает проверяется ли профиль человека таким образом. Это из проверенного поля

Языки список

Страницы в Facebook, представляющие языки, которые этот человек знает

last_name строка

Фамилия

ссылка строка

Ссылка на человека Временная шкала

Местоположение Страница

Текущее местоположение пользователя, введенное ими в их профиле. Это поле не связано с регистрацией

locale строка

Локаль лица

meeting_for список

Что человек заинтересован в встрече за

** строка среднего_имя

Среднее имя человека

имя строка

Полное имя человека

CoreDefault

имя_формата строка

Имя человека, отформатированное для правильной обработки китайского, японского или Корейский заказ

payment_pricepoints Платежные точки назначения

Точные цены оплаты человека

test_group unsigned int32

Контрольная группа платформы

политическая строка

Личные политические взгляды

связь_status строка

Статус отношений с человеком

религия строка

Религия человека

security_settings SecuritySettings

Настройки безопасности

значительный_другой Пользователь

Человек значимый другой

спортивный список

Спорт этот человек любит

цитаты строка

Личные любимые цитаты

third_party_id строка

Строка, содержащая анонимный, но уникальный идентификатор для человек. Вы можете использовать этот идентификатор с третьими лицами

часовой пояс float (мин: -24) (макс.: 24)

Отмененный часовой пояс пользователя с UTC

token_for_business строка

Токен, который является одним и тем же в бизнес-приложениях. Доступ к этому токен требует, чтобы человек регистрировался в вашем приложении. Этот токен изменится, если бизнес, владеющий приложением, изменит

updated_time datetime

Время обновления

shared_login_upgrade_required_by datetime

Время, в течение которого общий вход в систему должен быть обновлен до Business Manager по

проверено bool

Указывает, была ли учетная запись проверена. Это отличается от поле is_verified. Кто-то считается проверенным, если они принимают какие-либо следующих действий:

Register for mobile
Confirm their account via SMS
Enter a valid credit card

video_upload_limits VideoUploadLimits

Пределы загрузки видео

viewer_can_send_gift bool

Может ли зритель отправить подарок этому человеку?

веб-сайт.

Веб-сайт пользователя

работа список

Сведения о опыте работы человека

public_key строка

Открытый ключ пользователя PGP

обложка CoverPhoto


Кроме того, здесь текущий материал "Edge": формат для материала "Edge" - это, грубо говоря, я сделал это быстро:

"Край"

"Описание"

favorite_requests

Любимые запросы разработчиков к API графиков

request_history

История запросов API графиков разработчиков

аккаунты

Страницы Facebook, которые этот человек управляет/является администратором для

Достижения

Достижения, сделанные в играх на Facebook

adaccounts

Рекламные учетные записи, к которым этот человек имеет доступ

adaccountgroups

Группы аккаунтов объявлений

adcontracts

Контракты на персонализированные объявления

admined_groups

Группирует администраторов пользователей

adnetworkanalytics

Данные о событиях для пользователя Приложения для сети аудитории

альбомы

Фотоальбомы, созданные этим человеком

apprequests

Этот пользователь ожидает запросов от приложения

apprequestformerrecipients

Запросы приложений

книги

Книги, перечисленные в этом профиле человека

домены

Домены, которые пользователь поддерживает

события

События для этого человека. По умолчанию это не включает события человек отказался или не ответил на

семья

Это семейные отношения.

stream_filters

Список фильтров, которые могут быть применены к краю ленты новостей

friendlists

Пользовательский пользовательский список друзей

ids_for_business

Бизнес-субъекты могут требовать права собственности на несколько приложений, используя Управляющий делами. Этот край возвращает список идентификаторов, которые этот пользователь имеет в любом из этих приложений

invitable_friends

Список друзей, которым может быть предложено установить приложение Facebook Canvas

игры

Игры, которым нравится этот человек

группы

Группы Facebook, к которым принадлежит человек

нравится

Все страницы, которым этот человек понравился

фильмы

Фильмы этого человека нравятся

музыка

Музыка, которую любит этот человек

объекты

Объекты

разрешения

Права, предоставленные этим человеком для этого приложения

фотографии

Фотографий человек помечен или загружен

изображение

Изображение профиля лица

tagged_places

Список помеченных мест для этого человека. Он может включать теги на видео, сообщений, статусов или ссылок

promotable_domains

Все пользователи домена могут продвигать

promotable_events

Все события, которые пользователь может продвигать.

taggable_friends

Друзья, которые могут быть помечены в контенте, опубликованном через API-интерфейс Graph

телевидение

Телевизор показывает, что этот человек любит

видео

Видео, в которое помечен человек или загружен

video_broadcasts

Передача видео от этого человека

приложения

Приложения Facebook, которые этот человек является разработчиком.

проверок

Записи этого человека сделаны.

feed

Подача сообщений (включая обновления статуса) и ссылки, опубликованные этот человек.

friendrequests

Запрос ожидающих друзей.

друзья

Друзья друзей.

home

Личный сайт Facebook.

Входящие

Входящие для человека Facebook.

местоположения

Подача сообщений и фотографий, содержащих информацию о местоположении и в который был отмечен этим человеком. Это полезно для построения хронологию мест, которые посетил человек.

взаимные друзья

Список общих друзей между двумя людьми.

уведомления

Непрочитанные уведомления Facebook о том, что у человека есть.

исходящие

Личные сообщения для людей Facebook.

вопросы

Вопросы, которые человек создал.

оценки

Оценки, полученные этим человеком от игр на Facebook, которые у них есть играл.

подписчики

Профили, следующие за этим человеком.

подписано на

Профиль, который этот человек следует.

Ответ 2

используйте "поля" в качестве ключа, а затем запятые разделите свои значения

let params = ["fields": "email, friends"]

Ответ 3

В Obj-C вставить метод logInWithReadPermissions:

parameters:@{@"fields": @"id, name, email"}

Если вы оставите нуль в параметрах, вы получите только идентификатор и имя в объекте результата, хотя вы установили, например:

NSArray *permissionsArray = @[ @"email", @"public_profile"];

В документации не очень понятно, надеюсь, что это может помочь.

Ответ 4

У меня была та же проблема, но добавление параметров поля создавало бы ошибку запроса при получении фотографии пользователя. Я решил эту проблему, добавив простой код 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
    }}
];

Ответ 5

В Swift вы можете объявить несколько параметров следующим образом:

let graphRequest: FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "email, first_name, last_name, gender, picture"])