Использование Facebook Unity SDK, как опубликовать собственную историю со скриншотом на iOS

Как опубликовать пользовательскую историю через Facebook Unity SDK с прикрепленным скриншотом?

Что я сделал:

Прошел крутой туториал по Unity. Создан объект profile. Создан действие. Создан история + профиль. Сохранено.

1) Пишет, что невозможно создать историю. Это проблема или я все еще могу проверить свою историю?

Затем на основе кода из учебника я написал:

public void publishAction()
{
Debug.Log ("publish action.");
if (FB.IsLoggedIn)
{
Dictionary<string, string> querySmash = new Dictionary<string, string>();
string testUserID = "1378641979";
querySmash["profile"] = testUserID;
FB.API ("/me/" + FB.AppId + ":smash", Facebook.HttpMethod.POST, publishActionCallback, querySmash);
}
}

void publishActionCallback(FBResult result)
{
if (result.Error != null)
{
Debug.LogWarning("FacebookManager-publishActionCallback: error: " + result.Error );
}
else
{
Debug.Log("FacebookManager-publishActionCallback: success: " + result.Text );
}
}

2) Этот код всегда возвращает 400 Bad Request. Не уверен, почему, поскольку это копия учебного примера. Есть идеи?

Следующим шагом, я хотел бы прикрепить скриншот игры к этой истории. У меня нет веб-сайта для его размещения. Я знаю, как сделать скриншот.

var width = Screen.width;
var height = Screen.height;
var tex = new Texture2D(width, height, TextureFormat.RGB24, false);
// Read screen contents into the texture
tex.ReadPixels(new Rect(0, 0, width, height), 0, 0);
tex.Apply();
byte[] screenshot = tex.EncodeToPNG();

3) Вопрос в том, как мне прикрепить его к моей пользовательской истории?

4) Я до сих пор не могу понять, как присвоить своей пользовательской истории собственный заголовок и сообщение. Пожалуйста, дайте мне знать, как это сделать.

5) Наконец, если мой объект является новым словом (которое не является предопределенным, как профиль), как будет выглядеть мой вызов API? Допустим, пользовательский объект истории — «еда».

Будет ли это: querySmash["meal"] = "Вкусная пицца!"?

Спасибо за вашу помощь!


person Regis Geoffrion    schedule 02.02.2014    source источник


Ответы (1)


Я буду отвечать на эти вопросы по одному:

#1–2. При указании имени действия необходимо использовать пространство имен:*action*, а не appid:action. Чтобы убедиться, что это проблема, посмотрите, читается ли тело этой ошибки 400 что-то вроде «недопустимые компоненты пути».

№3. В конфигурации действия создайте свойство действия с типом image. Затем, каким бы ни было имя этого свойства, используйте его в качестве ключа, а байты изображения — в качестве значения в WWWForm, которое вы передаете в FB.API() в качестве аргумента formData (см. документы для получения подробной информации). Если вы создали свойство с именем «screenpic», ваш пример может продолжаться примерно так:

var wwwForm = new WWWForm();
wwwForm.AddBinaryData("screenpic", screenshot, "temp.png");

FB.API("me/mynamespace:myaction", Facebook.HttpMethod.POST, Callback, wwwForm);

№ 4. Вы настраиваете свой заголовок и сообщение, используя кнопку «Редактировать вложения» в конфигурации истории, возможно, используя шаблоны для включения строк, предоставленных либо как часть разметки объекта, либо как параметры действия, как более подробно описано в "Создание пользовательских историй" docs.

№ 5. Почти. Если вы посмотрите, как вы обработали встроенный объект, вы увидите, что то, что вы указали в качестве URL-адреса, является значением profile. Если вы загрузите этот URL-адрес в [Отладчик Open Graph] Facebook [4], вы увидите, что веб-страница по этому URL-адресу размечена метаданными Open Graph. Таким же образом, в этом случае вам нужно будет создать веб-страницу с соответствующей разметкой Open Graph, чтобы определить объект вашего нового типа (по одному для каждого такого объекта) и предоставить URL-адрес этого объекта в качестве значения querySmash['meal"] в вашем примере. Полное изложение приведено в документе "Using Objects". на сайте разработчиков Facebook.

person Colin Creitz    schedule 05.02.2014
comment
Привет, Колин, хорошие новости. FB.API (/me/mynamespace:smash, Facebook.HttpMethod.POST, publishActionCallback, querySmash) работает. Однако FB.API(me/mynamespace:smash, Facebook.HttpMethod.POST, Callback, wwwForm) возвращает запрос 400 Bad, хотя я создал свойство типа изображения screenpic. Есть идеи? Кроме того, поскольку в примере с smash требуется профиль querySmash[profile] = testUserID; как я могу одновременно отправить идентификатор профиля и снимок экрана в одном и том же вызове FB.API? Наконец, как предложение для SDK, добавьте NAMESPACE в настройках и дайте доступ через FB.NAMESPACE. Спасибо! - person Regis Geoffrion; 06.02.2014
comment
namespace, вероятно, относится к настройкам, и мы примем это во внимание в следующей версии SDK (если вы отправите сообщение об ошибке на developers.facebook.com/x/bugs/trending, что даст вам возможность отслеживать). Однако, не зная конкретных значений, которые вы передаете в этот вызов функции, и деталей вашей конфигурации, трудно точно понять, что происходит не так в вашем вызове. Опять же, если вы отправляете (отдельную) ошибку, вы можете включить детали, которые вы хотели бы сохранить в тайне, но позволить нам увидеть, можем ли мы помочь, особенно если есть ошибка. - person Colin Creitz; 13.02.2014
comment
Скажи Колину, @ColinCreitz спасибо за это и надеюсь, что ты все еще читаешь. Мне интересно, как все это повлияет на версию 2.1, которая выйдет 8 августа. Я просто очень запутался в том, действительно ли все еще возможно на самом деле ** опубликовать изображение в стена пользователя (из Unity или любого приложения ios/android) под 2.1? У вас есть информация об этом? - person Fattie; 06.07.2016