Обработка кодов ошибок

Разработав некоторый код обработки ошибок внутри моего приложения Unity, чтобы выполнять специальные действия в случае сбоя запроса к Facebook (например, принудительный выход локального пользователя из системы или запрос нового разрешения), я обнаружил некоторые несоответствия между Facebook Graph API (обработка кодов ошибок) и результаты, которые я получаю для неудачных запросов.

При попытке опубликовать счет (Scores API) без предоставления разрешений на запись моему приложению, обратный вызов, назначенный запросу, получает FBResult, содержащий:

result.Error == "403 Forbidden"

вместо чего-то связанного с:

result.Error == {
    "error": {
        "message": "API Permission Denied", 
        "type": "", 
        "code": 10 ,
        "error_subcode": 467
    }
}

При просмотре примера FB friendsmash-unity игнорируются только ошибки, представленные в следующем фрагменте кода:

void APICallback(FBResult result)
{
    Util.Log("APICallback");
    if (result.Error != null)
    {
        Util.LogError(result.Error);
        // Let's just try again
        FB.API("/me?fields=id,first_name,friends.limit(100).fields(first_name,id)", Facebook.HttpMethod.GET, APICallback);
        return;
    }
  1. Использует ли Facebook разные шаблоны для Graph API и Scores API для обработки ошибок?

  2. Нужно ли мне реализовывать парсеры ошибок JSON и HTTP?

  3. Каковы наилучшие методы обработки ошибок Facebook в приложении Unity?


person georgepiva    schedule 31.03.2014    source источник


Ответы (1)


1) Существуют некоторые ограничения класса Unity WWW, которые, к сожалению, не позволяют нам возвращать более значимые ошибки. Они находятся в процессе исправления, поэтому в будущем result.Error будет возвращать сообщение об ошибке, а result.Text будет заполняться более содержательной информацией об ошибке, когда это произойдет. API Scores и Graph API должны использовать один и тот же шаблон. Хотя все еще есть некоторые несоответствия в том, как ошибка возвращается. Если вы обнаружите что-то подобное, сообщите нам об этом в нашем инструменте сообщения об ошибках: https://developers.facebook.com/bugs

2) Чтобы надежно себя обезопасить, я бы сказал да. Это будет хорошей практикой, чтобы убедиться, что ваша игра надежна.

3) Шаблон, которому мы пытаемся следовать с Graph API, заключается в том, что он не должен возвращать код ошибки, если что-то не пойдет не так. Затем он должен вернуть код ошибки HTTP и заполнить result.Error. Поэтому лучший способ — проверить, есть ли что-то в result.Error, и обработать это оттуда. Если вы обнаружите, что что-то не так, сообщите нам об этом.

person Brian Jew    schedule 04.04.2014
comment
Спасибо за разъяснения. - person georgepiva; 05.04.2014