Unity Facebook SDK: ошибка AppRequest 400 Неверный запрос

Я создаю класс социального менеджера для использования с Facebook Unity SDK, а не с основной версией [31], а только с той, которую вы можете получить на Facebook: https://developers.facebook.com/docs/unity/downloads

Я создаю это для использования с Android и IOS, используя движок Unity3D.

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

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

Код, который вызывает запрос приложения:

void RequestAskfor(string requestTitle, string requestMessage, string objectID, string Quantity)
{
    string[] friendIDs = new string[CurrentUser.FriendList.Count];

    for (int i = 0; i < friendIDs.Length; i++)
    {
        friendIDs[i] = CurrentUser.FriendList[i].UserID;
    }

    string data = "{\"type\":\"AskFor\",\"item\":\"{\"objectID\":\"" + objectID + ",\"quantity\":\"" + Quantity + "}}";

    FB.AppRequest(requestMessage, Facebook.OGActionType.AskFor, objectID, null, null, null, data, requestTitle, RequestCallback);
}

И это кнопка GUI, которая должна проверить, работает ли она:

if(GUI.Button(new Rect(300, 300, 300, 300), "Apprequest Test"))
{
    RequestAskfor("Giv mig mad", "Giiiiv miiiig maaaaaad", "food", "1");
}

Вот мои разрешения, которые я использовал для аутентификации приложения:

if (GUI.Button(new Rect(100, 200, 125, 35), "Login!"))
{
    Login("email,publish_actions,public_profile,user_friends,invitable_friends");
}

Весь приведенный выше код работает (в некоторой степени), и я даже могу получить "Экран запроса приглашения"

Однако, когда я нажимаю "ОК" на экране запроса приглашения, я получаю это сообщение об ошибке и внешний вызов от API:

Сообщение об ошибке:

400 Bad Request
UnityEngine.Debug:LogError(Object)
FbDebug:Error(String)
Facebook.FallbackData:JSFallback(String)
Facebook.AsyncRequestDialogPost:CallbackWithErrorHandling(FBResult)
Facebook.<Start>c__Iterator0:MoveNext()

Внешний вызов: (слишком большой для правильного форматирования)

    External Call: fbUi("{\"message\":\"Giiiiv 
    miiiigmaaaaaad\",\"action_type\":\"askfor\",\"   
    object_id\":\"food\",\"data\":\"{\\\"type\\\":\\\"AskFor\\\",\\\"item\\\":\\\"
    {\\\"objectID\\\":\\\"food,\\\"quantity\\\":\\\"1}}\",\"title\":\"Giv mig 
    mad\",\"app_id\":\"339275729572840\",\"locale\":\"en_US\",
    \"method\":\"apprequests\"}", "1");
    UnityEngine.Application:ExternalCall(String, Object[])
    Facebook.CanvasFacebook:JSFallbackUI(String, Dictionary`2, FacebookDelegate)
    Facebook.FallbackData:JSFallback(String)
    Facebook.AsyncRequestDialogPost:CallbackWithErrorHandling(FBResult)
    Facebook.<Start>c__Iterator0:MoveNext()

Если вы хотите поближе взглянуть на код, вот ссылка на только два сценария в проекте: https://www.dropbox.com/s/5htdry9gd4bhwip/SocialManager.zip?dl=0

Я проверял документацию по методу FB.AppRequest и пытался найти людей с похожей проблемой, но до сих пор не смог решить эту проблему (очевидно).

Однако весь остальной код работает нормально, в настоящий момент меня просто беспокоят запросы приложений.

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

4 ответа

Решение

Идентификатор объекта должен ссылаться на фактический объект OpenGraph (обычно числовой идентификатор). Вот как вы их создаете.

https://developers.facebook.com/docs/games/requests/v2.1#creatingobject

Попробуйте отладить результат, который вы получите от Facebook в MonoDevelop, как подробно описано здесь. Там вы получите правильное сообщение об ошибке, которое даст вам больше информации.

Спасибо за ответы на все вопросы!

Мне удалось решить эту проблему, зайдя в Object Browser Tool и найдя правильный objectID, который дал мне ошибки.

Я действительно получил ту же ошибку. Проблема в том, что данные вашего приложения неверны на Facebook. Перейдите в раздел "Детали моего приложения" на Facebook и измените категорию на "Игры".

Я надеюсь, что это работает для вас:).