Facebook не принимает пользовательские свойства Open Graph

Я пытаюсь использовать Facebook iOS SDK 3.5 для публикации действия Open Graph. Мое действие:take photo, а также photo имеет дополнительное обязательное string свойство по имени filter,

Я создаю свой объект графа (все значения действительны и работают):

NSMutableDictionary<FBOpenGraphObject> *object =
[FBGraphObject openGraphObjectForPostWithType:@"tonerapp:photo"
                                                title:@"photo"
                                                image:imageData
                                                  url:nil
                                          description:title];

Затем я добавляю свой фильтр:

object[@"tonerapp:filter"] = filterName;

Я пытаюсь опубликовать объект, и я могу подтвердить, что мое свойство фильтра присутствует (включено ведение журнала FBSetting для запросов URL для отображения данных запроса):

Body (w/o attachments): 
object: {"description":"","type":"tonerapp:photo",
"tonerapp:filter":"classic","data":{},
"fbsdk:create_object":true,
"image":{"url":"fbstaging:\/\/graph.facebook.com\/staging_resources\/MDExMDE1MjkzNzU1Njc3MDE0MjoxNTM4NzgwNjUy","user_generated":"true"},
"title":"photo"}

Я вижу свое свойство фильтра там, но ответ таков:

error =    {
        code = 100;
        message = "(#100) Object Missing a Required Value: 
Object at URL '' of type 'tonerapp:photo' is invalid because 
a required property 'tonerapp:filter' of type 'string' was not provided.";
        type = OAuthException;
    };

Ну, это есть. Я перепробовал все возможные комбинации, такие как:

object[@"data"] = @{@"tonerapp:filter": filterName}; // оборачиваем в объект данных

object[@"data"] = @{@"filter": filterName}; // оборачиваем в данные и удаляем пространство имен

object[@"toner:filter"] = filterName; // имя приложения вместо имени пространства имен

object[@"filter"] = filterName; // нет имени пространства имен вообще

[object setObject:filterName forKey:@"tonerapp:filter"]; // сетобъектная запись

[object setValue:filterName forKey:@"tonerapp:filter"]; // заданное значение

[object setObject:filterName forKey:@"filter"]; // Сетобъект И без пространства имен...

и возможно больше. Я перепробовал все, но API всегда дает сбой с одной и той же ошибкой. Я могу проверить правильность остальной части объекта, если я захожу в свое приложение в Facebook и устанавливаю filter как optional вместо required, это отправляет успешно. Это ошибка / недостаточная документация с Graph API, или я настолько слеп, что не вижу здесь ничего очевидного?

Спасибо, могу.

2 ответа

Просто поместите их под "данные"

object[@"data"][@"youcustomproperty"] = @"smth";

Убедитесь, что ваш filterName имеет URL-кодировку. У меня была такая же проблема с названием фильма, которое было также пользовательским действием на графике. Попробуйте просто опубликовать ручное значение только простую строку и сообщите нам.

Другие вопросы по тегам